<?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>60305</bug_id>
          
          <creation_ts>2011-05-05 15:12:12 -0700</creation_ts>
          <short_desc>Separate scrolling code out of RenderLayer</short_desc>
          <delta_ts>2021-01-25 14:39:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215443</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=220743</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>220705</dependson>
    
    <dependson>220708</dependson>
    
    <dependson>220715</dependson>
    
    <dependson>220729</dependson>
    
    <dependson>220851</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>achicu</cc>
    
    <cc>andersca</cc>
    
    <cc>annulen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bdakin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jamesr</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>manyoso</cc>
    
    <cc>mifenton</cc>
    
    <cc>mitz</cc>
    
    <cc>mkwst</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>staikos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>399095</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-05 15:12:12 -0700</bug_when>
    <thetext>Most RenderLayers are not created for scrolling reasons. RenderLayer should not inherit from ScrollableArea; rather, it should own one when necessary. This would significantly reduce RenderLayer bloat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399231</commentid>
    <comment_count>1</comment_count>
      <attachid>92512</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-05 17:27:04 -0700</bug_when>
    <thetext>Created attachment 92512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399233</commentid>
    <comment_count>2</comment_count>
      <attachid>92512</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-05 17:27:41 -0700</bug_when>
    <thetext>Comment on attachment 92512
Patch

I haven&apos;t done extensive testing of this patch. Feel free to take it and do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399247</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-05 17:53:05 -0700</bug_when>
    <thetext>Taking a safer approach via 60327 for now, but we still think it&apos;s a good direction to separate scrolling code out of RenderLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399418</commentid>
    <comment_count>4</comment_count>
      <attachid>92512</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-05-06 01:17:46 -0700</bug_when>
    <thetext>Comment on attachment 92512
Patch

This patch causes many test failures:


Regressions: Unexpected text diff mismatch : (20)
  fast/block/float/marquee-shrink-to-avoid-floats.html = TEXT
  fast/css/MarqueeLayoutTest.html = TEXT
  fast/css/text-overflow-ellipsis-bidi.html = TEXT
  fast/css/text-overflow-ellipsis-strict.html = TEXT
  fast/css/text-overflow-ellipsis.html = TEXT
  fast/events/autoscroll-in-textfield.html = TEXT
  fast/forms/date-input-visible-strings.html = TEXT
  fast/forms/input-readonly-autoscroll.html = TEXT
  fast/forms/search-rtl.html = TEXT
  fast/html/marquee-scroll.html = TEXT
  fast/html/marquee-scrollamount.html = TEXT
  fast/inline-block/003.html = TEXT
  fast/repaint/intermediate-layout-position-clip.html = TEXT
  fast/repaint/line-in-scrolled-clipped-block.html = TEXT
  fast/repaint/text-selection-rect-in-overflow-2.html = TEXT
  fast/repaint/text-selection-rect-in-overflow.html = TEXT
  fast/table/colspanMinWidth-vertical.html = TEXT
  fast/transforms/scrollIntoView-transformed.html = TEXT
  inspector/console/console-command-clear.html = TEXT
  svg/custom/scroll-hit-test.xhtml = TEXT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399524</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-06 08:25:41 -0700</bug_when>
    <thetext>Yeah, it wasn&apos;t meant for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407273</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-20 12:35:51 -0700</bug_when>
    <thetext>Not an issue after fixing 42550.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521966</commentid>
    <comment_count>7</comment_count>
      <attachid>119439</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-15 09:34:26 -0800</bug_when>
    <thetext>Created attachment 119439
WIP patch 1: rebaselined, cleaned-up, still some rough edges butcomments welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523542</commentid>
    <comment_count>8</comment_count>
      <attachid>119780</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-12-18 14:24:54 -0800</bug_when>
    <thetext>Created attachment 119780
Proposed refactoring 1: Introduce RenderLayerScrollableArea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598665</commentid>
    <comment_count>9</comment_count>
      <attachid>136315</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-09 15:19:45 -0700</bug_when>
    <thetext>Created attachment 136315
Proposed refactoring 2: Updated on ToT, tweaked the logic a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609921</commentid>
    <comment_count>10</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-04-25 11:13:02 -0700</bug_when>
    <thetext>For the record, this was discussed briefly as part of the scrolling session at this year&apos;s contributors meeting (http://trac.webkit.org/wiki/Scrolling%20Session%20Meeting%202012).

Sam / Anders, I hope the talk answered your concerns over this patch and you can find some time to look at it. The idea is to move everything scrolling and resizing related to the new RenderLayerScrollableArea (maybe we can come up with a better naming for that though like ScrollingHandler)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742391</commentid>
    <comment_count>11</comment_count>
      <attachid>136315</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-10-15 13:59:29 -0700</bug_when>
    <thetext>Comment on attachment 136315
Proposed refactoring 2: Updated on ToT, tweaked the logic a bit.

The patch won&apos;t apply anymore and I have switched to other tasks so clearing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923089</commentid>
    <comment_count>12</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2013-08-30 11:07:12 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Taking a safer approach via 60327 for now, but we still think it&apos;s a good direction to separate scrolling code out of RenderLayer.

Simon/Julien. I would to take on this patch. Should it be fine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680139</commentid>
    <comment_count>13</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 16:05:09 -0700</bug_when>
    <thetext>*** Bug 215443 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680150</commentid>
    <comment_count>14</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 16:27:32 -0700</bug_when>
    <thetext>I&apos;ll upload newer revisions from the patch from bug 215443 here, per request on Simon. Good idea to re-use this much older ticket for this :-)

First need to get build running for all platforms, please bear with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680151</commentid>
    <comment_count>15</comment_count>
      <attachid>406553</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 16:27:54 -0700</bug_when>
    <thetext>Created attachment 406553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680162</commentid>
    <comment_count>16</comment_count>
      <attachid>406558</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-13 16:49:06 -0700</bug_when>
    <thetext>Created attachment 406558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680237</commentid>
    <comment_count>17</comment_count>
      <attachid>406578</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 00:59:48 -0700</bug_when>
    <thetext>Created attachment 406578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680253</commentid>
    <comment_count>18</comment_count>
      <attachid>406581</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 03:18:11 -0700</bug_when>
    <thetext>Created attachment 406581
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680353</commentid>
    <comment_count>19</comment_count>
      <attachid>406581</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-14 10:53:22 -0700</bug_when>
    <thetext>Comment on attachment 406581
Patch

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

Seems like probably a great idea as long as it doesn’t add too much virtual function overhead. Love to hear what Simon thinks.

Is there some way to make this change in smaller steps, for example adding a scrollableLayer function that’s a synonym for layer first and deploying it while they still both return the same thing, so it’s easier to see the final step that splits the classes is correct? Even adding a scrollableLayer function to RenderLayer that returns &quot;this&quot; as a similar staging step. Could even add a RenderLayerScrollable.h header that just includes RenderLayer.h as a similar staging step.

&gt; Source/WebCore/page/ios/FrameIOS.mm:824
&gt; -    RenderLayer&amp; layer = *downcast&lt;RenderBoxModelObject&gt;(*renderer).layer();
&gt; +    auto* layer = downcast&lt;RenderBoxModelObject&gt;(*renderer).scrollableLayer();
&gt; +    if (!layer)
&gt; +        return;

I noticed that in some other cases we were able to assert rather than checking null. Not sure why here we had to check for null.

Could we add a hasScrollableLayer function to the renderer rather than adding this null check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680404</commentid>
    <comment_count>20</comment_count>
      <attachid>406614</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 12:23:44 -0700</bug_when>
    <thetext>Created attachment 406614
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680451</commentid>
    <comment_count>21</comment_count>
      <attachid>406623</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 15:03:10 -0700</bug_when>
    <thetext>Created attachment 406623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680488</commentid>
    <comment_count>22</comment_count>
      <attachid>406623</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-14 15:51:48 -0700</bug_when>
    <thetext>Comment on attachment 406623
Patch

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

&gt; Source/WebCore/editing/FrameSelection.cpp:2415
&gt; +                auto* scrollableLayer = layer-&gt;scrollableLayer();

I think having scrollableLayer() on RenderLayer is confusing. I&apos;d prefer to see this written as:

if (layer-&gt;isScrollable())
  auto&amp; scrollableLayer = downcast&lt;RenderLayerScrollable&gt;(&amp;layer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680523</commentid>
    <comment_count>23</comment_count>
      <attachid>406636</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 16:54:21 -0700</bug_when>
    <thetext>Created attachment 406636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680524</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-14 16:56:25 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #22)
&gt; 
&gt; I think having scrollableLayer() on RenderLayer is confusing. I&apos;d prefer to
&gt; see this written as:
&gt; 
&gt; if (layer-&gt;isScrollable())
&gt;   auto&amp; scrollableLayer = downcast&lt;RenderLayerScrollable&gt;(&amp;layer).

Hehe, I had that in my last variant :-) Will first try to get this to build everywhere, only iOS missing. Then will work on improving the readability - I agree, it really reads odd &apos;layer.scrollableLayer()&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680651</commentid>
    <comment_count>25</comment_count>
      <attachid>406678</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-15 15:14:19 -0700</bug_when>
    <thetext>Created attachment 406678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680696</commentid>
    <comment_count>26</comment_count>
      <attachid>406688</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-16 15:45:24 -0700</bug_when>
    <thetext>Created attachment 406688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680768</commentid>
    <comment_count>27</comment_count>
      <attachid>406712</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-17 06:00:01 -0700</bug_when>
    <thetext>Created attachment 406712
Patch, v2

Remove scrollableLayer() accessors, use downcast directly instead, as suggested by Simon</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680788</commentid>
    <comment_count>28</comment_count>
      <attachid>406713</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-17 06:45:10 -0700</bug_when>
    <thetext>Created attachment 406713
Patch, v3

Fix typo in DOMHTML.mm - should fix iOS/tv/watch builds again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680842</commentid>
    <comment_count>29</comment_count>
      <attachid>406724</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-17 10:07:44 -0700</bug_when>
    <thetext>Created attachment 406724
Patch, v4

Fix build in WebFrame.mm - hopefully the last iOS/tv/watch specific issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680844</commentid>
    <comment_count>30</comment_count>
      <attachid>406724</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-17 10:11:06 -0700</bug_when>
    <thetext>Comment on attachment 406724
Patch, v4

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

After looking at some of the changes in this patch, I felt annoyed by seeing the same pattern:

Original:

    layer-&gt;doSomething();

New:

    if (is&lt;RenderLayerScrollable&gt;(layer)) {
        auto* scrollableLayer = downcast&lt;RenderLayerScrollable&gt;(layer);
        scrollableLayer-&gt;doSomething();
    }

RenderLayerScrollable is a superclass of RenderLayer, so why does not RenderLayer define doSomething() a virtual method and RenderLayerScrollable override it? I think this would leave most of the code unchanged. I understand the virtual method adds indirection calling overhead, but are not the if-statement and the casting add similar or even more expensive overhead as well?

class RenderLayer {
public:
    virtual void doSomething() { };
};

class ScrollArea {
public:
    void doSomething() { ... }
};

class RenderLayerSrollable : public RenderLayer, public ScrollArea {
public:
    void doSomething() override { ScrollArea::doSomething(); }
};

Maybe another approach is to make RenderLayer contain a pointer to ScrollableArea or a superclass of it, which Simon did in his original patch. In this case, no virtual table will be needed. But some of the calls to RenderLayer will be directed to ScrollableArea.

class ScrollArea {
public:
    void doSomething() { ... }
};

class RenderLayer {
public:
    void doSomething()
    {
        if (m_scrollableArea)
            m_scrollArea-&gt;doSomething();
    };
    
private:
    std::unique_ptr&lt;RenderLayerScrollableArea&gt; m_scrollableArea;
};

&gt; Source/WebCore/rendering/RenderLayerScrollable.h:60
&gt; +    friend class RenderLayer;

Why RenderLayer is the base of this class and a friend at the same time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680925</commentid>
    <comment_count>31</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-08-17 14:31:04 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #30)

Thanks Said for the comments.

&gt; Original:
&gt; 
&gt;     layer-&gt;doSomething();
&gt; 
&gt; New:
&gt; 
&gt;     if (is&lt;RenderLayerScrollable&gt;(layer)) {
&gt;         auto* scrollableLayer = downcast&lt;RenderLayerScrollable&gt;(layer);
&gt;         scrollableLayer-&gt;doSomething();
&gt;     }
&gt; 
&gt; RenderLayerScrollable is a superclass of RenderLayer, so why does not
&gt; RenderLayer define doSomething() a virtual method and RenderLayerScrollable
&gt; override it? I think this would leave most of the code unchanged. I
&gt; understand the virtual method adds indirection calling overhead, but are not
&gt; the if-statement and the casting add similar or even more expensive overhead
&gt; as well?

When I first split RenderLayer in two parts (RenderLayerHTML/SVG in the SVG PoC branch), I did just that: used virtual methods, avoiding all if(is&lt;&gt;) / downcast constructs.

While profiling the SVG PoC branch I found that by removing all virtual calls and employing the LayerType concept I could gain a speed-up - I can look up the profiles, I think it was a ~ 7% progression on MotionMark SVG suites compared to the SVG PoC branch before with virtual function calls.

The is&lt;RenderLayerScrollable&gt;() boils down to one inlined function call to access RenderLayer::layerType() and one comparison (== LayerType::Scrollable).
The downcast&lt;&gt; boils down to a static_cast, which is cheap (zero for single-inheritance relations, less higher for N base classes).

Anyhow, I did not perform the performance analysis on this branch so cannot proof that this is faster - I&apos;d need to repeat the exercise, but I doubt it will be faster :-)

&gt; 
&gt; Maybe another approach is to make RenderLayer contain a pointer to
&gt; ScrollableArea or a superclass of it, which Simon did in his original patch.
&gt; In this case, no virtual table will be needed.
&gt; But some of the calls to RenderLayer will be directed to ScrollableArea.

I wasn&apos;t aware of his patch when I started to work on this.
It boils down to: do we want a is-a or has-a relationship? Currently we assume that the RenderLayer is-a scrollable area, and I&apos;ve adapted that.

I haven&apos;t explored has-a yet, maybe I&apos;m overlooking other benefits.
 
&gt; &gt; Source/WebCore/rendering/RenderLayerScrollable.h:60
&gt; &gt; +    friend class RenderLayer;
&gt; 
&gt; Why RenderLayer is the base of this class and a friend at the same time?
Probably a leftover, will check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709852</commentid>
    <comment_count>32</comment_count>
      <attachid>414792</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-22 17:05:42 -0800</bug_when>
    <thetext>Created attachment 414792
Patch, v5 (squashed for testing)

NOTE: Set r? to trigger EWS - don&apos;t know if that&apos;s necessary, not intended for a real review yet.

&quot;Patch, v5&quot; actually consists of four independent patches, that can be reviewed/landed separated.
I squashed them together to obtain EWS results first for the final patch, since I still expect regressions on Mac/Win etc. that need to be checked first. Once EWS shows no regressions, I&apos;ll start uploading the individual patch chunks for review. Feel free to check the patch nevertheless. It is based on the previous iterations + discussions after the meeting with Simon, Said, etc.

The four independent patches are:
1) Introduce RenderLayerScrollableArea stub (build system changes, etc.)
2) Move overflow/scrolling functionality from RenderLayer -&gt; RenderLayerScrollableArea.
   Introduce temporary glue code: void RenderLayer::foo() { if (m_scrollableArea) m_scrollableArea-&gt;foo(); }
   to minimize the changes to WebCore in general and ease review.
3) Remove glue code, make WebCore aware of RenderLayerScrollableArea
4) Enable dynamic creation of RenderLayerScrollableArea, only when it is needed!
   This is the tricky part that kept me busy for a long while.

If a scrollable area is not needed for a RenderLayer, the RenderLayer will now consume less memory than before.
I measured this to be performance and memory-neutral on two benchmarks: MotionMark, Speedometer.

While the size reduction of RenderLayer is significant, it is negligible as soon as the layer needs a backing store...
Thus I expect this to have little impact on memory consumption in &quot;real-life&quot; use-cases. Nevertheless it simplifies the code a lot, and opens possibilities for further refactoring &amp; cleanup that are the main motivation for this work: e.g. introduce RenderLayerHTML, further cleaning up RenderLayer.

The final goal is to make RenderLayer less expensive to use, to allow to be reused for SVG.
I have a PoC branch where SVG rendering/hit-testing/etc. goes through RenderLayer, which opens up nice possibilites, such as 3D transformations, GPU composition etc. However on static rendering it currently regresses performance, due to the RenderLayer cost.

Disclaimer: I just finished rebasing this on ToT -- it was ~ 2 months behind. Only ran a limited set of layout tests, as I want to get this patch out quickly to get some early results before EWS is shut-down due to the maintenance tasks this week.
.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709853</commentid>
    <comment_count>33</comment_count>
      <attachid>414793</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-22 17:43:15 -0800</bug_when>
    <thetext>Created attachment 414793
Patch, v5 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710117</commentid>
    <comment_count>34</comment_count>
      <attachid>414887</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 01:55:51 -0800</bug_when>
    <thetext>Created attachment 414887
Patch, v6 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710149</commentid>
    <comment_count>35</comment_count>
      <attachid>414891</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 03:48:17 -0800</bug_when>
    <thetext>Created attachment 414891
Patch, v8 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710153</commentid>
    <comment_count>36</comment_count>
      <attachid>414893</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 03:59:44 -0800</bug_when>
    <thetext>Created attachment 414893
Patch, v9 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710156</commentid>
    <comment_count>37</comment_count>
      <attachid>414894</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 04:55:37 -0800</bug_when>
    <thetext>Created attachment 414894
Patch, v10 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710168</commentid>
    <comment_count>38</comment_count>
      <attachid>414900</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 06:27:20 -0800</bug_when>
    <thetext>Created attachment 414900
Patch, v11 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710169</commentid>
    <comment_count>39</comment_count>
      <attachid>414901</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 06:47:20 -0800</bug_when>
    <thetext>Created attachment 414901
Patch, v12 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710176</commentid>
    <comment_count>40</comment_count>
      <attachid>414907</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-26 09:16:39 -0800</bug_when>
    <thetext>Created attachment 414907
Patch, v13 (squashed for testing)

Hopefully &quot;Patch, v13&quot; compiles everywhere. Willn now aggregate and fix remaining layout test regressions/crashes on all platforms. Stay tuned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710228</commentid>
    <comment_count>41</comment_count>
      <attachid>414917</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-27 00:12:46 -0800</bug_when>
    <thetext>Created attachment 414917
Patch, v14 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710237</commentid>
    <comment_count>42</comment_count>
      <attachid>414922</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-27 01:06:17 -0800</bug_when>
    <thetext>Created attachment 414922
Patch, v15 (squashed for testing)

&quot;Patch, v15&quot; should compile everywhere and show no crashes. Three layout test regressions are expected to remain on all platforms, that are tackled once the crashes are gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710413</commentid>
    <comment_count>43</comment_count>
      <attachid>414974</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-11-28 00:28:43 -0800</bug_when>
    <thetext>Created attachment 414974
Patch, v16 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713855</commentid>
    <comment_count>44</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-12-11 02:07:23 -0800</bug_when>
    <thetext>It took a while to setup a local macOS/iOS debugging environment, and debug the compositing test failures -- I now have a clear understanding what went wrong and only one remaining regressions to tackle -- a final patch can be expected today or tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714115</commentid>
    <comment_count>45</comment_count>
      <attachid>416053</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-12-11 15:32:53 -0800</bug_when>
    <thetext>Created attachment 416053
Patch, v17 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714131</commentid>
    <comment_count>46</comment_count>
      <attachid>416058</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-12-11 15:44:53 -0800</bug_when>
    <thetext>Created attachment 416058
Patch, v18 (squashed for testing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714161</commentid>
    <comment_count>47</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2020-12-11 16:30:45 -0800</bug_when>
    <thetext>I&apos;ve fixes the remaining layout tests failures on macOS/iOS using a catalina system. Assuming patch v18 passes EWS everywhere, I consider the initial work done.

As the patch is really large, I propose to split up the patch into 4 atomic chunks:

1) Add RenderLayerScrollableArea stub + build system changes (already filed https://bugs.webkit.org/show_bug.cgi?id=219808 for this)

2) Move overflow/scroll/marquee/... code from RenderLayer to RenderLayerScrollableArea in such a way that the impact outside of RenderLayer is minimal (to allow for a smaller patch, at the cost of a few proxy methods in RenderLayer that forward to RenderLayerScrollableArea)

3) Remove the proxy methods from RenderLayer, and make a few call-sites (EventHandler, ...) aware of it

4) Only create RenderLayerScrollableArea on demand.

The patches for 1) + 2) + 3) shall have no observable difference.
Only patch 4) actually enables the benefit of the improved design.

See RenderBox::requiresLayerWithScrollableArea() for the small list of conditions: RenderView + document element renderer receive a RenderLayerScrollableArea (RLSA). Boxes with horizontal/vertical overflow present, CSS &apos;resize&apos; property set, or &lt;marquee&gt; elements also get a RLSA -- all other cases save memory.

Let me know what you think of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717246</commentid>
    <comment_count>48</comment_count>
      <attachid>416978</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-05 02:02:19 -0800</bug_when>
    <thetext>Created attachment 416978
Patch, v19</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717248</commentid>
    <comment_count>49</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-05 02:06:11 -0800</bug_when>
    <thetext>I&apos;ve uploaded the full patch for review - unfortunately the part that moves methods from RenderLayer -&gt; RenderLayerScrollableArea is ~ 130k alone + ChangeLog.

Before taking additional time to split up things, I&apos;d like to hear from the reviewers first what they propose -- keep this large patch, or add temporary glue methods to minimize the changes outside of RenderLayer (but this glue code would be removed again in follow-up patches...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717256</commentid>
    <comment_count>50</comment_count>
      <attachid>416980</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-05 02:34:34 -0800</bug_when>
    <thetext>Created attachment 416980
Patch, v20</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717348</commentid>
    <comment_count>51</comment_count>
      <attachid>416980</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-01-05 09:38:08 -0800</bug_when>
    <thetext>Comment on attachment 416980
Patch, v20

I like the &quot;temporary glue&quot; idea if it can effectively keep the large code movement separate from the other changes. Great for bisecting later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718910</commentid>
    <comment_count>52</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-12 00:11:01 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #51)
&gt; Comment on attachment 416980 [details]
&gt; Patch
&gt; 
&gt; I like the &quot;temporary glue&quot; idea if it can effectively keep the large code
&gt; movement separate from the other changes. Great for bisecting later.

Good, I will adapt the patch!
Thanks Darin, and sorry for the late reply - I missed the bugzilla mail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719460</commentid>
    <comment_count>53</comment_count>
      <attachid>417571</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-13 15:25:13 -0800</bug_when>
    <thetext>Created attachment 417571
Patch, v21</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719466</commentid>
    <comment_count>54</comment_count>
      <attachid>417573</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-13 15:44:28 -0800</bug_when>
    <thetext>Created attachment 417573
Patch, v22</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719467</commentid>
    <comment_count>55</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-13 15:45:31 -0800</bug_when>
    <thetext>&quot;Patch, v22&quot; aims to provide the same functionality than the previous patches, but the code changes are more isolated in RenderLayer/RenderLayerScrollableArea.

Important public RenderLayerScrollableArea methods are proxied through RenderLayer (temporary glue code) to minimize code changes outside of RenderLayer. The only code changes that have to be made is in places that assume that a RenderLayer* can be casted to a ScrollableArea*, which is no longer the case.

This is the smallest version I could produce, obviously still a large patch...

Just finished rebasing this on WebKit ToT, and haven&apos;t performed a full layout test run yet after rebasing. Will get some sleep, but didn&apos;t want to leave without giving EWS a chance to work overnight :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719741</commentid>
    <comment_count>56</comment_count>
      <attachid>417666</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-14 16:12:31 -0800</bug_when>
    <thetext>Created attachment 417666
Patch, v23</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720134</commentid>
    <comment_count>57</comment_count>
      <attachid>417666</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-01-16 10:45:54 -0800</bug_when>
    <thetext>Comment on attachment 417666
Patch, v23

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

&gt; Source/WebCore/rendering/RenderLayerScrollableArea.cpp:90
&gt; +    auto&amp; renderer = m_layer.renderer();
&gt; +    ASSERT(m_registeredScrollableArea == renderer.view().frameView().containsScrollableArea(this));
&gt; +
&gt; +    if (m_registeredScrollableArea)
&gt; +        renderer.view().frameView().removeScrollableArea(this);
&gt; +
&gt; +#if ENABLE(IOS_TOUCH_EVENTS)
&gt; +    unregisterAsTouchEventListenerForScrolling();
&gt; +#endif
&gt; +    if (Element* element = renderer.element())
&gt; +        element-&gt;setSavedLayerScrollPosition(m_scrollPosition);
&gt; +
&gt; +    destroyScrollbar(HorizontalScrollbar);
&gt; +    destroyScrollbar(VerticalScrollbar);
&gt; +
&gt; +    if (auto* scrollingCoordinator = renderer.page().scrollingCoordinator())
&gt; +        scrollingCoordinator-&gt;willDestroyScrollableArea(*this);
&gt; +
&gt; +    clearScrollCorner();
&gt; +    clearResizer();

Doing all this in the destructor makes me a bit nervous. Can we do it in a &quot;clear&quot; function that&apos;s called from RenderLayer?

&gt; Source/WebCore/rendering/RenderLayerScrollableArea.cpp:106
&gt; +void RenderLayerScrollableArea::storeScrollPosition()
&gt; +{
&gt; +    auto* element = m_layer.renderer().element();
&gt; +    if (!element)
&gt; +        return;
&gt; +
&gt; +    if (m_layer.renderBox()) {
&gt; +        // We save and restore only the scrollOffset as the other scroll values are recalculated.
&gt; +        m_scrollPosition = element-&gt;savedLayerScrollPosition();
&gt; +        if (!m_scrollPosition.isZero())
&gt; +            scrollAnimator().setCurrentPosition(m_scrollPosition);
&gt; +    }
&gt; +
&gt; +    element-&gt;setSavedLayerScrollPosition(IntPoint());

&quot;Store&quot; is ambiguous here. It&apos;s more like &quot;restore&quot;.

&gt; Source/WebCore/rendering/RenderLayerScrollableArea.h:277
&gt; +    // Minimum padding on x86_64 (4 bytes), after m_scrollHeight)
&gt; +    bool m_scrollDimensionsDirty : 1;
&gt; +    bool m_inOverflowRelayout : 1;
&gt; +    bool m_registeredScrollableArea : 1;
&gt; +    bool m_hasCompositedScrollableOverflow : 1;
&gt; +
&gt; +#if PLATFORM(IOS_FAMILY)
&gt; +#if ENABLE(IOS_TOUCH_EVENTS)
&gt; +    bool m_registeredAsTouchEventListenerForScrolling : 1;
&gt; +#endif
&gt; +    bool m_adjustForIOSCaretWhenScrolling : 1;
&gt; +#endif
&gt; +    bool m_requiresScrollPositionReconciliation : 1;
&gt; +    bool m_containsDirtyOverlayScrollbars : 1;
&gt; +    bool m_updatingMarqueePosition : 1;

It&apos;s probably not worth using a bitset here for memory saving any more; if these are plain bools you can use initializers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720150</commentid>
    <comment_count>58</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-16 16:27:30 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #57)
&gt; Comment on attachment 417666 [details]
&gt; Patch, v23
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417666&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerScrollableArea.cpp:90
&gt; &gt; +    auto&amp; renderer = m_layer.renderer();
&gt; &gt; +    ASSERT(m_registeredScrollableArea == renderer.view().frameView().containsScrollableArea(this));
&gt; &gt; +
&gt; &gt; +    if (m_registeredScrollableArea)
&gt; &gt; +        renderer.view().frameView().removeScrollableArea(this);
&gt; &gt; +
&gt; &gt; +#if ENABLE(IOS_TOUCH_EVENTS)
&gt; &gt; +    unregisterAsTouchEventListenerForScrolling();
&gt; &gt; +#endif
&gt; &gt; +    if (Element* element = renderer.element())
&gt; &gt; +        element-&gt;setSavedLayerScrollPosition(m_scrollPosition);
&gt; &gt; +
&gt; &gt; +    destroyScrollbar(HorizontalScrollbar);
&gt; &gt; +    destroyScrollbar(VerticalScrollbar);
&gt; &gt; +
&gt; &gt; +    if (auto* scrollingCoordinator = renderer.page().scrollingCoordinator())
&gt; &gt; +        scrollingCoordinator-&gt;willDestroyScrollableArea(*this);
&gt; &gt; +
&gt; &gt; +    clearScrollCorner();
&gt; &gt; +    clearResizer();
&gt; 
&gt; Doing all this in the destructor makes me a bit nervous. Can we do it in a
&gt; &quot;clear&quot; function that&apos;s called from RenderLayer?
Good idea. RenderLayer::clearLayerScrollableArea() already calls clearScrollCorner / clearResizer on RenderLayerScrollableArea. I&apos;ll change that to a single clear() call that encapsulates what the destructor is currenly doing.

&gt; &gt; Source/WebCore/rendering/RenderLayerScrollableArea.cpp:106
&gt; &gt; +void RenderLayerScrollableArea::storeScrollPosition()
&gt; &gt; +{
&gt; &gt; +    auto* element = m_layer.renderer().element();
&gt; &gt; +    if (!element)
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    if (m_layer.renderBox()) {
&gt; &gt; +        // We save and restore only the scrollOffset as the other scroll values are recalculated.
&gt; &gt; +        m_scrollPosition = element-&gt;savedLayerScrollPosition();
&gt; &gt; +        if (!m_scrollPosition.isZero())
&gt; &gt; +            scrollAnimator().setCurrentPosition(m_scrollPosition);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    element-&gt;setSavedLayerScrollPosition(IntPoint());
&gt; 
&gt; &quot;Store&quot; is ambiguous here. It&apos;s more like &quot;restore&quot;.
Indeed, bad naming, fixed.
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderLayerScrollableArea.h:277
&gt; &gt; +    // Minimum padding on x86_64 (4 bytes), after m_scrollHeight)
&gt; &gt; +    bool m_scrollDimensionsDirty : 1;
&gt; &gt; +    bool m_inOverflowRelayout : 1;
&gt; &gt; +    bool m_registeredScrollableArea : 1;
&gt; &gt; +    bool m_hasCompositedScrollableOverflow : 1;
&gt; &gt; +
&gt; &gt; +#if PLATFORM(IOS_FAMILY)
&gt; &gt; +#if ENABLE(IOS_TOUCH_EVENTS)
&gt; &gt; +    bool m_registeredAsTouchEventListenerForScrolling : 1;
&gt; &gt; +#endif
&gt; &gt; +    bool m_adjustForIOSCaretWhenScrolling : 1;
&gt; &gt; +#endif
&gt; &gt; +    bool m_requiresScrollPositionReconciliation : 1;
&gt; &gt; +    bool m_containsDirtyOverlayScrollbars : 1;
&gt; &gt; +    bool m_updatingMarqueePosition : 1;
&gt; 
&gt; It&apos;s probably not worth using a bitset here for memory saving any more; if
&gt; these are plain bools you can use initializers.
Good point - by this I spotted that m_scrollWidth / m_scrollHeight were not initialized in the constructor -- moved everything to in-place initialization to avoid that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720151</commentid>
    <comment_count>59</comment_count>
      <attachid>417666</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-16 16:28:29 -0800</bug_when>
    <thetext>Comment on attachment 417666
Patch, v23

Landed in r271559 (https://trac.webkit.org/changeset/271559/webkit).
Leaving the bug open, as the glue code removal is now pending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720656</commentid>
    <comment_count>60</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2021-01-19 13:19:21 -0800</bug_when>
    <thetext>The changes in https://trac.webkit.org/changeset/271559/webkit

broke fast/forms/password-scrolled-after-caps-lock-toggled.html on Big Sur

History;
https://results.webkit.org/?suite=layout-tests&amp;test=fast%2Fforms%2Fpassword-scrolled-after-caps-lock-toggled.html

Diff:
--- /Volumes/Data/slave/bigsur-release-tests-wk2/build/layout-test-results/fast/forms/password-scrolled-after-caps-lock-toggled-expected.txt
+++ /Volumes/Data/slave/bigsur-release-tests-wk2/build/layout-test-results/fast/forms/password-scrolled-after-caps-lock-toggled-actual.txt
@@ -25,7 +25,7 @@
 PASS document.getElementById(&apos;input&apos;).scrollLeft is 0
 
 After caps lock enabled:
-PASS document.getElementById(&apos;input&apos;).scrollLeft is 0
+FAIL document.getElementById(&apos;input&apos;).scrollLeft should be 0. Was 5.
 
 After caps lock disabled:
 PASS document.getElementById(&apos;input&apos;).scrollLeft is 0
@@ -39,6 +39,7 @@
 After caps lock disabled:
 PASS document.getElementById(&apos;input&apos;).scrollLeft is 0
 PASS successfullyParsed is true
+Some tests failed.
 
 TEST COMPLETE
 

I can reproduce this with command:
run-webkit-tests --iterations 2000 --exit-after-n-failures 1 --exit-after-n-crashes-or-timeouts 1 --debug-rwt-logging --no-retry --force --no-build -f fast/forms/password-scrolled-after-caps-lock-toggled.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722284</commentid>
    <comment_count>61</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-25 14:34:32 -0800</bug_when>
    <thetext>(In reply to Truitt Savell from comment #60)
&gt; The changes in https://trac.webkit.org/changeset/271559/webkit
&gt; 
&gt; broke fast/forms/password-scrolled-after-caps-lock-toggled.html on Big Sur
&gt; 
&gt; History;
&gt; https://results.webkit.org/?suite=layout-tests&amp;test=fast%2Fforms%2Fpassword-
&gt; scrolled-after-caps-lock-toggled.html
&gt; 
Oh I missed this comment, sorry. webkit.org/b/220743 was opened to track the issue. The regression was fixed in r271732.

Please let me know if you see any other issues/flakiness since this landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722289</commentid>
    <comment_count>62</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2021-01-25 14:38:25 -0800</bug_when>
    <thetext>Since this change was rather intrusive and large, I&apos;d leave a comment here explaining the dependencies of the whole patchset, if we ever need to bisect this :-)

The chronological order of the RenderLayerScrollableArea introduction:

#1) webkit.org/b/219808 - Introduce RenderLayerScrollableArea
Landed: 30.12.2020
Committed r271111: &lt;https://trac.webkit.org/changeset/271111&gt;

#2) webkit.org/b/60305 - Separate scrolling code out of RenderLayer
Landed: 16.01.2021
Committed r271559: &lt;https://trac.webkit.org/changeset/271559&gt;

#3) webkit.org/b/220705 - Remove recently added glue code: RenderLayer::(scrollToOffset / scrollToXOffset / scrollToYOffset)
Landed: 18.01.2021
Committed r271577: &lt;https://trac.webkit.org/changeset/271577&gt;

#4) webkit.org/b/220708 - Remove recently added glue code: RenderLayer::(setAdjustForIOSCaretWhenScrolling / setScrollShouldClearLatchedState / setConstrainsScrollingToContentEdge)
Landed: 18.01.2021
Committed r271585: &lt;https://trac.webkit.org/changeset/271585&gt;

#5) webkit.org/b/220715 - Continue removing glue code from RenderLayer that was recently added in r271559
Landed: 19.01.2021
Committed r271598: &lt;https://trac.webkit.org/changeset/r271598&gt;

#6) webkit.org/b/220743 - REGRESSION (r271559): [BigSur] fast/forms/password-scrolled-after-caps-lock-toggled.html is consistently failing
Landed: 22.01.2021
Committed r271732: &lt;https://trac.webkit.org/changeset/271732&gt;

#7) webkit.org/b/220729 - Continue removing glue code from RenderLayer that was recently added in r271559
Landed: 22.01.2021
Committed r271740: &lt;https://trac.webkit.org/changeset/r271740&gt;

#8) webkit.org/b/220851 - Finish introduction of RenderLayerScrollableArea: remove remaining glue code from RenderLayer
Landed: 25.01.2021
Committed r271814: &lt;https://trac.webkit.org/changeset/r271814&gt;

Today the final patch landed - bug 220851 - removing the last bits of the temporary glue code and choosing a sane, consistent variable naming scheme for the scrollableArea() / ensureLayerScrollableArea() results (prefer &apos;scrollableArea&apos; over &apos;scrollableLayer&apos;).

Therefore this bug can be closed now, finally. Now moving on to SVG + RenderLayer again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722290</commentid>
    <comment_count>63</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-25 14:39:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/73589122&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92512</attachid>
            <date>2011-05-05 17:27:04 -0700</date>
            <delta_ts>2011-12-15 09:34:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20110505172703.patch</filename>
            <type>text/plain</type>
            <size>25174</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MjAzMjg0ZjVlN2RlMGQ1
N2EwYmYxNDM4Njk3M2NhYWI5OWZmMGEwLi44ZWFkNjg4NTEyYjhlMDYyM2MzZDk1OTUzNjQ3NTc3
MDY2NGRmNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzQgQEAKIDIwMTEtMDUtMDUgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuZGVyTGF5ZXIgc2hvdWxkIG5vdCBpbmhlcml0
IGZyb20gU2Nyb2xsYWJsZUFyZWEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgSW5oZXJpdGluZyBSZW5kZXJMYXllciBmcm9t
IFNjcm9sbGFibGVBcmVhIGFkZHMgYmxvYXQgdG8gYWxsCisgICAgICAgIFJlbmRlckxheWVycywg
b25seSBzb21lIG9mIHdoaWNoIGFyZSBzY3JvbGxhYmxlLgorICAgICAgICAKKyAgICAgICAgQ3Jl
YXRlIGEgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBjbGFzcyB3aGljaCBpcyBvbmx5CisgICAg
ICAgIGFsbG9jYXRlZCBmb3Igc2Nyb2xsYWJsZSBSZW5kZXJMYXllcnMuIEl0IGZvcndhcmRzCisg
ICAgICAgIG1vc3QgY2FsbHMgdGhyb3VnaCB0byB0aGUgUmVuZGVyTGF5ZXIsIGJ1dCB0YWtlcyBy
ZXNwb25zaWJpbGl0eSBmb3IKKyAgICAgICAgcmVnaXN0ZXJpbmcgd2l0aCBQYWdlLgorICAgICAg
ICAKKyAgICAgICAgU2luY2UgUmVuZGVyTGF5ZXIgY2FuJ3QgYWNjZXNzIG1fc2Nyb2xsT3JpZ2lu
IGRpcmVjdGx5IGFueSBtb3JlLAorICAgICAgICBoYXZlIGl0IGFzayBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhIGZvciB0aGUgc2Nyb2xsIG9yaWdpbi4gVGhpcworICAgICAgICBhbHNvIHJlcXVp
cmVzIGEgc2V0dGVyIG9uIFNjcm9sbGFibGVBcmVhLgorCisgICAgICAgICogcGFnZS9FdmVudEhh
bmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5v
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT3JpZ2luKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0
aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0Fj
dGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Nj
cm9sbENvcm5lclZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjdXJyZW50TW91c2VQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpkaXNjb25uZWN0RnJvbVBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbE9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVh
dGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxYT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxZT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb1hPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXIpOgorCisyMDExLTA1LTA1ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4u
CiAKICAgICAgICAgRXZlcnkgUmVuZGVyTGF5ZXIgcmVnaXN0ZXJzIGl0c2VsZiBhcyBhIFNjcm9s
bGFibGVBcmVhCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNWRiMmEwNDU3
NjU3NjQxMzYwYTVkMGVkNWIwMDVmNTBkZGE3ZGYyZC4uNTVjZGZiNTk0ZWMzYzA5ZWRmZTA3NGU2
ZjU5ZWZhMjQ0MTU0NmZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAt
MTUyOCw4ICsxNTI4LDEwIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBp
ZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JOb2RlKGhvdmVyZWROb2RlLmlubmVyTm9k
ZSgpKSkgewotICAgICAgICBpZiAocGFnZS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXllcikp
Ci0gICAgICAgICAgICBsYXllci0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VNb3ZlZEluQ29udGVu
dEFyZWEoKTsKKyAgICAgICAgaWYgKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IGxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAocGFnZS0+Y29udGFpbnNT
Y3JvbGxhYmxlQXJlYShzY3JvbGxhYmxlQXJlYSkpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX2ZyYW1lLT52
aWV3KCkpCkBAIC0xOTUyLDggKzE5NTQsMTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1v
dXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChwYWdlICYmIChsYXllckZvckxhc3ROb2Rl
ICYmICghbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSB8fCBsYXllckZvck5vZGVVbmRlck1vdXNlICE9
IGxheWVyRm9yTGFzdE5vZGUpKSkgewogICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGhhcyBtb3Zl
ZCBiZXR3ZWVuIGxheWVycy4KLSAgICAgICAgICAgIGlmIChwYWdlLT5jb250YWluc1Njcm9sbGFi
bGVBcmVhKGxheWVyRm9yTGFzdE5vZGUpKQotICAgICAgICAgICAgICAgIGxheWVyRm9yTGFzdE5v
ZGUtPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICAgICAg
ICAgIGlmIChTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBsYXllckZvckxhc3ROb2Rl
LT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhZ2UtPmNvbnRhaW5z
U2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpKQorICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VFeGl0ZWRDb250ZW50QXJlYSgpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlVW5k
ZXJNb3VzZSAmJiAoIW1fbGFzdE5vZGVVbmRlck1vdXNlIHx8IG1fbGFzdE5vZGVVbmRlck1vdXNl
LT5kb2N1bWVudCgpICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpKSB7CkBAIC0xOTY0LDggKzE5Njgs
MTAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUq
IHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIGlmIChwYWdlICYmIChsYXllckZvck5vZGVVbmRlck1vdXNlICYmICghbGF5ZXJGb3JMYXN0
Tm9kZSB8fCBsYXllckZvck5vZGVVbmRlck1vdXNlICE9IGxheWVyRm9yTGFzdE5vZGUpKSkgewog
ICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGhhcyBtb3ZlZCBiZXR3ZWVuIGxheWVycy4KLSAgICAg
ICAgICAgIGlmIChwYWdlLT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyRm9yTm9kZVVuZGVy
TW91c2UpKQotICAgICAgICAgICAgICAgIGxheWVyRm9yTm9kZVVuZGVyTW91c2UtPnNjcm9sbEFu
aW1hdG9yKCktPm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAgICAgICAgICBpZiAoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhID0gbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZS0+c2Ny
b2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgICAgIGlmIChwYWdlLT5jb250YWluc1Njcm9s
bGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX2xhc3ROb2RlVW5k
ZXJNb3VzZSAmJiBtX2xhc3ROb2RlVW5kZXJNb3VzZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLT5k
b2N1bWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxh
YmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAppbmRl
eCAzMGRiN2QxZGNkMDJmNzgyODcyN2FlZDQwNzUxZGJhYTcyOWVhYjRkLi4zODYwNTBmMzM0YzAw
ZGE2NWVkZGE4NGMzMzA5ZTA2ZmZlM2VlYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGFibGVBcmVhLmgKQEAgLTgxLDYgKzgxLDcgQEAgcHVibGljOgogCiAgICAgU2Nyb2xsQW5p
bWF0b3IqIHNjcm9sbEFuaW1hdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxBbmltYXRvci5n
ZXQoKTsgfQogICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbE9yaWdpbjsgfQorICAgIHZvaWQgc2V0U2Nyb2xsT3JpZ2luKGNvbnN0IEludFBv
aW50JiBwKSB7IG1fc2Nyb2xsT3JpZ2luID0gcDsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IDk5MTJkMDcxZTY5MDkzNTJkZjgzNzdiZDExMjNmOWYwY2I1YjdmNjQuLjY0ZTk4
YjRkMWEwNzkzMzkxNTUxZTRhMzg0NzViMDU2NjQyMmEwZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRl
clRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgpAQCAtMTI4LDYgKzEyOSwxNTYgQEAgdm9pZCBDbGlwUmVjdHM6OmRlc3Ry
b3koUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKQogICAgIHJlbmRlckFyZW5hLT5mcmVlKCooc2l6
ZV90ICopdGhpcywgdGhpcyk7CiB9CiAKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEg
OiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworcHVibGljOgorICAgIH5SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKCkKKyAgICB7CisgICAgICAgIGlmIChtX3BhZ2UpCisgICAgICAgICAgICBtX3Bh
Z2UtPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBQYXNz
T3duUHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IGNyZWF0ZShSZW5kZXJMYXllciogbGF5
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEobGF5ZXIpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXIqIGxheWVyKQorICAgICAgICA6IG1fb3duaW5nTGF5
ZXIobGF5ZXIpCisgICAgeworICAgICAgICBzZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50
RWRnZShmYWxzZSk7CisKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGxheWVyLT5yZW5kZXJl
cigpLT5mcmFtZSgpKSB7CisgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdl
KCkpIHsKKyAgICAgICAgICAgICAgICBtX3BhZ2UgPSBwYWdlOworICAgICAgICAgICAgICAgIG1f
cGFnZS0+YWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQorICAgIHZpcnR1YWwg
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX293bmluZ0xheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7IAorICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7IAorICAg
IH0KKworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+c2Ny
b2xsU2l6ZShvcmllbnRhdGlvbik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIHApCisgICAgeworICAgICAgICBtX293bmluZ0xh
eWVyLT5zZXRTY3JvbGxPZmZzZXQocCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgaW50IHNj
cm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3duaW5nTGF5ZXItPnNjcm9sbFBvc2l0aW9uKHNjcm9sbGJhcik7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7CisgICAgICAgIG1fb3duaW5nTGF5
ZXItPmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KHNjcm9sbGJhciwgcik7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0
JiByKQorICAgIHsKKyAgICAgICAgbV9vd25pbmdMYXllci0+aW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3Qocik7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+aXNBY3RpdmUoKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+aXNTY3JvbGxDb3JuZXJWaXNpYmxl
KCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLT5zY3JvbGxDb3JuZXJS
ZWN0KCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGJhciwgcik7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3Jv
bGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKHNjcm9sbGJhciwgcik7CisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX293bmluZ0xheWVyLT5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoc2Nyb2xsYmFyLCBwKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIsIGNvbnN0IEludFBvaW50JiBwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b3duaW5nTGF5ZXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihzY3JvbGxi
YXIsIHApOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLT5jb250ZW50c1NpemUo
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdMYXllci0+dmlzaWJsZUhlaWdodCgpOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPnZpc2libGVXaWR0aCgpOworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLT5jdXJyZW50TW91c2VQb3NpdGlvbigpOwor
ICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpc2Nv
bm5lY3RGcm9tUGFnZSgpCisgICAgeworICAgICAgICBtX3BhZ2UgPSAwOworICAgIH0KKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIq
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9vd25pbmdMYXllci0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgfQor
CisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX293bmluZ0xheWVyLT5sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXll
ckZvclNjcm9sbENvcm5lcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vd25pbmdM
YXllci0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKTsKKyAgICB9CisjZW5kaWYKKworICAgIFJlbmRl
ckxheWVyKiBtX293bmluZ0xheWVyOworICAgIFBhZ2UqIG1fcGFnZTsKK307CisKIFJlbmRlckxh
eWVyOjpSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIpCiAgICAgOiBt
X3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICwgbV9wYXJlbnQoMCkKQEAgLTE4MiwxMCArMzMzLDcg
QEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
cikKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAs
IG1fcmVzaXplcigwKQotICAgICwgbV9zY3JvbGxhYmxlQXJlYVBhZ2UoMCkKIHsKLSAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwot
CiAgICAgaWYgKCFyZW5kZXJlci0+Zmlyc3RDaGlsZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpKSB7
CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBt
X2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFOwpAQCAtMTk5LDEyICszNDcsMTEgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigp
CiAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnJlc2l6ZUxheWVyRGVzdHJveWVk
KCk7CiAgICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWFQYWdlKQotICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhUGFnZS0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KICAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgIGRlc3Ryb3lTY3JvbGxiYXIo
VmVydGljYWxTY3JvbGxiYXIpOwogCisgICAgbV9zY3JvbGxhYmxlQXJlYS5jbGVhcigpOworCiAg
ICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVjdGlvbigpOwogCkBAIC0x
MzAxLDkgKzE0NDgsMTggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShp
bnQgeERlbHRhLCBpbnQgeURlbHRhKQogICAgIH0KIH0KIAorSW50UG9pbnQgUmVuZGVyTGF5ZXI6
OnNjcm9sbE9yaWdpbigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxPcmlnaW4oKTsKKworICAgIHJldHVy
biBJbnRQb2ludCgpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQg
eCwgaW50IHkpCiB7Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihJbnRQb2ludCh4LCB5KSk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQ
b2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQg
eSkKQEAgLTEzMzgsOCArMTQ5NCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4
LCBpbnQgeSkKICAgICAvLyBjb21wbGljYXRlZCAoc2luY2UgaXQgd2lsbCBpbnZvbHZlIHRlc3Rp
bmcgd2hldGhlciBvdXIgbGF5ZXIKICAgICAvLyBpcyBlaXRoZXIgb2NjbHVkZWQgYnkgYW5vdGhl
ciBsYXllciBvciBjbGlwcGVkIGJ5IGFuIGVuY2xvc2luZwogICAgIC8vIGxheWVyIG9yIGNvbnRh
aW5zIGZpeGVkIGJhY2tncm91bmRzLCBldGMuKS4KLSAgICBpbnQgbmV3U2Nyb2xsWCA9IHggLSBt
X3Njcm9sbE9yaWdpbi54KCk7Ci0gICAgaW50IG5ld1Njcm9sbFkgPSB5IC0gbV9zY3JvbGxPcmln
aW4ueSgpOworICAgIEludFBvaW50IHNjcm9sbE9yaWdpbiA9IHRoaXMtPnNjcm9sbE9yaWdpbigp
OworICAgIGludCBuZXdTY3JvbGxYID0geCAtIHNjcm9sbE9yaWdpbi54KCk7CisgICAgaW50IG5l
d1Njcm9sbFkgPSB5IC0gc2Nyb2xsT3JpZ2luLnkoKTsKICAgICBpZiAobV9zY3JvbGxZID09IG5l
d1Njcm9sbFkgJiYgbV9zY3JvbGxYID09IG5ld1Njcm9sbFgpCiAgICAgICAgIHJldHVybjsKICAg
ICBtX3Njcm9sbFggPSBuZXdTY3JvbGxYOwpAQCAtMTg2NSwxNCArMjAyMiwxNSBAQCBQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdAogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBSZW5k
ZXJPYmplY3QqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXIoKS0+bm9kZSgpID8gcmVuZGVyZXIo
KS0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSA6IHJlbmRlcmVyKCk7
CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGFjdHVhbFJlbmRlcmVyLT5pc0Jv
eCgpICYmIGFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIp
OworICAgIEFTU0VSVChtX3Njcm9sbGFibGVBcmVhKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xs
YmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9t
U2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9uLCB0b1JlbmRlckJveChhY3R1YWxSZW5kZXJlcikp
OworICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cihtX3Njcm9sbGFibGVBcmVhLmdldCgpLCBvcmllbnRhdGlvbiwgdG9SZW5kZXJCb3goYWN0dWFs
UmVuZGVyZXIpKTsKICAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOwor
ICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihtX3Njcm9s
bGFibGVBcmVhLmdldCgpLCBvcmllbnRhdGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgICAg
IGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOworICAgICAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwogICAg
ICAgICBlbHNlIAotICAgICAgICAgICAgZGlkQWRkVmVydGljYWxTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZEFkZFZlcnRpY2FsU2Nyb2xs
YmFyKHdpZGdldC5nZXQoKSk7CiAgICAgfQogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnZp
ZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsgICAgICAgIAogICAgIHJldHVybiB3aWRnZXQu
cmVsZWFzZSgpOwpAQCAtMTg4NCwxMSArMjA0MiwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0
cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgIGlmIChz
Y3JvbGxiYXIpIHsKICAgICAgICAgaWYgKHNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNjcm9sbGJhcio+KHNjcm9sbGJhci5nZXQo
KSktPmNsZWFyT3duaW5nUmVuZGVyZXIoKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGVsc2Ug
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT53
aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwpAQCAtMTg5Nyw2ICsyMDU1
LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCiAgICAgfQogfQogCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5
ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS5nZXQoKTsKK30KKwogYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCktPmlzQm94KCkpCkBAIC0xOTUxLDYgKzIxMTQsMTEgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxi
YXIpCiAjZW5kaWYKIH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFy
ZWEtPmhhc092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKIGludCBSZW5kZXJMYXllcjo6dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgcmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSkKQEAgLTIwOTEs
NyArMjI1OSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJv
b2wqIG5lZWRIQmFyLCBib29sKiBuZWVkVkJhcikKICAgICBtX3Njcm9sbFdpZHRoID0gb3ZlcmZs
b3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCk7CiAgICAgbV9zY3JvbGxIZWlnaHQgPSBvdmVyZmxv
d0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKTsKICAgICAKLSAgICBtX3Njcm9sbE9yaWdpbiA9IElu
dFBvaW50KC1tX3Njcm9sbExlZnRPdmVyZmxvdywgLW1fc2Nyb2xsVG9wT3ZlcmZsb3cpOworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRTY3Jv
bGxPcmlnaW4oSW50UG9pbnQoLW1fc2Nyb2xsTGVmdE92ZXJmbG93LCAtbV9zY3JvbGxUb3BPdmVy
ZmxvdykpOwogCiAgICAgaWYgKG5lZWRIQmFyKQogICAgICAgICAqbmVlZEhCYXIgPSBtX3Njcm9s
bFdpZHRoID4gYm94LT5jbGllbnRXaWR0aCgpOwpAQCAtMjQxNyw3ICsyNTg2LDEwIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllcikKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCAqcGFpbnRpbmdSb290
KQpAQCAtMzk5MywxOCArNDE2NSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0K
ICAgICAKICAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX3Njcm9s
bGFibGVBcmVhUGFnZSkgewotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJlbmRlcmVy
KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSBwYWdl
OwotICAgICAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFnZS0+YWRkU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChtX3Njcm9sbGFibGVBcmVhUGFnZSkgewotICAgICAgICBtX3Njcm9s
bGFibGVBcmVhUGFnZS0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWFQYWdlID0gMDsKLSAgICB9CisgICAgICAgIGlmICghbV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpjcmVhdGUodGhpcyk7CisgICAgfSBlbHNlIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLmNsZWFyKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQg
dG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZp
Y2UgdmVyc2EpLgogICAgIGlmIChtX2hCYXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCmluZGV4IDExMDI5ZWRmNDkwZGIwN2YxMjNjNjMwZGFkYjI0MjcyZTk3NDA4ZWYuLjll
YzljNjlmMDMzZDg5YmUyNWI2MWZiMGI4MzNhNjc5MGFhM2M3NDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiUGFpbnRJ
bmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3Iu
aCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsMTUgKzU0LDE4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKIGNsYXNz
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE7CiBjbGFzcyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJl
bmRlclNjcm9sbGJhclBhcnQ7CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFJlbmRlclZpZXc7
CitjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhcjsKIGNsYXNzIFRyYW5zZm9y
bWF0aW9uTWF0cml4OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorY2xhc3Mg
R3JhcGhpY3NMYXllcjsKIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjsKICNlbmRpZgpAQCAtMTU0LDkgKzE1NiwxMCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9maXhlZCA6IDE7CiB9OwogCi1jbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBTY3Jv
bGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlclJlcGxpY2E7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE7CiAKICAgICBSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVjdCopOwogICAgIH5S
ZW5kZXJMYXllcigpOwpAQCAtMjM2LDI2ICsyMzksMzEgQEAgcHVibGljOgogCiAgICAgSW50U2l6
ZSBzY3JvbGxlZENvbnRlbnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNjcm9sbFhP
ZmZzZXQoKSArIG1fc2Nyb2xsTGVmdE92ZXJmbG93LCBzY3JvbGxZT2Zmc2V0KCkgKyBtX3Njcm9s
bFRvcE92ZXJmbG93KTsgfQogCi0gICAgaW50IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFggKyBtX3Njcm9sbE9yaWdpbi54KCk7IH0KLSAgICBpbnQgc2Nyb2xsWU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsWSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsgfQorICAg
IEludFBvaW50IHNjcm9sbE9yaWdpbigpIGNvbnN0OworICAgIAorICAgIGludCBzY3JvbGxYT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxYICsgc2Nyb2xsT3JpZ2luKCkueCgpOyB9Cisg
ICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFkgKyBzY3JvbGxP
cmlnaW4oKS55KCk7IH0KIAogICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5KTsK
LSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4LCBtX3Nj
cm9sbFkgKyBtX3Njcm9sbE9yaWdpbi55KCkpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQo
aW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQobV9zY3JvbGxYICsgbV9zY3JvbGxPcmlnaW4ueCgpLCB5
KTsgfQorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KHgs
IG1fc2Nyb2xsWSArIHNjcm9sbE9yaWdpbigpLnkoKSk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9m
ZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChtX3Njcm9sbFggKyBzY3JvbGxPcmlnaW4oKS54
KCksIHkpOyB9CiAgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IEludFJlY3QmLCBi
b29sIHNjcm9sbFRvQW5jaG9yID0gZmFsc2UsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25Y
ID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGln
bm1lbnQmIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCk7CiAK
ICAgICBJbnRSZWN0IGdldFJlY3RUb0V4cG9zZShjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZXhwb3NlUmVjdCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgs
IGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKTsKIAogICAgIGJvb2wgc2Nyb2xsc092ZXJm
bG93KCkgY29uc3Q7CisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3Q7
CisKICAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7CiAgICAgdm9pZCBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKIAogICAgIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwogICAgIHZvaWQgZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CiAKLSAgICAvLyBTY3JvbGxhYmxlQXJl
YSBvdmVycmlkZXMKLSAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorICAgIFNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faEJhci5nZXQo
KTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KKworICAgIGJvb2wgaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsK
IAogICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwogICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwpAQCAtNDM0LDkgKzQ0Miw5IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmcuZ2V0KCk7IH0KICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsK
ICAgICB2b2lkIGNsZWFyQmFja2luZygpOwotICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHcmFwaGljc0xh
eWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHcmFw
aGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0OworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0OworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBHcmFwaGljc0xheWVy
KiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0OwogI2Vsc2UKICAgICBib29sIGlzQ29tcG9z
aXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTWFz
aygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC01MjEsMzAgKzUyOSwyOCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCi0gICAgLy8g
U2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJW
aXNpYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7Ci0gICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxl
V2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9u
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3Q7CisgICAgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0
OworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7CisgICAgCisgICAg
aW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0OworICAg
IEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0OworICAgIEludFJlY3QgY29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgSW50UG9p
bnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29u
c3Q7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKKyAgICBpbnQgdmlzaWJsZUhl
aWdodCgpIGNvbnN0OworICAgIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKKyAgICBJbnRQb2lu
dCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdDsKIAogICAgIC8vIFJlY3RhbmdsZSBlbmNvbXBhc3Npbmcg
dGhlIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIgcmVjdC4KICAgICBJbnRSZWN0IHNjcm9sbENv
cm5lckFuZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVj
dEZyb21QYWdlKCkgeyBtX3Njcm9sbGFibGVBcmVhUGFnZSA9IDA7IH0KLQogICAgIC8vIE5PVEU6
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zm
c2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCiAgICAgdm9pZCBzY3JvbGxUbyhpbnQgeCwgaW50IHkp
OwogCkBAIC03MjQsNyArNzMwLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8UmVuZGVyTGF5ZXJC
YWNraW5nPiBtX2JhY2tpbmc7CiAjZW5kaWYKIAotICAgIFBhZ2UqIG1fc2Nyb2xsYWJsZUFyZWFQ
YWdlOyAvLyBQYWdlIG9uIHdoaWNoIHRoaXMgaXMgcmVnaXN0ZXJlZCBhcyBhIHNjcm9sbGFibGUg
YXJlYS4KKyAgICBPd25QdHI8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+IG1fc2Nyb2xsYWJs
ZUFyZWE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119439</attachid>
            <date>2011-12-15 09:34:26 -0800</date>
            <delta_ts>2011-12-18 14:24:46 -0800</delta_ts>
            <desc>WIP patch 1: rebaselined, cleaned-up, still some rough edges butcomments welcome.</desc>
            <filename>bug-60305-20111215093424.patch</filename>
            <type>text/plain</type>
            <size>32287</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDUyZTg2MDU0NzEzMzNh
ZTc1M2Q5ZjVjMzQ4ZjEwOTM0OTMxMmNhNC4uMzViZmE0OGQzNjM4ODAyMWQwNjhkMzNjY2UwNDEw
YWEwMDFjZTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDExLTEyLTE1ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFNlcGFyYXRl
IHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZyBvbmx5LCBubyBuZXcgY29kZS4K
KworICAgICAgICBCYXNlZCBvbiBhbiBlYXJsaWVyIHBhdGNoIGJ5IFNpbW9uIEZyYXNlci4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSB3aGljaAorICAgICAgICBpcyBjcmVhdGVkIG9uIGRlbWFuZCB0byBiZSB0aGUg
U2Nyb2xsYWJsZUFyZWEgd2UgdXNlIGZvciBzY3JvbGxpbmcKKyAgICAgICAgb3BlcmF0aW9uLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggb25seSBkb2VzIHRoZSBtZWNoYW5pY2FsIG1vdmluZywgd2hl
cmUgU2Nyb2xsYWJsZUFyZWEgb3BlcmF0aW9ucworICAgICAgICBhcmUgaGFuZGxlZCBieSB0aGUg
bmV3IGNsYXNzIGFuZCBmb3J3YXJkZWQgYmFjayB0byB0aGUgUmVuZGVyTGF5ZXIuIFNvbWUgdHJp
dmlhbAorICAgICAgICBmdW5jdGlvbnMgd2VyZSBpbmxpbmVkLiBUaGUgc2Nyb2xsT3JpZ2luIGlz
IGFsc28gb24gdGhlIFNjcm9sbGFibGVBcmVhIHdoaWNoIHJlcXVpcmVkCisgICAgICAgIGNoYW5n
ZSBpbiB0aGUgY29kZSB0byBoYW5kbGUgdGhhdC4KKworICAgICAgICBIb3BlZnVsbHkgdGhpcyBw
YXRjaCB1bmRlcmxpbmVzIHdoYXQgbmVlZHMgdG8gYmUgY2hhbmdlZCBpbiBzb21lIGZvbGxvdy11
cCBwYXRjaChlcykuCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
c1Njcm9sbENvcm5lclZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkQWRkSG9yaXpvbnRh
bFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjptYXhpbXVtU2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNv
bnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnZpc2libGVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmlzaWJsZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyaGFuZ0Ftb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjdXJyZW50TW91c2VQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRDb21wbGV0ZVJ1YmJlckJhbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVu
ZFNjcm9sbEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aXNPbkFjdGl2ZVBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuc3VyZVNjcm9sbGFi
bGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGUpOgorCiAyMDExLTEyLTE1
ICBSYWtlc2ggS04gIDxyYWtlc2gua25AbW90b3JvbGEuY29tPgogCiAgICAgICAgICJ1c2VyLXNl
bGVjdCBub25lIiBjYXVzZXMgc2VsZWN0aW9uIHRvIGluY29ycmVjdGx5IGVzY2FwZSBmcm9tIGNs
aWNrZWQgY29udGFpbmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNjcy
OTc4YzZmNmNjZTViYjY0MGI5NWMzODc4OTg1ODA3MTk5Y2FjOS4uNDE2ZGIyMzMxOGY5YzE5N2Jj
OWQzZDEzNzMyZDQwMmM2NzY5YzEwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cApAQCAtMTU3MCw4ICsxNTcwLDkgQEAgYm9vbCBFdmVudEhhbmRsZXI6Om1vdXNlTW92ZWQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgYm9vbCBvbmx5VXBkYXRlU2MKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKIAogICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBsYXllckZvck5v
ZGUoaG92ZXJlZE5vZGUuaW5uZXJOb2RlKCkpKSB7Ci0gICAgICAgIGlmIChwYWdlLT5jb250YWlu
c1Njcm9sbGFibGVBcmVhKGxheWVyKSkKLSAgICAgICAgICAgIGxheWVyLT5zY3JvbGxBbmltYXRv
cigpLT5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOworICAgICAgICBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKiBsYXllclNjcm9sbGFibGVBcmVhID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgIGlmIChsYXllclNjcm9sbGFibGVBcmVhICYmIHBhZ2UtPmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEobGF5ZXJTY3JvbGxhYmxlQXJlYSkpCisgICAgICAgICAgICBsYXllclNjcm9sbGFi
bGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwogICAg
IH0KIAogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKQEAg
LTIwMjMsOCArMjAyNCw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2ZW50VGFy
Z2V0Tm9kZShOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9ybU1vCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSBpZiAocGFnZSAmJiAobGF5ZXJGb3JMYXN0Tm9kZSAmJiAoIWxheWVy
Rm9yTm9kZVVuZGVyTW91c2UgfHwgbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAhPSBsYXllckZvckxh
c3ROb2RlKSkpIHsKICAgICAgICAgICAgIC8vIFRoZSBtb3VzZSBoYXMgbW92ZWQgYmV0d2VlbiBs
YXllcnMuCi0gICAgICAgICAgICBpZiAocGFnZS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXll
ckZvckxhc3ROb2RlKSkKLSAgICAgICAgICAgICAgICBsYXllckZvckxhc3ROb2RlLT5zY3JvbGxB
bmltYXRvcigpLT5tb3VzZUV4aXRlZENvbnRlbnRBcmVhKCk7CisgICAgICAgICAgICBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKiBsYXllclNjcm9sbGFibGVBcmVhID0gbGF5ZXJGb3JMYXN0Tm9k
ZS0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIGlmIChsYXllclNjcm9sbGFibGVBcmVh
ICYmIHBhZ2UtPmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEobGF5ZXJTY3JvbGxhYmxlQXJlYSkpCisg
ICAgICAgICAgICAgICAgbGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsQW5pbWF0b3IoKS0+bW91
c2VFeGl0ZWRDb250ZW50QXJlYSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
bV9ub2RlVW5kZXJNb3VzZSAmJiAoIW1fbGFzdE5vZGVVbmRlck1vdXNlIHx8IG1fbGFzdE5vZGVV
bmRlck1vdXNlLT5kb2N1bWVudCgpICE9IG1fZnJhbWUtPmRvY3VtZW50KCkpKSB7CkBAIC0yMDM1
LDggKzIwMzcsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5v
ZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKHBhZ2UgJiYgKGxheWVyRm9yTm9kZVVuZGVyTW91c2UgJiYgKCFsYXll
ckZvckxhc3ROb2RlIHx8IGxheWVyRm9yTm9kZVVuZGVyTW91c2UgIT0gbGF5ZXJGb3JMYXN0Tm9k
ZSkpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbW91c2UgaGFzIG1vdmVkIGJldHdlZW4gbGF5ZXJz
LgotICAgICAgICAgICAgaWYgKHBhZ2UtPmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEobGF5ZXJGb3JO
b2RlVW5kZXJNb3VzZSkpCi0gICAgICAgICAgICAgICAgbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZS0+
c2Nyb2xsQW5pbWF0b3IoKS0+bW91c2VFbnRlcmVkQ29udGVudEFyZWEoKTsKKyAgICAgICAgICAg
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIGxheWVyU2Nyb2xsYWJsZUFyZWEgPSBsYXllckZv
ck5vZGVVbmRlck1vdXNlLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKGxheWVy
U2Nyb2xsYWJsZUFyZWEgJiYgcGFnZS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXllclNjcm9s
bGFibGVBcmVhKSkKKyAgICAgICAgICAgICAgICBsYXllclNjcm9sbGFibGVBcmVhLT5zY3JvbGxB
bmltYXRvcigpLT5tb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAobV9sYXN0Tm9kZVVuZGVyTW91c2UgJiYgbV9sYXN0Tm9kZVVuZGVyTW91
c2UtPmRvY3VtZW50KCkgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTk3MGMwNzNmZjU0OTA5ZTI4MjY1YTI3ZWU3
NTY4YmZjY2YzMTA3Yi4uZTFjNzVmYWMwYzRhMGU0Zjg2NjkyYjY3YjU2OTNkNjJjZDk4ODdjYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xNDIsNiArMTQy
LDE4NCBAQCB2b2lkIENsaXBSZWN0czo6ZGVzdHJveShSZW5kZXJBcmVuYSogcmVuZGVyQXJlbmEp
CiAgICAgcmVuZGVyQXJlbmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlzKTsKIH0KIAorLy8g
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYQorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciogb3duaW5nTGF5ZXIpCisgICAgOiBt
X293bmluZ0xheWVyKG93bmluZ0xheWVyKQoreworICAgIFNjcm9sbGFibGVBcmVhOjpzZXRDb25z
dHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG1fb3duaW5nTGF5ZXItPnJlbmRlcmVyKCktPmZyYW1lKCkpIHsKKyAgICAgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7CisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVh
UGFnZSA9IHBhZ2U7CisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFnZS0+YWRkU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYVBhZ2UpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFQYWdlLT5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
c0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmlzQWN0aXZlKCk7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxTaXplKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBtX293bmluZ0xh
eWVyLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAorewor
ICAgIHJldHVybiBtX293bmluZ0xheWVyLT5zY3JvbGxQb3NpdGlvbihzY3JvbGxiYXIpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmlzU2Nyb2xsQ29ybmVyVmlzaWJs
ZSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5zY3JvbGxDb3JuZXJS
ZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXIt
PnNjcm9sbFRvKG9mZnNldC54KCksIG9mZnNldC55KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dAoreworICAgIGlmIChSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldHVy
biB0aGUgZnJhbWUgdmlldyBoZXJlIChvciBwb3NzaWJseSBhbiBhbmNlc3RvciBmcmFtZSB2aWV3
KSwKKyAgICAvLyBpZiB0aGUgZnJhbWUgdmlldyBpc24ndCBzY3JvbGxhYmxlLgorICAgIHJldHVy
biAwOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgbV9vd25pbmdMYXllci0+
cmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+ZGlkQWRkV2hlZWxFdmVudEhhbmRsZXIoKTsKKyAgICBT
Y3JvbGxhYmxlQXJlYTo6ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIFNjcm9sbGFibGVBcmVhOjp3aWxs
UmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxiYXIpOworICAgIC8vIEZJWE1FOiBtYXli
ZSBuZWVkIGEgc2VwYXJhdGUgU2Nyb2xsYWJsZUFyZWE6OmRpZFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIgY2FsbGJhY2s/CisgICAgbV9vd25pbmdMYXllci0+cmVuZGVyZXIoKS0+ZG9jdW1lbnQo
KS0+ZGlkUmVtb3ZlV2hlZWxFdmVudEhhbmRsZXIoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
VmlldyhzY3JvbGxiYXIsIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25pbmdMYXllci0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHNjcm9s
bGJhciwgcmVjdCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UG9pbnQmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duaW5n
TGF5ZXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihzY3JvbGxiYXIsIHJl
Y3QpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFBvaW50JiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoc2Nyb2xsYmFyLCByZWN0KTsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsUG9zaXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5zY3JvbGxQb3NpdGlvbigpOworfQor
CitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjptaW5pbXVtU2Nyb2xsUG9zaXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtX293bmluZ0xheWVyLT5taW5pbXVtU2Nyb2xsUG9z
aXRpb24oKTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+bWF4
aW11bVNjcm9sbFBvc2l0aW9uKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPnZpc2libGVDb250ZW50UmVjdChpbmNsdWRlU2Ny
b2xsYmFycyk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlSGVp
Z2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+dmlzaWJsZUhlaWdodCgp
OworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+dmlzaWJsZVdpZHRoKCk7Cit9CisKK0lu
dFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9vd25pbmdMYXllci0+Y29udGVudHNTaXplKCk7Cit9CisKK0ludFNpemUg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX293bmluZ0xheWVyLT5vdmVyaGFuZ0Ftb3VudCgpOworfQorCitJbnRQb2ludCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmN1cnJlbnRNb3VzZVBvc2l0aW9uKCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNv
bnN0IEludFNpemUmKSBjb25zdAoreworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9vd25pbmdMYXllci0+c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc09uQWN0aXZlUGFnZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmlzT25BY3RpdmVQYWdlKCk7Cit9CisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX293bmluZ0xheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKTsKK30KKwor
R3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3duaW5nTGF5ZXItPmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X293bmluZ0xheWVyLT5sYXllckZvclNjcm9sbENvcm5lcigpOworfQorI2VuZGlmCisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICByZXR1cm4g
bV9vd25pbmdMYXllci0+aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qoc2Nyb2xsYmFyLCBkaXJ0eVJl
Y3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3Jv
bGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICByZXR1cm4gbV9v
d25pbmdMYXllci0+aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoZGlydHlSZWN0KTsKK30KKwog
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikK
ICAgICA6IG1faW5SZXNpemVNb2RlKGZhbHNlKQogICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkodHJ1ZSkKQEAgLTE4NCwxMiArMzYyLDkgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJl
bmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICAsIG1fcmVmbGVjdGlvbigwKQogICAg
ICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAsIG1fcmVzaXplcigwKQotICAgICwgbV9zY3JvbGxh
YmxlQXJlYVBhZ2UoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09ubHkgPSBzaG91bGRCZU5vcm1h
bEZsb3dPbmx5KCk7CiAKLSAgICBTY3JvbGxhYmxlQXJlYTo6c2V0Q29uc3RyYWluc1Njcm9sbGlu
Z1RvQ29udGVudEVkZ2UoZmFsc2UpOwotCiAgICAgaWYgKCFyZW5kZXJlci0+Zmlyc3RDaGlsZCgp
ICYmIHJlbmRlcmVyLT5zdHlsZSgpKSB7CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNE
aXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXItPnN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOwpAQCAtMjAzLDkgKzM3OCw2IEBAIFJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhUGFnZSkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhZ2UtPnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOwotCiAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
ICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKIApAQCAtMTM2Nyw2ICsx
NTM5LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoTGF5b3V0VW5p
dCB4RGVsdGEsIExheW91dFVuaXQgeURlbHRhLCBTY3JvCiAgICAgfQogfQogCitJbnRQb2ludCBS
ZW5kZXJMYXllcjo6c2Nyb2xsT3JpZ2luKCkgY29uc3QKK3sKKyAgICAvLyBJcyBpdCByZWFsbHkg
T0sgdG8gYXNrIHNjcm9sbE9yaWdpbiBvbiBhIG5vbi1zY3JvbGxhYmxlIGxheWVyPworICAgIGlm
ICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2luKCk7Cit9CisKIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5LCBTY3JvbGxP
ZmZzZXRDbGFtcGluZyBjbGFtcCkKIHsKICAgICBpZiAoY2xhbXAgPT0gU2Nyb2xsT2Zmc2V0Q2xh
bXBlZCkgewpAQCAtMTM4MCw4ICsxNTYxLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
T2Zmc2V0KExheW91dFVuaXQgeCwgTGF5b3V0VW5pdCB5LCBTY3JvbGxPZmZzZXRDbGFtcGluCiAg
ICAgICAgIHggPSBtaW4obWF4PExheW91dFVuaXQ+KHgsIDApLCBtYXhYKTsKICAgICAgICAgeSA9
IG1pbihtYXg8TGF5b3V0VW5pdD4oeSwgMCksIG1heFkpOwogICAgIH0KLSAgICAKLSAgICBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKExheW91dFBvaW50KHgs
IHkpKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHNjcm9sbEFyZWEgaWYgd2Ug
YXJlIHRvIHNjcm9sbC4gSG93ZXZlciB0aGUgY29kZSBjdXJyZW50bHkgZG9lcworICAgIC8vIG5v
dCBndWFyYW50ZWUgdGhhdC4KKyAgICBlbnN1cmVTY3JvbGxhYmxlQXJlYSgpOworICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihMYXlvdXRQb2ludCh4
LCB5KSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKQEAg
LTE3MDksMTEgKzE4OTMsNiBAQCBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiAgICAgcmV0dXJuIHNjcm9sbGJhciA/IChz
Y3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQotewotICAgIHNjcm9sbFRvKG9mZnNldC54KCksIG9mZnNldC55KCkpOwotfQotCiBpbnQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAog
ewogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikKQEAgLTE3NTgsMTAgKzE5MzcsNiBAQCBJbnRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ft
b3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25zdAotewotfQotCiBi
b29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0CiB7CiAgICAgUGFnZSogcGFnZSA9IHJl
bmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKQEAgLTE4MjUsNiArMjAwMCwxMiBAQCBJbnRSZWN0
IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0CiAgICAgcmV0
dXJuIHNjcm9sbENvcm5lckFuZFJlc2l6ZXI7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OmVuc3Vy
ZVNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEgPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGUodGhp
cyk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCktPmlzQm94KCkpOwpAQCAtMTk2NSwxNyArMjE0Niwx
OSBAQCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKKyAgICBBU1NF
UlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAg
ICAgUmVuZGVyT2JqZWN0KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyKCktPm5vZGUoKSA/IHJl
bmRlcmVyKCktPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkgOiByZW5k
ZXJlcigpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBhY3R1YWxSZW5kZXJl
ci0+aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NS
T0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0
aW9uLCB0b1JlbmRlckJveChhY3R1YWxSZW5kZXJlcikpOworICAgICAgICB3aWRnZXQgPSBSZW5k
ZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSgpLCBvcmll
bnRhdGlvbiwgdG9SZW5kZXJCb3goYWN0dWFsUmVuZGVyZXIpKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50
YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNy
ZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSgpLCBvcmllbnRhdGlvbiwgUmVndWxh
clNjcm9sbGJhcik7CiAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkp
OworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJh
cih3aWRnZXQuZ2V0KCkpOwogICAgICAgICBlbHNlIAotICAgICAgICAgICAgZGlkQWRkVmVydGlj
YWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CiAgICAgfQogICAgIHJlbmRl
cmVyKCktPmRvY3VtZW50KCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsgICAgICAg
IAogICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwpAQCAtMTk4OCwxMCArMjE3MSwxMSBAQCB2
b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQog
ICAgICAgICAgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKS0+Y2xlYXJPd25p
bmdSZW5kZXJlcigpOwogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Njcm9s
bGFibGVBcmVhKTsKICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbGJhci5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+d2lsbFJl
bW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFy
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT53aWxsUmVtb3ZlVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHNj
cm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwpAQCAtMjAxMywxOSArMjE5Nyw2IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmFsbG93c1Njcm9sbGluZygpIGNvbnN0CiAgICAgcmV0dXJuIChtX2hCYXIg
JiYgbV9oQmFyLT5lbmFibGVkKCkpIHx8IChtX3ZCYXIgJiYgbV92QmFyLT5lbmFibGVkKCkpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKQotewotICAgIG1fcmVuZGVyZXItPmRvY3VtZW50KCktPmRpZEFkZFdoZWVs
RXZlbnRIYW5kbGVyKCk7Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZEhvcml6b250YWxTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6d2lsbFJlbW92ZUhvcml6
b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgU2Nyb2xsYWJsZUFy
ZWE6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7Ci0gICAgLy8gRklY
TUU6IG1heWJlIG5lZWQgYSBzZXBhcmF0ZSBTY3JvbGxhYmxlQXJlYTo6ZGlkUmVtb3ZlSG9yaXpv
bnRhbFNjcm9sbGJhciBjYWxsYmFjaz8KLSAgICBtX3JlbmRlcmVyLT5kb2N1bWVudCgpLT5kaWRS
ZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQogewogICAgIGlmIChoYXNTY3Jv
bGxiYXIgPT0gKG1faEJhciAhPSAwKSkKQEAgLTIwNzIsMTYgKzIyNDMsNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKICNlbmRp
ZgogfQogCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3QKLXsKLSAgICBpZiAoUmVuZGVyTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9IGVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXR1cm4gdGhlIGZyYW1lIHZpZXcgaGVyZSAo
b3IgcG9zc2libHkgYW4gYW5jZXN0b3IgZnJhbWUgdmlldywKLSAgICAvLyBpZiB0aGUgZnJhbWUg
dmlldyBpc24ndCBzY3JvbGxhYmxlLgotICAgIHJldHVybiAwOwotfQotCiBpbnQgUmVuZGVyTGF5
ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSBjb25zdAogewogICAgIGlmICghbV92QmFyIHx8IChtX3ZCYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpICYmIHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkp
CkBAIC0yMjIyLDggKzIzODMsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoYm9vbCogbmVlZEhCYXIsIGJvb2wqIG5lZWRWQmFyKQogCiAgICAgbV9zY3JvbGxT
aXplLnNldFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKICAgICBtX3Nj
cm9sbFNpemUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsKLSAg
ICAKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLW1fc2Nyb2xsT3ZlcmZsb3cud2lkdGgo
KSwgLW1fc2Nyb2xsT3ZlcmZsb3cuaGVpZ2h0KCkpKTsKKworICAgIC8vIElzIGl0IHJlYWxseSBm
aW5lIHRvIGNhbGwgdXMgd2l0aG91dCBhbiBleGlzdGluZyBzY3JvbGxhYmxlQXJlYT8KKyAgICBl
bnN1cmVTY3JvbGxhYmxlQXJlYSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbE9y
aWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgpLCAtbV9zY3JvbGxPdmVyZmxv
dy5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG5lZWRIQmFyKQogICAgICAgICAqbmVlZEhCYXIgPSBt
X3Njcm9sbFNpemUud2lkdGgoKSA+IGJveC0+Y2xpZW50V2lkdGgoKTsKQEAgLTI1NTUsNyArMjcx
OCwxMiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaQogCiBib29sIFJlbmRlckxheWVyOjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIpCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgLy8gRklYTUU6IEl0
IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY2FsbCBzY3JvbGwgb24gYSBub24tc2Nyb2xsYWJsZSBs
YXllci4gSG93ZXZlciB0aGUgY29kZQorICAgIC8vIGN1cnJlbnRseSByZWxpZXMgb24gdGhhdC4K
KyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CiB9CiAKIGNsYXNzIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHsK
QEAgLTM5MzYsNiArNDEwNCwxMyBAQCBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNm
b3JtKFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICByZXR1cm4gdHJhbnNm
b3JtKCkgJiYgKChwYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGlu
Z0xheWVycykgfHwgcGFpbnRzVG9XaW5kb3cpOwogfQogCitib29sIFJlbmRlckxheWVyOjpoYXNP
dmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092
ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnNldFBhcmVudChSZW5k
ZXJMYXllciogcGFyZW50KQogewogICAgIGlmIChwYXJlbnQgPT0gbV9wYXJlbnQpCkBAIC00Mjk3
LDIwICs0NDcyLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICB1cGRhdGVPclJlbW92ZUZp
bHRlckVmZmVjdCgpOwogI2VuZGlmCiAgICAgCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKSB7
Ci0gICAgICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYVBhZ2UpIHsKLSAgICAgICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWFQYWdlID0gcGFnZTsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYVBhZ2UtPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9zY3JvbGxhYmxlQXJlYVBh
Z2UpIHsKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhZ2UtPnJlbW92ZVNjcm9sbGFibGVBcmVh
KHRoaXMpOwotICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFnZSA9IDA7Ci0gICAgfQotICAgIAor
ICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgZW5zdXJlU2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICBlbHNlIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLmNsZWFyKCk7CisKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20g
Y3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCiAgICAgaWYgKG1f
aEJhcikKICAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggOTdlNGU0MmQwYjdlZjBhMTEyYmUyNjI0N2ExOTdlMzdh
MjU4NWEzZC4uMDk0MDRjZDdlM2FmZTZmMzk0MmUzMzg5ODEzOGRhZDVjY2EwNTUxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTU4LDYgKzU4LDcgQEAgY2xhc3Mg
RmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRl
c3RSZXN1bHQ7CiBjbGFzcyBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU7CitjbGFzcyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJl
cGxpY2E7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMjAyLDkgKzIwMywxMCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9maXhlZCA6IDE7CiB9OwogCi1jbGFzcyBSZW5kZXJMYXllciA6
IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciB7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE7CiAKICAgICBSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVj
dCopOwogICAgIH5SZW5kZXJMYXllcigpOwpAQCAtMjg1LDYgKzI4Nyw5IEBAIHB1YmxpYzoKICAg
ICBpbnQgc2Nyb2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRo
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCk7IH0KICAgICBpbnQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LmhlaWdodCgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOyB9
CiAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNjcm9s
bFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKTsgfQorICAgIEludFBvaW50IHNjcm9sbE9yaWdp
bigpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOyB9CiAKICAgICB2b2lk
IHNjcm9sbFRvT2Zmc2V0KExheW91dFVuaXQsIExheW91dFVuaXQsIFNjcm9sbE9mZnNldENsYW1w
aW5nID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChM
YXlvdXRVbml0IHgsIFNjcm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5j
bGFtcGVkKSB7IHNjcm9sbFRvT2Zmc2V0KHgsIHNjcm9sbFlPZmZzZXQoKSwgY2xhbXApOyB9CkBA
IC0yOTcsMTggKzMwMiwxNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBj
b25zdDsKICAgICBib29sIGFsbG93c1Njcm9sbGluZygpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUg
aWYgYXQgbGVhc3Qgb25lIHNjcm9sbGJhciBpcyB2aXNpYmxlIGFuZCBlbmFibGVkLgogICAgIGJv
b2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7
CiAgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwogICAgIHZvaWQgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJhcj4g
Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2b2lkIGRlc3Ryb3lT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwogCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEg
b3ZlcnJpZGVzCi0gICAgdmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0
dWFsIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAg
IFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faEJhci5n
ZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biBtX3ZCYXIuZ2V0KCk7IH0KIAogICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNv
bnN0OwogICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwpAQCAtNTI1
LDkgKzUyNiw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tpbmcuZ2V0KCk7IH0KICAgICBSZW5kZXJMYXllckJhY2tpbmcq
IGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZygpOwotICAgIHZpcnR1YWwg
R3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
OwogI2Vsc2UKICAgICBib29sIGlzQ29tcG9zaXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBA
IC01NDMsNiArNTQxLDggQEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnM7IH0KICAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRp
cnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5
U2Nyb2xsYmFyczsgfQogCisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlWk9yZGVyTGlzdHNTbG93Q2FzZSgpOwogCkBAIC02
MTIsNDEgKzYxMiw1MiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dP
bmx5KCkgY29uc3Q7IAogCisgICAgLy8gLS0gU3RhcnQgb2YgdGhlIGZ1bmN0aW9ucyB1c2VkIGJ5
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgLS0KKyAgICAvLyBGSVhNRTogTW9zdCBvZiB0aGVt
IHNob3VsZCBiZSBtb3ZlZCB0byBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGFsb25nIHdpdGgg
dGhlIHNjcm9sbGluZyBsb2dpYy4KKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgaW50
IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OwogICAgIGludCBzY3JvbGxQ
b3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKLSAgICAKLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBp
bnRlcmZhY2UKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIElu
dFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtaW5p
bXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1T
Y3JvbGxQb3NpdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCB2aXNpYmxlQ29udGVu
dFJlY3QoYm9vbCBpbmNsdWRlU2Nyb2xsYmFycykgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdmlz
aWJsZUhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGN1
cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
UnViYmVyQmFuZChjb25zdCBJbnRTaXplJikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzT25B
Y3RpdmVQYWdlKCkgY29uc3Q7CiAKLSAgICAvLyBSZWN0YW5nbGUgZW5jb21wYXNzaW5nIHRoZSBz
Y3JvbGwgY29ybmVyIGFuZCByZXNpemVyIHJlY3QuCi0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJB
bmRSZXNpemVyUmVjdCgpIGNvbnN0OworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3Q7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Q7CisgICAgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0Jik7CisKKyAgICBJ
bnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNv
bnN0OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFn
ZSgpIHsgbV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSAwOyB9CisgICAgSW50UG9pbnQgc2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dDsKKyAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICBJbnRS
ZWN0IHZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKKyAg
ICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OworICAgIGludCB2aXNpYmxlV2lkdGgoKSBjb25z
dDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgb3Zlcmhh
bmdBbW91bnQoKSBjb25zdDsKKyAgICBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNv
bnN0OworCisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Owor
CisgICAgYm9vbCBpc09uQWN0aXZlUGFnZSgpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0OworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNv
bnN0OworI2VuZGlmCiAKLSAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBi
eSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNldFNjb2xsT2Zmc2V0LgogICAgIHZvaWQgc2Nyb2xsVG8oaW50LCBpbnQpOwog
CisgICAgLy8gLS0gRW5kIG9mIHRoZSBmdW5jdGlvbiBVc2VkIGJ5IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEgLS0KKworICAgIHZvaWQgZW5zdXJlU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIC8v
IFJlY3RhbmdsZSBlbmNvbXBhc3NpbmcgdGhlIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIgcmVj
dC4KKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lckFuZFJlc2l6ZXJSZWN0KCkgY29uc3Q7CisKICAg
ICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKICAgICAK
ICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBi
b29sIHZlcnRpY2FsT3ZlcmZsb3cpOwpAQCAtNzI1LDggKzczNiw2IEBAIHByaXZhdGU6CiAgICAg
fQogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gVGhlIGJpdGZpZWxkcyBhcmUgdXAgaGVyZSBzbyB0aGV5
IHdpbGwgZmFsbCBpbnRvIHRoZSBwYWRkaW5nIGZyb20gU2Nyb2xsYWJsZUFyZWEgb24gNjQtYml0
LgotCiAgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5
IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9w
LgogICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOwogCkBAIC04NDQsNiArODUzLDc0IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIFBhZ2UqIG1fc2Nyb2xsYWJsZUFyZWFQYWdlOyAvLyBQYWdl
IG9uIHdoaWNoIHRoaXMgaXMgcmVnaXN0ZXJlZCBhcyBhIHNjcm9sbGFibGUgYXJlYS4KKworICAg
IE93blB0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPiBtX3Njcm9sbGFibGVBcmVhOworfTsK
KworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSA6IHB1YmxpYyBTY3JvbGxhYmxlQXJl
YSB7CisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBiZSBhYmxlIHRvIGNhbGwgU2Nyb2xsYWJsZUFy
ZWE6OnNldFNjcm9sbE9yaWdpbi4KKy8vIEZJWE1FOiBNb3ZlIGluIGludG8gUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYSBhbmQgcmVtb3ZlIHRoaXMuCitmcmllbmQgdm9pZCBSZW5kZXJMYXllcjo6
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoYm9vbCosIGJvb2wqKTsKKworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IGNyZWF0ZShSZW5kZXJM
YXllciogb3duaW5nTGF5ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEob3duaW5nTGF5ZXIpKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc2Nv
bm5lY3RGcm9tUGFnZSgpIE9WRVJSSURFIHsgbV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSAwOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JikgT1ZFUlJJ
REU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxi
YXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3Jv
bGxiYXIoU2Nyb2xsYmFyKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fb3duaW5nTGF5ZXIt
Pmhvcml6b250YWxTY3JvbGxiYXIoKTsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fb3duaW5nTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyKCk7IH0KKworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3Jv
bGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBPVkVSUklERTsK
KworICAgIHZpcnR1YWwgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChib29sIGlu
Y2x1ZGVTY3JvbGxiYXJzKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxl
SGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkg
Y29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0
IE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1vdXNlUG9zaXRpb24oKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVJ1YmJlckJhbmQoY29u
c3QgSW50U2l6ZSYpIGNvbnN0IE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNPbkFjdGl2ZVBhZ2UoKSBjb25zdCBPVkVSUklERTsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBPVkVSUklERTsK
KyNlbmRpZgorCitwcml2YXRlOgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVy
TGF5ZXIqIG93bmluZ0xheWVyKTsKKworICAgIHZpcnR1YWwgU2Nyb2xsYWJsZUFyZWEqIGVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JikgT1ZFUlJJREU7CisKKyAgICBSZW5kZXJMYXllciogbV9vd25pbmdMYXllcjsKKyAg
ICBQYWdlKiBtX3Njcm9sbGFibGVBcmVhUGFnZTsKIH07CiAKIGlubGluZSB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVaT3JkZXJMaXN0cygpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119780</attachid>
            <date>2011-12-18 14:24:54 -0800</date>
            <delta_ts>2012-04-09 15:19:41 -0700</delta_ts>
            <desc>Proposed refactoring 1: Introduce RenderLayerScrollableArea.</desc>
            <filename>bug-60305-20111218232452.patch</filename>
            <type>text/plain</type>
            <size>33540</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMDUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTVhYTdjMDk0MTIyZWIw
NDRkN2VmYjUxZmRlZDQ4ZWE4MGNkNmNlMC4uODEwZWFjYWM4NTg0MDI2ODc2Y2M5ZGIwZDJiZjNk
YjM2YzAxOWNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDExLTEyLTE2ICBKdWxp
ZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgorCisgICAgICAgIFNlcGFyYXRl
IHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZyBvbmx5LCBubyBuZXcgY29kZS4K
KworICAgICAgICBCYXNlZCBvbiBhbiBlYXJsaWVyIHBhdGNoIGJ5IFNpbW9uIEZyYXNlci4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSB3aGljaAorICAgICAgICBpcyBjcmVhdGVkIHdoZW5ldmVyIHdlIGhhdmUgYW4g
b3ZlcmZsb3cgY2xpcCB0byBiZSB0aGUgU2Nyb2xsYWJsZUFyZWEKKyAgICAgICAgd2UgdXNlIGZv
ciBzY3JvbGxpbmcgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgdGhlIG1l
Y2hhbmljYWwgbW92aW5nLCB3aGVyZSBTY3JvbGxhYmxlQXJlYSBvcGVyYXRpb25zIGFyZSBoYW5k
bGVkCisgICAgICAgIGJ5IHRoZSBuZXcgY2xhc3MgYW5kIGZvcndhcmRlZCBiYWNrIHRvIHRoZSBS
ZW5kZXJMYXllci4gU29tZSB0cml2aWFsIGZ1bmN0aW9ucyB3ZXJlCisgICAgICAgIG1vdmVkIHRv
IHRoZSBuZXcgY2xhc3MuIE5vdyB0aGUgc2Nyb2xsIG9yaWdpbiBpcyBhbHNvIG9uIHRoZSBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhCisgICAgICAgIHdoaWNoIHJlcXVpcmVkIGNoYW5nZSBpbiB0
aGUgc2Nyb2xsaW5nIGNvZGUgdG8gaGFuZGxlIHRoYXQuCisKKyAgICAgICAgSG9wZWZ1bGx5IHRo
aXMgcGF0Y2ggdW5kZXJsaW5lcyB3aGF0IG5lZWRzIHRvIGJlIGNoYW5nZWQgaW4gc29tZSBmb2xs
b3ctdXAgcGF0Y2goZXMpLgorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKToK
KyAgICAgICAgQWRkZWQgYW4gQVNTRVJUIGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBsb2dpYyBpcyB3
b3JraW5nIHByb3Blcmx5LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250
ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmhhbmdBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y3VycmVudE1vdXNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzT25B
Y3RpdmVQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlclNjcm9sbGFi
bGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpSZW5kZXJMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxPcmlnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjplbnN1cmVTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZXN0cm95
U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQpOgorICAgICAgICBD
cmVhdGUgdGhlIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgd2hlbiB3ZSBoYXZlIGFuIG92ZXJm
bG93IGNsaXAuIFJlZ2lzdGVyIG91cgorICAgICAgICBTY3JvbGxhYmxlQXJlYSBpZiB3ZSBoYXZl
IHNvbWUgb3ZlcmZsb3cuCisKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGUpOgorCiAyMDExLTEyLTE2ICBZb3Np
ZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbRm9ybXNdIFRoZSAi
bWF4bGVuZ3RoIiBhdHRyaWJ1dGUgb24gInRleHRhcmVhIiB0YWcgbWlzY291bnRzIGhhcmQgbmV3
bGluZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NzI5NzhjNmY2Y2Nl
NWJiNjQwYjk1YzM4Nzg5ODU4MDcxOTljYWM5Li40MTZkYjIzMzE4ZjljMTk3YmM5ZDNkMTM3MzJk
NDAyYzY3NjljMTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xNTcw
LDggKzE1NzAsOSBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIGV2ZW50LCBib29sIG9ubHlVcGRhdGVTYwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogCiAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGxheWVyRm9yTm9kZShob3ZlcmVk
Tm9kZS5pbm5lck5vZGUoKSkpIHsKLSAgICAgICAgaWYgKHBhZ2UtPmNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWEobGF5ZXIpKQotICAgICAgICAgICAgbGF5ZXItPnNjcm9sbEFuaW1hdG9yKCktPm1vdXNl
TW92ZWRJbkNvbnRlbnRBcmVhKCk7CisgICAgICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEq
IGxheWVyU2Nyb2xsYWJsZUFyZWEgPSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAg
aWYgKGxheWVyU2Nyb2xsYWJsZUFyZWEgJiYgcGFnZS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYShs
YXllclNjcm9sbGFibGVBcmVhKSkKKyAgICAgICAgICAgIGxheWVyU2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbEFuaW1hdG9yKCktPm1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhKCk7CiAgICAgfQogCiAgICAg
aWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+dmlldygpKQpAQCAtMjAyMyw4ICsy
MDI0LDkgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5v
ZGUqIHRhcmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlIGlmIChwYWdlICYmIChsYXllckZvckxhc3ROb2RlICYmICghbGF5ZXJGb3JOb2RlVW5k
ZXJNb3VzZSB8fCBsYXllckZvck5vZGVVbmRlck1vdXNlICE9IGxheWVyRm9yTGFzdE5vZGUpKSkg
ewogICAgICAgICAgICAgLy8gVGhlIG1vdXNlIGhhcyBtb3ZlZCBiZXR3ZWVuIGxheWVycy4KLSAg
ICAgICAgICAgIGlmIChwYWdlLT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyRm9yTGFzdE5v
ZGUpKQotICAgICAgICAgICAgICAgIGxheWVyRm9yTGFzdE5vZGUtPnNjcm9sbEFuaW1hdG9yKCkt
Pm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsKKyAgICAgICAgICAgIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEqIGxheWVyU2Nyb2xsYWJsZUFyZWEgPSBsYXllckZvckxhc3ROb2RlLT5zY3JvbGxh
YmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKGxheWVyU2Nyb2xsYWJsZUFyZWEgJiYgcGFnZS0+
Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXllclNjcm9sbGFibGVBcmVhKSkKKyAgICAgICAgICAg
ICAgICBsYXllclNjcm9sbGFibGVBcmVhLT5zY3JvbGxBbmltYXRvcigpLT5tb3VzZUV4aXRlZENv
bnRlbnRBcmVhKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGVVbmRl
ck1vdXNlICYmICghbV9sYXN0Tm9kZVVuZGVyTW91c2UgfHwgbV9sYXN0Tm9kZVVuZGVyTW91c2Ut
PmRvY3VtZW50KCkgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkpIHsKQEAgLTIwMzUsOCArMjAzNyw5
IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVNb3VzZUV2ZW50VGFyZ2V0Tm9kZShOb2RlKiB0
YXJnZXROb2RlLCBjb25zdCBQbGF0Zm9ybU1vCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSBpZiAocGFnZSAmJiAobGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAmJiAoIWxheWVyRm9yTGFzdE5v
ZGUgfHwgbGF5ZXJGb3JOb2RlVW5kZXJNb3VzZSAhPSBsYXllckZvckxhc3ROb2RlKSkpIHsKICAg
ICAgICAgICAgIC8vIFRoZSBtb3VzZSBoYXMgbW92ZWQgYmV0d2VlbiBsYXllcnMuCi0gICAgICAg
ICAgICBpZiAocGFnZS0+Y29udGFpbnNTY3JvbGxhYmxlQXJlYShsYXllckZvck5vZGVVbmRlck1v
dXNlKSkKLSAgICAgICAgICAgICAgICBsYXllckZvck5vZGVVbmRlck1vdXNlLT5zY3JvbGxBbmlt
YXRvcigpLT5tb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOworICAgICAgICAgICAgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYSogbGF5ZXJTY3JvbGxhYmxlQXJlYSA9IGxheWVyRm9yTm9kZVVuZGVy
TW91c2UtPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBpZiAobGF5ZXJTY3JvbGxhYmxl
QXJlYSAmJiBwYWdlLT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyU2Nyb2xsYWJsZUFyZWEp
KQorICAgICAgICAgICAgICAgIGxheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEFuaW1hdG9yKCkt
Pm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGlmIChtX2xhc3ROb2RlVW5kZXJNb3VzZSAmJiBtX2xhc3ROb2RlVW5kZXJNb3VzZS0+ZG9jdW1l
bnQoKSAhPSBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCA0MjY2ZDA3NmQ5NWRhMjRjNDA5OWU0NTBkMTdiNDI3NjhmMDA4
OTVjLi5iY2I4YzFiZDlkOTkzMzA3ZDcwYTAyY2MxZGU5YTVmNTVjNzA0ZTNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0Miw2ICsxNDIsMjEyIEBAIHZv
aWQgQ2xpcFJlY3RzOjpkZXN0cm95KFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSkKICAgICByZW5k
ZXJBcmVuYS0+ZnJlZSgqKHNpemVfdCAqKXRoaXMsIHRoaXMpOwogfQogCisvLyBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhKFJlbmRlckxheWVyKiBsYXllcikKKyAgICA6IG1fbGF5ZXIobGF5ZXIpCisg
ICAgLCBtX3Njcm9sbGFibGVBcmVhUGFnZSgwKQoreworICAgIFNjcm9sbGFibGVBcmVhOjpzZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Cit9CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICB1bnJl
Z2lzdGVyU2Nyb2xsYWJsZUFyZWEoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmlzQWN0aXZlKCk7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxTaXplKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5z
Y3JvbGxTaXplKG9yaWVudGF0aW9uKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLT5zY3JvbGxQb3NpdGlvbihzY3JvbGxiYXIpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXItPmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpOworfQorCitJbnRSZWN0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyLT5zY3JvbGxDb3JuZXJSZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZz
ZXQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnNjcm9sbFRvKG9mZnNldC54KCksIG9mZnNldC55
KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChSZW5kZXJMYXllciogc2Ny
b2xsYWJsZUxheWVyID0gbV9sYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEpOworICAgICAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWE7CisgICAg
fQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXR1cm4gdGhlIGZyYW1lIHZpZXcgaGVyZSAo
b3IgcG9zc2libHkgYW4gYW5jZXN0b3IgZnJhbWUgdmlldyksCisgICAgLy8gaWYgdGhlIGZyYW1l
IHZpZXcgaXNuJ3Qgc2Nyb2xsYWJsZS4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xsYmFyKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQoreworICAgIG1fbGF5ZXItPnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmRpZEFk
ZFdoZWVsRXZlbnRIYW5kbGVyKCk7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp3aWxsUmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsKKyAgICAvLyBGSVhNRTogbWF5YmUgbmVlZCBhIHNlcGFyYXRlIFNjcm9sbGFibGVB
cmVhOjpkaWRSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyIGNhbGxiYWNrPworICAgIG1fbGF5ZXIt
PnJlbmRlcmVyKCktPmRvY3VtZW50KCktPmRpZFJlbW92ZVdoZWVsRXZlbnRIYW5kbGVyKCk7Cit9
CisKK1Njcm9sbGJhciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIo
KTsKK30KKworU2Nyb2xsYmFyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5jb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsYmFyLCByZWN0KTsKK30KKworSW50UmVj
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihzY3JvbGxiYXIsIHJlY3QpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiByZWN0KSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoc2Ny
b2xsYmFyLCByZWN0KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHNjcm9sbGJhciwgcmVjdCk7
Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKK30KKwor
SW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bWluaW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+bWluaW11bVNjcm9sbFBvc2l0aW9uKCk7
Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om1heGltdW1TY3JvbGxQ
b3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPm1heGltdW1TY3JvbGxQb3Np
dGlvbigpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVD
b250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZVNjcm9sbGJhcnMpOworfQorCitpbnQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXItPnZpc2libGVIZWlnaHQoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIt
PnZpc2libGVXaWR0aCgpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmNvbnRlbnRzU2l6
ZSgpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1v
dW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+b3ZlcmhhbmdBbW91bnQoKTsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3VycmVudE1vdXNlUG9zaXRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5jdXJyZW50TW91c2VQb3NpdGlvbigp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZENvbXBsZXRlUnViYmVy
QmFuZChjb25zdCBJbnRTaXplJikgY29uc3QKK3sKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXItPnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNPbkFjdGl2ZVBhZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyLT5pc09uQWN0aXZlUGFnZSgpOworfQorCisjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQorR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Cit9CisKK0dyYXBoaWNzTGF5
ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+bGF5ZXJGb3JT
Y3JvbGxDb3JuZXIoKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KHNjcm9sbGJhciwgZGlydHlSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVn
aXN0ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWFQYWdlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9sYXllci0+cmVuZGVy
ZXIoKS0+ZnJhbWUoKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkp
IHsKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWFQYWdlID0gcGFnZTsKKyAgICAgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWFQYWdlLT5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVy
U2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYVBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWFQYWdlLT5yZW1vdmVTY3JvbGxhYmxl
QXJlYSh0aGlzKTsKK30KKwogUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZW5kZXJlcikKICAgICA6IG1faW5SZXNpemVNb2RlKGZhbHNlKQogICAgICwgbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKQEAgLTE4NCwxMiArMzkwLDkgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICAsIG1f
cmVmbGVjdGlvbigwKQogICAgICwgbV9zY3JvbGxDb3JuZXIoMCkKICAgICAsIG1fcmVzaXplcigw
KQotICAgICwgbV9zY3JvbGxhYmxlQXJlYVBhZ2UoMCkKIHsKICAgICBtX2lzTm9ybWFsRmxvd09u
bHkgPSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CiAKLSAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotCiAgICAgaWYgKCFyZW5k
ZXJlci0+Zmlyc3RDaGlsZCgpICYmIHJlbmRlcmVyLT5zdHlsZSgpKSB7CiAgICAgICAgIG1fdmlz
aWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250
ZW50ID0gcmVuZGVyZXItPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOwpAQCAtMjAz
LDkgKzQwNiw2IEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogICAgIH0KIAotICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhUGFnZSkKLSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhZ2Ut
PnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCiAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKIApAQCAtMTM4Miw2ICsxNTgyLDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVj
dXJzaXZlbHkoTGF5b3V0VW5pdCB4RGVsdGEsIExheW91dFVuaXQgeURlbHRhLCBTY3JvCiAgICAg
fQogfQogCitJbnRQb2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsT3JpZ2luKCkgY29uc3QKK3sKKyAg
ICAvLyBJdCBkb2Vzbid0IHNlZW0gT0sgdG8gYXNrIHNjcm9sbE9yaWdpbiBvbiBhIG5vbi1zY3Jv
bGxhYmxlIGxheWVyLgorICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IEludFBvaW50KCk7CisKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT3JpZ2lu
KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KExheW91dFVuaXQgeCwg
TGF5b3V0VW5pdCB5LCBTY3JvbGxPZmZzZXRDbGFtcGluZyBjbGFtcCkKIHsKICAgICBpZiAoY2xh
bXAgPT0gU2Nyb2xsT2Zmc2V0Q2xhbXBlZCkgewpAQCAtMTM5NSw4ICsxNjA0LDkgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0IHksIFNj
cm9sbE9mZnNldENsYW1waW4KICAgICAgICAgeCA9IG1pbihtYXg8TGF5b3V0VW5pdD4oeCwgMCks
IG1heFgpOwogICAgICAgICB5ID0gbWluKG1heDxMYXlvdXRVbml0Pih5LCAwKSwgbWF4WSk7CiAg
ICAgfQotICAgIAotICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oTGF5b3V0UG9pbnQoeCwgeSkpOworCisgICAgQVNTRVJUKG1fc2Nyb2xsYWJsZUFyZWEp
OworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihM
YXlvdXRQb2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4
LCBpbnQgeSkKQEAgLTE3MjQsMTEgKzE5MzQsNiBAQCBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNp
emUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiAgICAgcmV0dXJuIHNj
cm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJ
bnRQb2ludCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKG9mZnNldC54KCksIG9mZnNldC55KCkp
OwotfQotCiBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xs
YmFyKSBjb25zdAogewogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikKQEAgLTE3NzMsMTAgKzE5NzgsNiBAQCBJbnRTaXplIFJlbmRlckxheWVy
OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIEludFNpemUoKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6ZGlkQ29tcGxldGVSdWJiZXJCYW5kKGNvbnN0IEludFNpemUmKSBjb25z
dAotewotfQotCiBib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0CiB7CiAgICAgUGFn
ZSogcGFnZSA9IHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKQEAgLTE4NDAsNiArMjA0MSwx
MiBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNv
bnN0CiAgICAgcmV0dXJuIHNjcm9sbENvcm5lckFuZFJlc2l6ZXI7CiB9CiAKK3ZvaWQgUmVuZGVy
TGF5ZXI6OmVuc3VyZVNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpjcmVhdGUodGhpcyk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCktPmlzQm94KCkpOwpAQCAtMTk4
MCwxNyArMjE4NywxOSBAQCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
IHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQ7CiAgICAgUmVuZGVyT2JqZWN0KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyKCkt
Pm5vZGUoKSA/IHJlbmRlcmVyKCktPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRl
cmVyKCkgOiByZW5kZXJlcigpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBh
Y3R1YWxSZW5kZXJlci0+aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS0+aGFzUHNl
dWRvU3R5bGUoU0NST0xMQkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0g
ICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRo
aXMsIG9yaWVudGF0aW9uLCB0b1JlbmRlckJveChhY3R1YWxSZW5kZXJlcikpOworICAgICAgICB3
aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxl
QXJlYSgpLCBvcmllbnRhdGlvbiwgdG9SZW5kZXJCb3goYWN0dWFsUmVuZGVyZXIpKTsKICAgICBl
bHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIo
dGhpcywgb3JpZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBT
Y3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSgpLCBvcmllbnRh
dGlvbiwgUmVndWxhclNjcm9sbGJhcik7CiAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCkpOworICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+ZGlkQWRkSG9yaXpv
bnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwogICAgICAgICBlbHNlIAotICAgICAgICAgICAg
ZGlkQWRkVmVydGljYWxTY3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPmRpZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CiAgICAg
fQogICAgIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0Lmdl
dCgpKTsgICAgICAgIAogICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwpAQCAtMjAwMywxMCAr
MjIxMiwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1c3RvbVNj
cm9sbGJhcigpKQogICAgICAgICAgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
KS0+Y2xlYXJPd25pbmdSZW5kZXJlcigpOwogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFT
U0VSVChtX3Njcm9sbGFibGVBcmVhKTsKICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFs
U2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT53
aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwpAQCAtMjAyOCwxOSArMjIz
OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmFsbG93c1Njcm9sbGluZygpIGNvbnN0CiAgICAgcmV0
dXJuIChtX2hCYXIgJiYgbV9oQmFyLT5lbmFibGVkKCkpIHx8IChtX3ZCYXIgJiYgbV92QmFyLT5l
bmFibGVkKCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkaWRBZGRIb3Jpem9udGFsU2Nyb2xs
YmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIG1fcmVuZGVyZXItPmRvY3VtZW50KCkt
PmRpZEFkZFdoZWVsRXZlbnRIYW5kbGVyKCk7Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmRpZEFkZEhv
cml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6d2ls
bFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAg
U2Nyb2xsYWJsZUFyZWE6OndpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbGJhcik7
Ci0gICAgLy8gRklYTUU6IG1heWJlIG5lZWQgYSBzZXBhcmF0ZSBTY3JvbGxhYmxlQXJlYTo6ZGlk
UmVtb3ZlSG9yaXpvbnRhbFNjcm9sbGJhciBjYWxsYmFjaz8KLSAgICBtX3JlbmRlcmVyLT5kb2N1
bWVudCgpLT5kaWRSZW1vdmVXaGVlbEV2ZW50SGFuZGxlcigpOwotfQotCiB2b2lkIFJlbmRlckxh
eWVyOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQogewogICAg
IGlmIChoYXNTY3JvbGxiYXIgPT0gKG1faEJhciAhPSAwKSkKQEAgLTIwODcsMTYgKzIyODQsNiBA
QCB2b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKICNlbmRpZgogfQogCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoUmVuZGVyTGF5ZXIqIHNjcm9sbGFi
bGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigpKQotICAgICAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyOwotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXR1cm4gdGhlIGZyYW1l
IHZpZXcgaGVyZSAob3IgcG9zc2libHkgYW4gYW5jZXN0b3IgZnJhbWUgdmlldywKLSAgICAvLyBp
ZiB0aGUgZnJhbWUgdmlldyBpc24ndCBzY3JvbGxhYmxlLgotICAgIHJldHVybiAwOwotfQotCiBp
bnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAogewogICAgIGlmICghbV92QmFyIHx8IChtX3ZC
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkpCkBAIC0yMjM3LDggKzI0MjQsOSBAQCB2b2lkIFJlbmRlckxheWVyOjpjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucyhib29sKiBuZWVkSEJhciwgYm9vbCogbmVlZFZCYXIpCiAKICAg
ICBtX3Njcm9sbFNpemUuc2V0V2lkdGgob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkp
OwogICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93
VG9wKCkpOwotICAgIAotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVy
Zmxvdy53aWR0aCgpLCAtbV9zY3JvbGxPdmVyZmxvdy5oZWlnaHQoKSkpOworCisgICAgQVNTRVJU
KG1fc2Nyb2xsYWJsZUFyZWEpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbE9yaWdp
bihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgpLCAtbV9zY3JvbGxPdmVyZmxvdy5o
ZWlnaHQoKSkpOwogCiAgICAgaWYgKG5lZWRIQmFyKQogICAgICAgICAqbmVlZEhCYXIgPSBtX3Nj
cm9sbFNpemUud2lkdGgoKSA+IGJveC0+Y2xpZW50V2lkdGgoKTsKQEAgLTIyNzEsNiArMjQ1OSw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRh
bE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpCiB7CisgICAgQVNTRVJUKHJlbmRlcmVyKCktPmhhc092ZXJm
bG93Q2xpcCgpKTsKKwogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgaWYg
KCFib3gpCiAgICAgICAgIHJldHVybjsKQEAgLTI1NzAsNyArMjc2MCwxMiBAQCBib29sIFJlbmRl
ckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExheW91dFBvaQogCiBib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIpCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3QgbWFrZSBhbnkg
c2Vuc2UgdG8gY2FsbCBzY3JvbGwoKSBvbiBhIGxheWVyIHdpdGhvdXQgYSBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLgorICAgIC8vIEhvd2V2ZXIgdGhlIGNvZGUgcmVseSBvbiB0aGF0IG5vdy4K
KyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CiB9CiAKIGNsYXNzIEN1cnJlbnRSZW5kZXJSZWdpb25NYWludGFpbmVyIHsK
QEAgLTM5NTEsNiArNDE0NiwxMSBAQCBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNm
b3JtKFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICByZXR1cm4gdHJhbnNm
b3JtKCkgJiYgKChwYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvckZsYXR0ZW5Db21wb3NpdGlu
Z0xheWVycykgfHwgcGFpbnRzVG9XaW5kb3cpOwogfQogCitib29sIFJlbmRlckxheWVyOjpoYXNP
dmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEg
JiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKTsKK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6c2V0UGFyZW50KFJlbmRlckxheWVyKiBwYXJlbnQpCiB7CiAgICAgaWYgKHBh
cmVudCA9PSBtX3BhcmVudCkKQEAgLTQzMTEsMjEgKzQ1MTEsMTcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKICAgICB1cGRhdGVPclJlbW92ZUZpbHRlckVm
ZmVjdCgpOwogI2VuZGlmCi0gICAgCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKSB7Ci0gICAg
ICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYVBhZ2UpIHsKLSAgICAgICAgICAgIGlmIChGcmFtZSog
ZnJhbWUgPSByZW5kZXJlcigpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFBhZ2Uq
IHBhZ2UgPSBmcmFtZS0+cGFnZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWFQYWdlID0gcGFnZTsKLSAgICAgICAgICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBh
Z2UtPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9zY3JvbGxhYmxlQXJlYVBhZ2UpIHsK
LSAgICAgICAgbV9zY3JvbGxhYmxlQXJlYVBhZ2UtPnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OwotICAgICAgICBtX3Njcm9sbGFibGVBcmVhUGFnZSA9IDA7Ci0gICAgfQotICAgIAorCisgICAg
aWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBlbnN1cmVTY3JvbGxh
YmxlQXJlYSgpOworICAgIGVsc2UKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS5jbGVhcigpOwor
CisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5y
ZWdpc3RlclNjcm9sbGFibGVBcmVhKCk7CisgICAgZWxzZSBpZiAobV9zY3JvbGxhYmxlQXJlYSkK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dW5yZWdpc3RlclNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2
ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCiAgICAgaWYgKG1faEJhcikKICAgICAgICAg
bV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKaW5kZXggMjMwMGFkNGQ5MjFlYWU4NTEwNWQ0MDZiMDNkYWQyMzM2MzA4MWRhYS4uN2RjY2Ex
ZjJmMmFmMDY4NmExMTRjZTNhYTJlZTEyZDRjYWExZTY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTU4LDYgKzU4LDcgQEAgY2xhc3MgRmlsdGVyRWZmZWN0UmVu
ZGVyZXI7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CiBjbGFz
cyBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBjbGFzcyBS
ZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMjA4LDkgKzIwOSwxMCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9maXhlZCA6IDE7CiB9OwogCi1jbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBTY3JvbGxh
YmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlclJlcGxpY2E7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE7CiAKICAgICBSZW5kZXJMYXllcihSZW5kZXJCb3hNb2RlbE9iamVjdCopOwogICAgIH5SZW5k
ZXJMYXllcigpOwpAQCAtMjkxLDYgKzI5Myw5IEBAIHB1YmxpYzoKICAgICBpbnQgc2Nyb2xsWE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0LndpZHRoKCkgKyBzY3JvbGxPcmln
aW4oKS54KCk7IH0KICAgICBpbnQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsT2Zmc2V0LmhlaWdodCgpICsgc2Nyb2xsT3JpZ2luKCkueSgpOyB9CiAgICAgSW50U2l6ZSBz
Y3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBJbnRTaXplKHNjcm9sbFhPZmZzZXQoKSwgc2Ny
b2xsWU9mZnNldCgpKTsgfQorICAgIEludFBvaW50IHNjcm9sbE9yaWdpbigpIGNvbnN0OworCisg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOyB9CiAKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0
KExheW91dFVuaXQsIExheW91dFVuaXQsIFNjcm9sbE9mZnNldENsYW1waW5nID0gU2Nyb2xsT2Zm
c2V0VW5jbGFtcGVkKTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChMYXlvdXRVbml0IHgsIFNj
cm9sbE9mZnNldENsYW1waW5nIGNsYW1wID0gU2Nyb2xsT2Zmc2V0VW5jbGFtcGVkKSB7IHNjcm9s
bFRvT2Zmc2V0KHgsIHNjcm9sbFlPZmZzZXQoKSwgY2xhbXApOyB9CkBAIC0zMDMsMTggKzMwOCwx
NCBAQCBwdWJsaWM6CiAgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKICAgICBib29s
IGFsbG93c1Njcm9sbGluZygpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25l
IHNjcm9sbGJhciBpcyB2aXNpYmxlIGFuZCBlbmFibGVkLgogICAgIGJvb2wgaGFzU2Nyb2xsYmFy
cygpIGNvbnN0IHsgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKik7CiAgICAgdm9pZCBzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwogICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIoYm9vbCk7CiAKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFy
KFNjcm9sbGJhck9yaWVudGF0aW9uKTsKICAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24pOwogCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAg
dmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X2hCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGFibGVB
cmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7
IH0KIAogICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwogICAgIGludCBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwpAQCAtNTMxLDkgKzUzMiw2IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBt
X2JhY2tpbmcuZ2V0KCk7IH0KICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmco
KTsKICAgICB2b2lkIGNsZWFyQmFja2luZygpOwotICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciog
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBHcmFwaGlj
c0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBH
cmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0OwogI2Vsc2UKICAgICBi
b29sIGlzQ29tcG9zaXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXND
b21wb3NpdGVkTWFzaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC01NDksNiArNTQ3LDgg
QEAgcHVibGljOgogICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29u
c3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KICAgICB2b2lk
IHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykg
eyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQog
CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlWk9yZGVyTGlzdHNTbG93Q2FzZSgpOwogCkBAIC02MjAsNDEgKzYyMCw1MiBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAog
CisgICAgLy8gLS0gU3RhcnQgb2YgdGhlIGZ1bmN0aW9ucyBkdXBsaWNhdGVkIGZyb20gUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYSAtLQorICAgIC8vIEZJWE1FOiBNb3N0IG9mIHRoZW0gc2hvdWxk
IGJlIG1vdmVkIHRvIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgYWxvbmcgd2l0aCB0aGUgc2Ny
b2xsaW5nIGxvZ2ljLgorICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CiAgICAgaW50IHNjcm9sbFBvc2l0aW9u
KFNjcm9sbGJhciopIGNvbnN0OwotICAgIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFj
ZQotICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJl
Y3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgSW50UG9pbnQg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFBvaW50IG1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChi
b29sIGluY2x1ZGVTY3JvbGxiYXJzKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB2aXNpYmxlSGVp
Z2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdmlzaWJsZVdpZHRoKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgY3VycmVudE1v
dXNlUG9zaXRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVSdWJiZXJC
YW5kKGNvbnN0IEludFNpemUmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVu
ZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNPbkFjdGl2ZVBh
Z2UoKSBjb25zdDsKIAotICAgIC8vIFJlY3RhbmdsZSBlbmNvbXBhc3NpbmcgdGhlIHNjcm9sbCBj
b3JuZXIgYW5kIHJlc2l6ZXIgcmVjdC4KLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lckFuZFJlc2l6
ZXJSZWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdDsK
KyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdDsKKyAgICB2b2lkIGludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKTsKKworICAgIEludFJlY3Qg
Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNv
bnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Cisg
ICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgSW50UG9pbnQgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBv
aW50JikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBt
X3Njcm9sbGFibGVBcmVhUGFnZSA9IDA7IH0KKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigp
IGNvbnN0OworICAgIEludFBvaW50IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAg
IEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0OworICAgIEludFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0OworICAgIGludCB2
aXNpYmxlSGVpZ2h0KCkgY29uc3Q7CisgICAgaW50IHZpc2libGVXaWR0aCgpIGNvbnN0OworICAg
IEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Q7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0OworICAgIEludFBvaW50IGN1cnJlbnRNb3VzZVBvc2l0aW9uKCkgY29uc3Q7CisK
KyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Q7CisKKyAgICBi
b29sIGlzT25BY3RpdmVQYWdlKCkgY29uc3Q7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
Y29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0OworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3Q7Cisj
ZW5kaWYKIAotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBv
dmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2V0U2NvbGxPZmZzZXQuCiAgICAgdm9pZCBzY3JvbGxUbyhpbnQsIGludCk7CiAKKyAgICAv
LyAtLSBFbmQgb2YgdGhlIGZ1bmN0aW9ucyBkdXBsaWNhdGVkIGZyb20gUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSAtLQorCisgICAgdm9pZCBlbnN1cmVTY3JvbGxhYmxlQXJlYSgpOworCisgICAg
Ly8gUmVjdGFuZ2xlIGVuY29tcGFzc2luZyB0aGUgc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplciBy
ZWN0LgorICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyQW5kUmVzaXplclJlY3QoKSBjb25zdDsKKwog
ICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OwogICAg
IAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3cs
IGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CkBAIC03MzMsOCArNzQ0LDYgQEAgcHJpdmF0ZToKICAg
ICB9CiAKIHByb3RlY3RlZDoKLSAgICAvLyBUaGUgYml0ZmllbGRzIGFyZSB1cCBoZXJlIHNvIHRo
ZXkgd2lsbCBmYWxsIGludG8gdGhlIHBhZGRpbmcgZnJvbSBTY3JvbGxhYmxlQXJlYSBvbiA2NC1i
aXQuCi0KICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50
bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0
b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKQEAgLTg1MSw2ICs4NjAsNzYgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CiAjZW5k
aWYKIAorICAgIE93blB0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPiBtX3Njcm9sbGFibGVB
cmVhOworfTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSA6IHB1YmxpYyBTY3Jv
bGxhYmxlQXJlYSB7CisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBiZSBhYmxlIHRvIGNhbGwgU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpbi4KKy8vIEZJWE1FOiBNb3ZlIGluIGludG8gUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBhbmQgcmVtb3ZlIHRoaXMuCitmcmllbmQgdm9pZCBSZW5k
ZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoYm9vbCosIGJvb2wqKTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IGNyZWF0
ZShSZW5kZXJMYXllciogb3duaW5nTGF5ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEob3duaW5nTGF5ZXIpKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJT
Y3JvbGxhYmxlQXJlYSgpOworCisgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YSgpOworCisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcm9tUGFnZSgpIE9WRVJSSURFIHsg
bV9zY3JvbGxhYmxlQXJlYVBhZ2UgPSAwOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9y
aWVudGF0aW9uKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlv
bihTY3JvbGxiYXIqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxD
b3JuZXJWaXNpYmxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IHNjcm9s
bENvcm5lclJlY3QoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xs
T2Zmc2V0KGNvbnN0IEludFBvaW50JikgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
QWRkSG9yaXpvbnRhbFNjcm9sbGJhcihTY3JvbGxiYXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgd2lsbFJlbW92ZUhvcml6b250YWxTY3JvbGxiYXIoU2Nyb2xsYmFyKikgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IE9WRVJSSURFOworCisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgSW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNj
cm9sbGJhcnMpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworCisgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlUnViYmVyQmFuZChjb25zdCBJbnRT
aXplJikgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgYm9vbCBpc09u
QWN0aXZlUGFnZSgpIGNvbnN0IE9WRVJSSURFOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBHcmFw
aGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IE9WRVJSSURFOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciog
b3duaW5nTGF5ZXIpOworCisgICAgdmlydHVhbCBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Ny
b2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKKworICAgIFJlbmRlckxheWVyKiBtX2xheWVyOwogICAgIFBhZ2UqIG1fc2Ny
b2xsYWJsZUFyZWFQYWdlOyAvLyBQYWdlIG9uIHdoaWNoIHRoaXMgaXMgcmVnaXN0ZXJlZCBhcyBh
IHNjcm9sbGFibGUgYXJlYS4KIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136315</attachid>
            <date>2012-04-09 15:19:45 -0700</date>
            <delta_ts>2020-08-13 16:27:45 -0700</delta_ts>
            <desc>Proposed refactoring 2: Updated on ToT, tweaked the logic a bit.</desc>
            <filename>bug-60305-20120409151944.patch</filename>
            <type>text/plain</type>
            <size>35628</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ2NDEzYzc5M2IwZGFh
NTJkYTNiYjA2ZTRlYjY3YmM5ODdjMWYyNC4uOWI2Y2FkMTVlZTZjNmFlZTlkYmQyMWExZDkyZDU0
MDdjNzlmMzI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMyBAQAorMjAxMi0wNC0wOSAgSnVs
aWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAgICAgICBTZXBhcmF0
ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb25seSwgbm8gbmV3IGNvZGUu
CisKKyAgICAgICAgQmFzZWQgb24gYW4gZWFybGllciBwYXRjaCBieSBTaW1vbiBGcmFzZXIuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGNsYXNzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEgd2hpY2gKKyAgICAgICAgaXMgY3JlYXRlZCB3aGVuZXZlciB5b3VyIGhhdmUg
YSBzY3JvbGwgb3ZlcmZsb3cgYXMgeW91IHdpbGwgbmVlZCB0bworICAgICAgICBoYW5kbGUgc2Ny
b2xsaW5nLiBUaGlzIG1heSBhbGxvY2F0ZSBtb3JlIHNjcm9sbGFibGUgYXJlYXMgdGhhbiBuZWVk
ZWQKKyAgICAgICAgYnV0IGl0J3Mgc2FmZXIgZm9yIG5vdy4KKworICAgICAgICBUaGlzIHBhdGNo
IGRvZXMgdGhlIG1lY2hhbmljYWwgbW92aW5nLCB3aGVyZSBTY3JvbGxhYmxlQXJlYSBvcGVyYXRp
b25zIGFyZSBoYW5kbGVkCisgICAgICAgIGJ5IHRoZSBuZXcgY2xhc3MgYW5kIGZvcndhcmRlZCBi
YWNrIHRvIHRoZSBSZW5kZXJMYXllci4gU29tZSB0cml2aWFsIGZ1bmN0aW9ucyB3ZXJlCisgICAg
ICAgIG1vdmVkIHRvIHRoZSBuZXcgY2xhc3MuIE5vdyB0aGUgc2Nyb2xsIG9yaWdpbiBpcyBhbHNv
IG9uIHRoZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhCisgICAgICAgIHdoaWNoIHJlcXVpcmVk
IGNoYW5nZSBpbiB0aGUgc2Nyb2xsaW5nIGNvZGUgdG8gaGFuZGxlIHRoYXQuCisKKyAgICAgICAg
SG9wZWZ1bGx5IHRoaXMgcGF0Y2ggdW5kZXJsaW5lcyB3aGF0IG5lZWRzIHRvIGJlIGNoYW5nZWQg
aW4gc29tZSBmb2xsb3ctdXAgcGF0Y2goZXMpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKToKKyAgICAg
ICAgVXBkYXRlZCB0byB1c2UgdGhlIGxheWVyJ3Mgc2Nyb2xsYWJsZSBhcmVhLgorCisgICAgICAg
ICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmFzc29jaWF0ZWRTY3JvbGxhYmxlQXJl
YSk6CisgICAgICAgIE5ld2x5IGFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKworICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUpOgorICAgICAgICBVc2VkIHRoZSBw
cmV2aW91cyBmdW5jdGlvbiB0byBnZXQgYSBsYXllcidzIHNjcm9sbGFibGUgYXJlYS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6
b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxl
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZp
c2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpjb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmhhbmdBbW91bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y3VycmVudE1vdXNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNPbkFjdGl2ZVBh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
YWJsZUFyZWFCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclNj
cm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlclNjcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0
ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIFNtYWxsIHNoaW0gZm9yIG5vdyB0aGF0IGZvcndh
cmQgbW9zdCBvcGVyYXRpb25zIHRvIHRoZSBSZW5kZXJMYXllci4gSXQgd2lsbCBiZSBwb3B1bGF0
ZWQKKyAgICAgICAgaW4gYSBmb2xsb3ctdXAgcGF0Y2guCisKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjphbGxvY2F0ZUZyZWVTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIFNjcm9sbGFi
bGVBcmVhIGxpZmV0aW1lIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFi
bGVBcmVhQm91bmRpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9s
bE9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIFVwZGF0ZWQgdG8gZm9y
d2FyZCB0aGUgbmVlZGVkIGNhbGxzIHRvIG91ciBTY3JvbGxhYmxlQXJlYS4KKworICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZCk6CisgICAgICAgIEFkZGVkIGEgY2Fs
bCBhbGxvY2F0ZUZyZWVTY3JvbGxhYmxlQXJlYSB0byBhbGxvY2F0ZSAvZnJlZSBvdXIKKyAgICAg
ICAgU2Nyb2xsYWJsZUFyZWEgYXMgbmVlZGVkLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlKToKKyAgICAgICAgTWFya2VkIHdoaWNoIGZ1bmN0
aW9ucyBzaG91bGQgYmUgbW92ZWQgdG8gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBhcworICAg
ICAgICB3ZWxsIGFzIGFkZGVkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgY2xhc3MgZGVmaW5p
dGlvbi4KKwogMjAxMi0wNC0wOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ0NMYXllclRyZWVIb3N0IC8gV2ViTGF5ZXJUcmVlVmll
dyBzaG91bGQgYmUgc2luZ2xlIG93bmVyc2hpcCwgbm90IFJlZkNvdW50ZWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCmluZGV4IDJjYmU2ZDljNzE4NTQ2NWNmZTliMjRkODkwYzcyZGUxNmU0NDRmMjMuLjA0
ZTc1YjcyMTEyNGU0Y2I3OWY5NmU1ZmY5ZWUzZDJhODliZmVhMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcApAQCAtNDAwMSw3ICs0MDAxLDcgQEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBp
ZiAoIWJveC0+Y2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgcmV0dXJuIGJveC0+bGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LT5sYXll
cigpLT5zY3JvbGxhYmxlQXJlYSgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAppbmRleCAxYzk1NThlYjMxMjdjZGEwYjg2Yjk1NjE5MjJmNzJmNzFl
YjhkNWU5Li42OGMwNTI3NTA5OTA2YTk2MzY5ZmE5ODNhMTkxMTFlNTkzNDQ4MWM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0xNjcyLDYgKzE2NzIsMjAgQEAgc3RhdGlj
IFJlbmRlckxheWVyKiBsYXllckZvck5vZGUoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbGF5ZXI7
CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6YXNzb2NpYXRl
ZFNjcm9sbGFibGVBcmVhKGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKiBsYXllclNjcm9sbGFibGVBcmVhID0gbGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCk7CisgICAgaWYgKCFsYXllclNjcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgewor
ICAgICAgICBpZiAoZnJhbWVWaWV3LT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyU2Nyb2xs
YWJsZUFyZWEpKQorICAgICAgICAgICAgcmV0dXJuIGxheWVyU2Nyb2xsYWJsZUFyZWE7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgTWF4aW11bUR1cmF0aW9uVHJh
Y2tlciBtYXhEdXJhdGlvblRyYWNrZXIoJm1fbWF4TW91c2VNb3ZlZER1cmF0aW9uKTsKQEAgLTE2
OTMsMTAgKzE3MDcsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgaWYg
KFJlbmRlckxheWVyKiBsYXllciA9IGxheWVyRm9yTm9kZShob3ZlcmVkTm9kZS5pbm5lck5vZGUo
KSkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbV9mcmFtZS0+dmlldygp
KSB7Ci0gICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxh
eWVyKSkKLSAgICAgICAgICAgICAgICBsYXllci0+bW91c2VNb3ZlZEluQ29udGVudEFyZWEoKTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogbGF5ZXJT
Y3JvbGxhYmxlQXJlYSA9IGFzc29jaWF0ZWRTY3JvbGxhYmxlQXJlYShsYXllcikpCisgICAgICAg
ICAgICBsYXllclNjcm9sbGFibGVBcmVhLT5tb3VzZU1vdmVkSW5Db250ZW50QXJlYSgpOwogICAg
IH0KIAogICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKQEAg
LTIxNjIsMTIgKzIxNzQsOCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRh
cmdldE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgJiYgKGxheWVyRm9yTGFzdE5vZGUgJiYgKCFsYXll
ckZvck5vZGVVbmRlck1vdXNlIHx8IGxheWVyRm9yTm9kZVVuZGVyTW91c2UgIT0gbGF5ZXJGb3JM
YXN0Tm9kZSkpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbW91c2UgaGFzIG1vdmVkIGJldHdlZW4g
bGF5ZXJzLgotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fbGFzdE5vZGVVbmRlck1v
dXNlLT5kb2N1bWVudCgpLT5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lVmll
dyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
ZnJhbWVWaWV3LT5jb250YWluc1Njcm9sbGFibGVBcmVhKGxheWVyRm9yTGFzdE5vZGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgbGF5ZXJGb3JMYXN0Tm9kZS0+bW91c2VFeGl0ZWRDb250ZW50
QXJlYSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckxhc3ROb2RlID0g
YXNzb2NpYXRlZFNjcm9sbGFibGVBcmVhKGxheWVyRm9yTGFzdE5vZGUpKQorICAgICAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhRm9yTGFzdE5vZGUtPm1vdXNlRXhpdGVkQ29udGVudEFyZWEoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX25vZGVVbmRlck1vdXNlICYmICghbV9sYXN0Tm9k
ZVVuZGVyTW91c2UgfHwgbV9sYXN0Tm9kZVVuZGVyTW91c2UtPmRvY3VtZW50KCkgIT0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKSkpIHsKQEAgLTIxNzgsMTIgKzIxODYsOCBAQCB2b2lkIEV2ZW50SGFuZGxl
cjo6dXBkYXRlTW91c2VFdmVudFRhcmdldE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxh
dGZvcm1NbwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHBhZ2UgJiYgKGxheWVy
Rm9yTm9kZVVuZGVyTW91c2UgJiYgKCFsYXllckZvckxhc3ROb2RlIHx8IGxheWVyRm9yTm9kZVVu
ZGVyTW91c2UgIT0gbGF5ZXJGb3JMYXN0Tm9kZSkpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbW91
c2UgaGFzIG1vdmVkIGJldHdlZW4gbGF5ZXJzLgotICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG1fbm9kZVVuZGVyTW91c2UtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEobGF5ZXJG
b3JOb2RlVW5kZXJNb3VzZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXllckZvck5vZGVV
bmRlck1vdXNlLT5tb3VzZUVudGVyZWRDb250ZW50QXJlYSgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYUZvck5vZGVVbmRlck1vdXNlID0gYXNzb2NpYXRlZFNjcm9sbGFibGVB
cmVhKGxheWVyRm9yTm9kZVVuZGVyTW91c2UpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhRm9yTm9kZVVuZGVyTW91c2UtPm1vdXNlRW50ZXJlZENvbnRlbnRBcmVhKCk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAobV9sYXN0Tm9kZVVuZGVyTW91c2UgJiYgbV9sYXN0Tm9kZVVuZGVy
TW91c2UtPmRvY3VtZW50KCkgIT0gbV9mcmFtZS0+ZG9jdW1lbnQoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKaW5kZXggZTVhMWE0MTFjNDcyOGZmMzM1NjEyMGM1N2YyNGY5YjhlNjli
ZjM3NS4uNDNlZGY0ODM1NzFjNTU2NzExZTE2MTIzZmY0ZTEyYWE3OTJmMTkxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC02Nyw2ICs2Nyw3IEBAIGNsYXNzIFBsYXRmb3JtS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hl
ZWxFdmVudDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNW
R0VsZW1lbnRJbnN0YW5jZTsKQEAgLTI3Miw2ICsyNzMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZmFrZU1vdXNlTW92ZUV2ZW50VGltZXJGaXJlZChUaW1lcjxFdmVudEhhbmRsZXI+Kik7CiAgICAg
dm9pZCBjYW5jZWxGYWtlTW91c2VNb3ZlRXZlbnQoKTsKIAorICAgIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEqIGFzc29jaWF0ZWRTY3JvbGxhYmxlQXJlYShjb25zdCBSZW5kZXJMYXllciopOwor
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBib29sIGRpc3BhdGNoU3ludGhldGljVG91
Y2hFdmVudElmRW5hYmxlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggODczMDg1YzdkZjBlNDQ5
ZTdiZTNlMDBiYjYxYWUxNWQ1MDg4ZmU2ZC4uNmE2YTk0ZjNjNDlkNDdiMGNiNGE4M2E0YTYwOWU4
YWVhZDViMjY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC0xNDQsNiArMTQ0LDE5OCBAQCB2b2lkIENsaXBSZWN0czo6ZGVzdHJveShSZW5kZXJBcmVuYSog
cmVuZGVyQXJlbmEpCiAgICAgcmVuZGVyQXJlbmEtPmZyZWUoKihzaXplX3QgKil0aGlzLCB0aGlz
KTsKIH0KIAorLy8gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYQorCitSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyKiBsYXllcikK
KyAgICA6IG1fbGF5ZXIobGF5ZXIpCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICByZWdpc3RlclNjcm9sbGFibGVB
cmVhKCk7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKCkKK3sKKyAgICB1bnJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXItPmlzQWN0aXZlKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyLT5zY3JvbGxTaXplKG9yaWVudGF0aW9uKTsKK30KKworaW50
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Ny
b2xsYmFyKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5zY3JvbGxQb3NpdGlvbihzY3Jv
bGxiYXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmlzU2Nyb2xsQ29ybmVy
VmlzaWJsZSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bENvcm5lclJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5zY3JvbGxDb3JuZXJS
ZWN0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgcmV0dXJuIG1fbGF5ZXItPnNjcm9s
bFRvKG9mZnNldC54KCksIG9mZnNldC55KCkpOworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAorewor
ICAgIGlmIChSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci0+ZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAg
ICBBU1NFUlQoZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOworICAgICAgICByZXR1cm4gZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWE7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZXR1
cm4gdGhlIGZyYW1lIHZpZXcgaGVyZSAob3IgcG9zc2libHkgYW4gYW5jZXN0b3IgZnJhbWUgdmll
dyksCisgICAgLy8gaWYgdGhlIGZyYW1lIHZpZXcgaXNuJ3Qgc2Nyb2xsYWJsZS4KKyAgICByZXR1
cm4gMDsKK30KKworU2Nyb2xsYmFyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpOworfQorCitTY3JvbGxiYXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhzY3JvbGxiYXIsIHJlY3QpOworfQor
CitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKHNjcm9sbGJhciwgcmVjdCk7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHJlY3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihzY3JvbGxiYXIsIHJlY3QpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiByZWN0KSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoc2Nyb2xsYmFy
LCByZWN0KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
UG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5zY3JvbGxQb3NpdGlvbigp
OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjptaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5taW5pbXVtU2Nyb2xsUG9z
aXRpb24oKTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bWF4aW11
bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+bWF4aW11bVNj
cm9sbFBvc2l0aW9uKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNjcm9sbGJhcnMpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXItPnZpc2libGVDb250ZW50UmVjdChpbmNsdWRlU2Nyb2xsYmFycyk7Cit9
CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlSGVpZ2h0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci0+dmlzaWJsZUhlaWdodCgpOworfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci0+dmlzaWJsZVdpZHRoKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+Y29u
dGVudHNTaXplKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3Zl
cmhhbmdBbW91bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5vdmVyaGFuZ0Ftb3Vu
dCgpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjdXJyZW50TW91
c2VQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmN1cnJlbnRNb3VzZVBv
c2l0aW9uKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3Vz
cGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLT5zaG91
bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmlzT25BY3RpdmVQYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+
aXNPbkFjdGl2ZVBhZ2UoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKK30KKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpOworfQorCitHcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjps
YXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXItPmxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCk7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAgIHJldHVybiBtX2xheWVyLT5pbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChzY3JvbGxiYXIsIGRpcnR5UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0KQoreworICAgIHJldHVybiBtX2xheWVyLT5pbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChkaXJ0eVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX2xh
eWVyLT5yZW5kZXJlcigpLT5mcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPmFkZFNjcm9sbGFi
bGVBcmVhKHRoaXMpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1bnJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmIChGcmFtZSogZnJhbWUgPSBt
X2xheWVyLT5yZW5kZXJlcigpLT5mcmFtZSgpKSB7CisgICAgICAgIGlmIChGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICBmcmFtZVZpZXctPnJlbW92ZVNj
cm9sbGFibGVBcmVhKHRoaXMpOworICAgIH0KK30KKworLy8gUmVuZGVyTGF5ZXIKKwogUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlcikKICAgICA6
IG1faW5SZXNpemVNb2RlKGZhbHNlKQogICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1
ZSkKQEAgLTE5MSw4ICszODMsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlbmRlcmVyKQogewogICAgIG1faXNOb3JtYWxGbG93T25seSA9IHNob3Vs
ZEJlTm9ybWFsRmxvd09ubHkoKTsKIAotICAgIFNjcm9sbGFibGVBcmVhOjpzZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7Ci0KICAgICBpZiAoIXJlbmRlcmVyLT5maXJz
dENoaWxkKCkgJiYgcmVuZGVyZXItPnN0eWxlKCkpIHsKICAgICAgICAgbV92aXNpYmxlQ29udGVu
dFN0YXR1c0RpcnR5ID0gZmFsc2U7CiAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5k
ZXJlci0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEU7CkBAIC0yMDUsNiArMzk1LDgg
QEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
cikKICAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsT2Zm
c2V0KCk7CiAgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxPZmZzZXQoSW50U2l6
ZSgpKTsKICAgICB9CisKKyAgICBhbGxvY2F0ZUZyZWVTY3JvbGxhYmxlQXJlYSgpOwogfQogCiBS
ZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKQEAgLTIxNCwxMSArNDA2LDYgQEAgUmVuZGVyTGF5
ZXI6On5SZW5kZXJMYXllcigpCiAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnJl
c2l6ZUxheWVyRGVzdHJveWVkKCk7CiAgICAgfQogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJl
bmRlcmVyKCktPmZyYW1lKCkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEodGhpcyk7Ci0gICAgfQotCiAgICAgaWYgKCFtX3JlbmRlcmVyLT5kb2N1bWVudEJlaW5nRGVz
dHJveWVkKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsKICAg
ICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQpAQCAtOTE0LDcgKzExMDEs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcigp
IGNvbnN0CiAKIEludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3go
KSBjb25zdAogewotICAgIHJldHVybiByZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dCgpOworICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxhYmxlQXJlYUJvdW5kaW5n
Qm94KCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3Jt
ZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0xNTIwLDYgKzE3MDcsMTUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsQnlSZWN1cnNpdmVseShpbnQgeERlbHRhLCBpbnQgeURlbHRhLCBTY3JvbGxPZmZz
ZXRDbGFtcGkKICAgICB9CiB9CiAKK0ludFBvaW50IFJlbmRlckxheWVyOjpzY3JvbGxPcmlnaW4o
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHNlZW0gT0sgdG8gYXNrIHNjcm9s
bE9yaWdpbiBvbiBhIG5vbi1zY3JvbGxhYmxlIGxheWVyLgorICAgIGlmICghc2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJs
ZUFyZWEoKS0+c2Nyb2xsT3JpZ2luKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
T2Zmc2V0KGludCB4LCBpbnQgeSwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgY2xhbXApCiB7CiAgICAg
aWYgKGNsYW1wID09IFNjcm9sbE9mZnNldENsYW1wZWQpIHsKQEAgLTE1MzYsNyArMTczMiw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSwgU2Nyb2xsT2Zm
c2V0Q2xhbXBpbmcgY2xhbXApCiAKICAgICBJbnRQb2ludCBuZXdTY3JvbGxPZmZzZXQoeCwgeSk7
CiAgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSBMYXlvdXRQb2ludChzY3JvbGxYT2Zmc2V0KCks
IHNjcm9sbFlPZmZzZXQoKSkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBSZW5kZXJM
YXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQpAQCAtMTg4NSwxMSArMjA4MSw2IEBAIGludCBS
ZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3QKICAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBz
Y3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8ob2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7Ci19Ci0KIGludCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRp
b24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQpAQCAtMjE2MSwxNyArMjM1MiwxOSBA
QCB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRS
ZWN0JiByZWN0KQogCiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKKyAgICBBU1NFUlQo
c2Nyb2xsYWJsZUFyZWEoKSk7CisKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAg
UmVuZGVyT2JqZWN0KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyKCktPm5vZGUoKSA/IHJlbmRl
cmVyKCktPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkgOiByZW5kZXJl
cigpOwogICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBhY3R1YWxSZW5kZXJlci0+
aXNCb3goKSAmJiBhY3R1YWxSZW5kZXJlci0+c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xM
QkFSKTsKICAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9
IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHRoaXMsIG9yaWVudGF0aW9u
LCB0b1JlbmRlckJveChhY3R1YWxSZW5kZXJlcikpOworICAgICAgICB3aWRnZXQgPSBSZW5kZXJT
Y3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSgpLCBvcmllbnRh
dGlvbiwgdG9SZW5kZXJCb3goYWN0dWFsUmVuZGVyZXIpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
d2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIodGhpcywgb3JpZW50YXRp
b24sIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSgpLCBvcmllbnRhdGlvbiwgUmVndWxhclNj
cm9sbGJhcik7CiAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KQotICAgICAgICAgICAgZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3aWRnZXQuZ2V0KCkpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+ZGlkQWRkSG9yaXpvbnRhbFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCkpOwogICAgICAgICBlbHNlIAotICAgICAgICAgICAgZGlkQWRkVmVydGljYWxT
Y3JvbGxiYXIod2lkZ2V0LmdldCgpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPmRp
ZEFkZFZlcnRpY2FsU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSk7CiAgICAgfQogICAgIHJlbmRlcmVy
KCktPmRvY3VtZW50KCktPnZpZXcoKS0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsgICAgICAgIAog
ICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwpAQCAtMjE4NCwxMCArMjM3NywxMSBAQCB2b2lk
IFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQogICAgICAgICBpZiAoc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQogICAg
ICAgICAgICAgdG9SZW5kZXJTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKS0+Y2xlYXJPd25pbmdS
ZW5kZXJlcigpOwogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzY3JvbGxhYmxl
QXJlYSgpKTsKICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICAgICAgICAgIHdpbGxSZW1vdmVIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9s
bGJhci5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEoKS0+d2lsbFJlbW92
ZUhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB3aWxsUmVtb3ZlVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSgpLT53aWxsUmVtb3ZlVmVydGlj
YWxTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHNjcm9s
bGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwpAQCAtMjI1NSwxNiArMjQ0OSw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQogI2Vu
ZGlmCiB9CiAKLVNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoKSBjb25zdAotewotICAgIGlmIChSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5
ZXI7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJldHVybiB0aGUgZnJhbWUgdmlldyBoZXJl
IChvciBwb3NzaWJseSBhbiBhbmNlc3RvciBmcmFtZSB2aWV3LAotICAgIC8vIGlmIHRoZSBmcmFt
ZSB2aWV3IGlzbid0IHNjcm9sbGFibGUuCi0gICAgcmV0dXJuIDA7Ci19Ci0KIGludCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3ZCYXIgfHwgKG1fdkJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgcmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSkKQEAgLTI0MDIsNiArMjU4Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCkKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEFT
U0VSVChib3gpOworICAgIEFTU0VSVChib3gtPmhhc092ZXJmbG93Q2xpcCgpKTsKICAgICAKICAg
ICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwogCkBAIC0yNDExLDcgKzI1OTYsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCiAgICAgbV9zY3Jv
bGxTaXplLnNldFdpZHRoKG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKICAgICBt
X3Njcm9sbFNpemUuc2V0SGVpZ2h0KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsK
IAotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgp
LCAtbV9zY3JvbGxPdmVyZmxvdy5oZWlnaHQoKSkpOworICAgIHNjcm9sbGFibGVBcmVhKCktPnNl
dFNjcm9sbE9yaWdpbihJbnRQb2ludCgtbV9zY3JvbGxPdmVyZmxvdy53aWR0aCgpLCAtbV9zY3Jv
bGxPdmVyZmxvdy5oZWlnaHQoKSkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdApAQCAtMjQ5NCw4ICsyNjc5LDggQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChib3gpOwor
ICAgIEFTU0VSVChib3gtPmhhc092ZXJmbG93Q2xpcCgpKTsKIAogICAgIG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5ID0gdHJ1ZTsKICAgICBJbnRTaXplIHNjcm9sbE9mZnNldE9yaWdpbmFsKHNjcm9s
bFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKTsKQEAgLTI1MTQsNyArMjY5OSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiAgICAgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7CiAKICAgICBpZiAoc2Nyb2xsT2Zmc2V0T3JpZ2luYWwgIT0g
c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJ
bnRQb2ludChzY3JvbGxYT2Zmc2V0KCksIHNjcm9sbFlPZmZzZXQoKSkpOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoc2Ny
b2xsWE9mZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQpAQCAtMjczMiw3ICsyOTE3LDEyIEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SW50UG9pbnQmCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikK
IHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKTsKKyAgICAvLyBGSVhNRTogSXQgZG9lc24ndCBtYWtlIGFueSBzZW5z
ZSB0byBjYWxsIHNjcm9sbCgpIG9uIGEgbGF5ZXIgd2l0aG91dCBhIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuCisgICAgLy8gSG93ZXZlciB0aGUgY29kZSBjdXJyZW50bHkgcmVseSBvbiB0aGF0
LgorICAgIGlmICghc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9y
IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290LCBSZW5kZXJSZWdpb24q
IHJlZ2lvbiwgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCkBAIC00Mjc3LDYgKzQ0NjcsMTEg
QEAgYm9vbCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShQYWludEJlaGF2aW9yIHBh
aW50QmVoYXZpb3IpIGNvbnN0CiAgICAgcmV0dXJuIHRyYW5zZm9ybSgpICYmICgocGFpbnRCZWhh
dmlvciAmIFBhaW50QmVoYXZpb3JGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8IHBhaW50c1Rv
V2luZG93KTsKIH0KIAorYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSBj
b25zdAoreworICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYSgpICYmIHNjcm9sbGFibGVBcmVhKCkt
Pmhhc092ZXJsYXlTY3JvbGxiYXJzKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnNldFBhcmVu
dChSZW5kZXJMYXllciogcGFyZW50KQogewogICAgIGlmIChwYXJlbnQgPT0gbV9wYXJlbnQpCkBA
IC00NjU2LDYgKzQ4NTEsMTcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogICAgIH0KIH0KIAor
dm9pZCBSZW5kZXJMYXllcjo6YWxsb2NhdGVGcmVlU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBsYXppbHkgYWxsb2NhdGUgb3VyIHNjcm9sbGFibGUgYXJlYSBiYXNl
ZCBvbiB0aGUgbmVlZCB0byBoYW5kbGUgc2Nyb2xsaW5nIG9yCisgICAgLy8gc2Nyb2xsYmFycyBh
cyBzb21lIG92ZXJmbG93IHZhbHVlcyBtYXkgbm90IG5lZWQgaXQuIEZvciBub3csIGl0IGlzIGEg
c2FmZXIgYWx0ZXJuYXRpdmUuCisgICAgaWYgKHJlbmRlckJveCgpICYmIHJlbmRlckJveCgpLT5o
YXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3Jl
YXRlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLmNsZWFyKCk7
Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBib29sIGlzTm9ybWFsRmxvd09ubHkg
PSBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCk7CkBAIC00Njc3LDYgKzQ4ODMsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpCiAgICAgICAgIG1fbWFycXVlZSA9IDA7CiAgICAgfQogICAgIAorICAgIGFs
bG9jYXRlRnJlZVNjcm9sbGFibGVBcmVhKCk7CiAgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5
bGVDaGFuZ2Uob2xkU3R5bGUpOwogCiAgICAgaWYgKCFoYXNSZWZsZWN0aW9uKCkgJiYgbV9yZWZs
ZWN0aW9uKQpAQCAtNDY4NiwxNiArNDg5Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKICAgICAg
ICAgICAgIGNyZWF0ZVJlZmxlY3Rpb24oKTsKICAgICAgICAgdXBkYXRlUmVmbGVjdGlvblN0eWxl
KCk7CiAgICAgfQotICAgIAotICAgIGlmIChGcmFtZSogZnJhbWUgPSByZW5kZXJlcigpLT5mcmFt
ZSgpKSB7Ci0gICAgICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCkp
IHsKLSAgICAgICAgICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgICAgICAgICBm
cmFtZVZpZXctPmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGZyYW1lVmlldy0+cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgCisKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2Fw
IGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCiAgICAg
aWYgKG1faEJhcikKICAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggYTI5NGQyZDE3MDFjYzkyMzQ2MWYxNzFmMmFj
OGRmOTNiZDU0OTE0MC4uODU2MTI0ZTI2NWJjYzFmZTk2ZTM2NmQ5NWEyYmUzOTIzNjY5MjFlZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTYxLDYgKzYxLDcgQEAg
Y2xhc3MgRmlsdGVyRWZmZWN0UmVuZGVyZXI7CiBjbGFzcyBIaXRUZXN0UmVxdWVzdDsKIGNsYXNz
IEhpdFRlc3RSZXN1bHQ7CiBjbGFzcyBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU7CitjbGFzcyBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJl
bmRlclJlcGxpY2E7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMjExLDEzICsyMTIs
MTQgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZml4ZWQgOiAxOwogfTsKIAotY2xhc3MgUmVuZGVy
TGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEKK2NsYXNzIFJlbmRlckxheWVyCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQotICAgICwgcHVibGljIEZpbHRlckVmZmVjdE9ic2VydmVyCisgICAg
OiBwdWJsaWMgRmlsdGVyRWZmZWN0T2JzZXJ2ZXIKICNlbmRpZgogewogcHVibGljOgogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOwogCiAgICAgUmVuZGVyTGF5ZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqKTsK
ICAgICB+UmVuZGVyTGF5ZXIoKTsKQEAgLTI5Niw2ICsyOTgsOSBAQCBwdWJsaWM6CiAgICAgaW50
IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldC53aWR0aCgpICsg
c2Nyb2xsT3JpZ2luKCkueCgpOyB9CiAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbE9mZnNldC5oZWlnaHQoKSArIHNjcm9sbE9yaWdpbigpLnkoKTsgfQogICAg
IEludFNpemUgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gSW50U2l6ZShzY3JvbGxYT2Zm
c2V0KCksIHNjcm9sbFlPZmZzZXQoKSk7IH0KKyAgICBJbnRQb2ludCBzY3JvbGxPcmlnaW4oKSBj
b25zdDsKKworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5nZXQoKTsgfQogCiAgICAgdm9pZCBzY3Jv
bGxUb09mZnNldChpbnQsIGludCwgU2Nyb2xsT2Zmc2V0Q2xhbXBpbmcgPSBTY3JvbGxPZmZzZXRV
bmNsYW1wZWQpOwogICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4LCBTY3JvbGxPZmZzZXRD
bGFtcGluZyBjbGFtcCA9IFNjcm9sbE9mZnNldFVuY2xhbXBlZCkgeyBzY3JvbGxUb09mZnNldCh4
LCBzY3JvbGxZT2Zmc2V0KCksIGNsYW1wKTsgfQpAQCAtMzE4LDkgKzMyMyw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxT
Y3JvbGxiYXIoKTsgfQogCiAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgdmly
dHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hC
YXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGFibGVBcmVh
KiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9s
bGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0K
IAogICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwogICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwpAQCAtNTUyLDkgKzU1Niw2IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmcuZ2V0KCk7IH0KICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsK
ICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7
Ci0gICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkgY29uc3Q7CiAjZWxzZQogICAgIGJvb2wgaXNDb21wb3NpdGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTU4MCw2ICs1ODEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBsYXllckxp
c3RNdXRhdGlvbkFsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2xheWVyTGlzdE11dGF0aW9uQWxs
b3dlZDsgfQogICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykg
eyBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgorICAgIGJvb2wg
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0
ZVpPcmRlckxpc3RzU2xvd0Nhc2UoKTsKQEAgLTY2NiwzNyArNjY4LDUxIEBAIHByaXZhdGU6CiAK
ICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsgCiAKKyAgICAvLyAtLSBT
dGFydCBvZiB0aGUgZnVuY3Rpb25zIGR1cGxpY2F0ZWQgd2l0aCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhIC0tCisgICAgLy8gRklYTUU6IE1vc3Qgb2YgdGhlbSBzaG91bGQgYmUgbW92ZWQgdG8g
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBhbG9uZyB3aXRoIHRoZSBzY3JvbGxpbmcgbG9naWMu
CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIGludCBzY3JvbGxTaXplKFNjcm9sbGJh
ck9yaWVudGF0aW9uKSBjb25zdDsKICAgICBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikg
Y29uc3Q7Ci0gICAgCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCi0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwotICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQ
b2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBzY3JvbGxQb3NpdGlv
bigpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dDsKLSAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNj
cm9sbGJhcnMpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEludFNp
emUgY29udGVudHNTaXplKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRTaXplIG92ZXJoYW5nQW1v
dW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc09uQWN0aXZlUGFnZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIGJvb2wg
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Q7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChj
b25zdCBJbnRSZWN0Jik7CisKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKKyAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dDsKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdChib29sIGluY2x1ZGVTY3JvbGxiYXJz
KSBjb25zdDsKKyAgICBpbnQgdmlzaWJsZUhlaWdodCgpIGNvbnN0OworICAgIGludCB2aXNpYmxl
V2lkdGgoKSBjb25zdDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworICAgIElu
dFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdDsKKyAgICBJbnRQb2ludCBjdXJyZW50TW91c2VQ
b3NpdGlvbigpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpIGNvbnN0OworCisgICAgYm9vbCBpc09uQWN0aXZlUGFnZSgpIGNvbnN0OworCisgICAgSW50
UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KCkgY29uc3Q7CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0OworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkgY29uc3Q7CisjZW5kaWYKKworICAgIC8vIC0tIEVuZCBvZiB0aGUgZnVuY3Rpb25zIGR1cGxp
Y2F0ZWQgZnJvbSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIC0tCiAKICAgICAvLyBSZWN0YW5n
bGUgZW5jb21wYXNzaW5nIHRoZSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyIHJlY3QuCiAgICAg
SW50UmVjdCBzY3JvbGxDb3JuZXJBbmRSZXNpemVyUmVjdCgpIGNvbnN0OwogCi0gICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5
IGJlIGNhbGxlZCBieSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY29sbE9mZnNldC4K
ICAgICB2b2lkIHNjcm9sbFRvKGludCwgaW50KTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKIApAQCAtODkzLDExICs5MDksNzkgQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICBMYXlvdXRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwogCisg
ICAgdm9pZCBhbGxvY2F0ZUZyZWVTY3JvbGxhYmxlQXJlYSgpOworICAgIE93blB0cjxSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhPiBtX3Njcm9sbGFibGVBcmVhOworCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIE93blB0cjxSZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2lu
ZzsKICNlbmRpZgogfTsKIAorY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSA6IHB1Ymxp
YyBTY3JvbGxhYmxlQXJlYSB7CisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBiZSBhYmxlIHRvIGNh
bGwgU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9yaWdpbi4KKy8vIEZJWE1FOiBNb3ZlIGl0IGlu
dG8gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBhbmQgcmVtb3ZlIHRoaXMuCitmcmllbmQgdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzT3duUHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IGNyZWF0ZShSZW5k
ZXJMYXllciogb3duaW5nTGF5ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEob3duaW5nTGF5ZXIpKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlZ2lzdGVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTY3JvbGxh
YmxlQXJlYSgpOworCisgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwor
CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIFNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IE9WRVJSSURFOworCisgICAg
dmlydHVhbCBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IE9WRVJSSURFOworICAgIHZp
cnR1YWwgSW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0KGJvb2wgaW5jbHVkZVNj
cm9sbGJhcnMpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgaW50IHZpc2libGVIZWlnaHQo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCB2aXNpYmxlV2lkdGgoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBJbnRQb2ludCBjdXJyZW50TW91c2VQb3NpdGlvbigpIGNvbnN0IE9WRVJS
SURFOworCisgICAgdmlydHVhbCBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkg
Y29uc3QgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNPbkFjdGl2ZVBhZ2UoKSBjb25z
dCBPVkVSUklERTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5n
Qm94KCkgY29uc3QgT1ZFUlJJREU7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisgICAgdmlydHVhbCBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgT1ZFUlJJREU7CisjZW5kaWYKKworICAg
IC8vIFNob3VsZCBiZSBwcml2YXRlLgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQo
Y29uc3QgSW50UG9pbnQmKSBPVkVSUklERTsKK3ByaXZhdGU6CisgICAgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYShSZW5kZXJMYXllciogb3duaW5nTGF5ZXIpOworCisgICAgdmlydHVhbCBTY3Jv
bGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBPVkVSUklERTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxD
b3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKworICAgIFJlbmRlckxheWVyKiBt
X2xheWVyOworfTsKKwogaW5saW5lIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVpPcmRlckxpc3Rz
KCkKIHsKICAgICBpZiAoIW1fek9yZGVyTGlzdHNEaXJ0eSB8fCAhaXNTdGFja2luZ0NvbnRleHQo
KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406553</attachid>
            <date>2020-08-13 16:27:54 -0700</date>
            <delta_ts>2020-08-13 16:49:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200814012751.patch</filename>
            <type>text/plain</type>
            <size>327009</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NDkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg5YTZiNjkyYjFlNzUy
MDQ2YjBhZDI5YjY0NTM1NDM3ODAxYzVhOC4uNWZhNjI2ODM5ZGU3MGQxZmZmYzA4YmI2ZjM5MWIx
YzM2ZjdmODlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wOC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5j
aHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNjcm9s
bGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJvbVBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQnlS
ZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNv
bnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRh
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNPdmVy
Zmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3Zl
cmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdh
cHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBhaW50Qmxv
Y2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXll
ckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2ZWFs
QmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVSZXF1
aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0aWNT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0aWNh
bE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZUhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENvcm5l
clZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFuZ0Ft
b3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VV
cGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9sbENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVJl
c2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
ZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTWFy
cXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9y
RGVsZXRlTWFycXVlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJT
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFy
cXVlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11
bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTA4
LTEwICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IGJhZCBtZXJnZSBpbiByMjY1NDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXgg
Yjk4YjdhYjNlN2I4MGQxY2Y3NGYyZTNlOGFiZTlmYzk4YzU1MDYyMy4uNzlhMDgyYTU3ZWVlYjhm
ZjMzNGUyZTczOTQ0YTg4YTg2ZDUxNTVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTA4LTEzICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBv
ZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpn
ZXN0dXJlKTogVXNlIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIoKS4KKwogMjAyMC0wOC0w
MSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFJhbmdl
OjpjcmVhdGUgYW5kIG1hbnkgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCBhNmNhNTQxMGM0MWFmZmViMWJiNWVkMTA2YTZhZDE5M2IzYmFmMzc4Li5jMmY3M2Ji
MmM5ZGQ3ZTJjNzE5OWM0NTUwNDEwNTQzZThmYjUzMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTEzOTEsNiArMTM5MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCiAgICAgcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAyN2UyZDYzNmE4MWJlMjI0OTI2
ODg5MmE3Y2JhY2I3ZDRjYjgwZWNjLi43ZjllNDJkMTRlYmIxMDc2YWI0M2IzYzljMTQ2Mjc2YjFm
OTc5MjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEyNyw2ICsyMTI3LDcgQEAgcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcAorcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKIHJlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAog
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY4NzM4MmQ5YjhiMTdhNjQ2MzBk
NjM3NGRhZTQzNGFkOWJlODM5NjAuLmEzZDQ2ZThmY2ViMWIwNTU5MDJmYjA1NDU4ZWMxY2QwZDA4
ZDA5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTMwOSw2ICszMDksNyBAQAogCQkwRjU4MEIwRTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJD
bGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGOTBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5
IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFj
a2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGNTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxM0FC
OUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDgg
LyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tp
bmdMYXllci5oICovOyB9OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9u
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QjdBNTUxMEY2
NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyog
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTkyNCw2ICs1OTI1LDggQEAKIAkJMEY1ODBDRkEwRjEyREU5QjAw
NTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJC
YWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyQmFj
a2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MENGQzBGMTJERTlCMDA1
MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2lu
Z0xheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRpbGVkQmFja2lu
Z0xheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkEyMTQ5NjkzOTEw
MEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlRpbGVkQmFja2luZ0xheWVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRp
bGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvblV0aWxp
dGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3NjMsNiArMjg3NjYsOCBA
QAogCQkJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAq
LywKIAkJCQkzQzI0NEZFNUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAgKi8sCiAJCQkJM0MyNDRGRTRBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QuaCAqLywKKwkJCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmNwcCAqLywKKwkJCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8q
IFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0Mg
LyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApAQCAtMzMxMTYsNiArMzMxMjEsNyBAQAogCQkJ
CTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjU4MENGRjBGMTNB
QjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
ckxpbmVCcmVhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzYzQ0
ZWM4OTg0YjY3ZjZjYTk4YjcwOTdmNDdjNjAyNmQ4NTY1NDE3Li5hMmVkYmE0YTk2NDgzMjFjOGRk
ZjFhNzcyMTA2NzQ1ZjcxM2JjMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTc5LDcgKzc5
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5o
IgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5l
QnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlz
dEl0ZW0uaCIKQEAgLTM5MTYsNyArMzkxNiw4IEBAIFNjcm9sbGFibGVBcmVhKiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSgpIGNvbnN0CiAg
ICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIEFTU0VSVChi
b3guc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiBib3guc2Nyb2xsYWJsZUxheWVyKCk7
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAgdm9pZCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBv
ciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCkt
PnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICBib3guc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKIH0K
IAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggODgwMmVkMDRl
YTMzMzBlOTU3ZGJhMDFjMTcxNjI0NDUxZWM0NDRjZC4uODgwNGExNmJlYzE0Y2QwMmYwN2FlZmE2
OWJmOWIxMjA2ZDI2ZDMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtODksOSArODksOSBA
QAogI2luY2x1ZGUgIlBzZXVkb0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAi
UXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKLSNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBAIC0xMzA4LDggKzEzMDgsOCBAQCB2
b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiAgICAgICAgIGludCBjbGFt
cGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZl
Y3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290
aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6
WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsTGVm
dChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBy
ZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxT
aG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAg
fQogfQogCkBAIC0xMzMyLDggKzEzMzIsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbFRvcChp
bnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2VyKG5ld1Rv
cCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1hdGVk
U2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpBdXRv
LCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAg
ICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNj
cm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJM
YXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5N2U2NmY4ZjhhZjA1ZmEwMjc3NmEwMDg1MGY1ZjU1YWU4
NjFmM2YuLmQ4ZDQ3N2UxYzhiMDNkOWU3MGJlMTJhMGJhMDFhNDYxYzJjYjg0YTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yNDEyLDkgKzI0MTIsMTIg
QEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1v
ZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGlu
Z1N1cHByZXNzQ291bnQpIHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAgIGxheWVyLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVu
dCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0g
ICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhm
YWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlm
IChtX2RvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBh
Z2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGlu
Z0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1h
cnF1ZWVFbGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRlMmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNj
MjcxMjc1Li4wNDhmMDUwZjgxYTg2MWMxNDQ3MTA0OWNkNjI1NTNkYTAwZTk4MTI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc1
LDggQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgQVNTRVJUKHJlbmRlckJveE1vZGVsT2JqZWN0
KCktPnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3Qo
KS0+c2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJk
ZTQzZGFkNWE5ZmI2ZDhjNTkxZDdmZmZkNDRlMWM0NDI2Nzg2YTMuLjcyMjI0Zjk1MTBhOTY5Zjdk
NGFkYWE0MWM2OGI5NTc4MWVjYjkwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
QEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJs
dXIoKQogICAgIGlmICghaW5uZXJUZXh0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8qIGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKTsKKyAgICBhdXRv
KiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpOwogICAg
IGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKaW5kZXggYTZhNjJhYzlmNmVlY2E0NTAxY2Q0N2E1ZjAwZTBlNTFmZjc2MTM5
Mi4uYjUwMmVkYWFhOWRhNDc4YzlkMDc3MThmNjgxMzZhNjY1MzA4OGFlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlBsdWdp
bkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNl
dC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM0Mywx
MiArMzQzLDE0IEBAIHN0YXRpYyBib29sIGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5j
bG9zaW5nQm94KE5vZGUqIHN0YXJ0Tm9kZSwgY29uc3QgV2hlCiAgICAgd2hpbGUgKGN1cnJlbnRF
bmNsb3NpbmdCb3gpIHsKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1cnJl
bnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKICAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1FdmVu
dCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKLSAgICAgICAgICAgIGJv
b2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlX
aXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9ybURlbHRhLndpZHRoKCksIGZpbHRl
cmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRWZWxvY2l0eSk7Ci0gICAgICAgICAg
ICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGJveExheWVyLT5oYW5kbGVXaGVlbEV2ZW50KGNv
cGllZEV2ZW50KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNjcm9sbGlu
Z1dhc0hhbmRsZWQgPSBkaWRTY3JvbGxJblNjcm9sbGFibGVBcmVhKCpib3hMYXllciwgd2hlZWxF
dmVudCk7CisgICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBib3hMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdp
dGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVy
ZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKKyAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGJveExheWVyU2Nyb2xsYWJsZS0+aGFuZGxl
V2hlZWxFdmVudChjb3BpZWRFdmVudCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBkaWRTY3JvbGxJblNjcm9sbGFibGVB
cmVhKCpib3hMYXllclNjcm9sbGFibGUsIHdoZWVsRXZlbnQpOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoc2Nyb2xsaW5nV2FzSGFuZGxlZCkgewogICAgICAgICAgICAgICAgIHN0
b3BFbGVtZW50ID0gY3VycmVudEVuY2xvc2luZ0JveC0+ZWxlbWVudCgpOwpAQCAtMTU2OCw3ICsx
NTcwLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25z
dCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gKICAgICAgICAgYm9vbCBpblJlc2l6ZXIg
PSBmYWxzZTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2l0aCByaWdodC1hbGlnbmVkIHRleHQgaW4gYSBib3gs
IHRoZSByZW5kZXJlciBoZXJlIGlzIHVzdWFsbHkgYSBSZW5kZXJUZXh0LCB3aGljaCBwcmV2ZW50
cyBzaG93aW5nIHRoZSByZXNpemUgY3Vyc29yOiB3ZWJraXQub3JnL2IvMjEwOTM1LgotICAgICAg
ICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
KnJlbmRlcmVyKS5sYXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigp
KSB7CiAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2wocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICAgICAgICAg
ICAgICBpZiAoaW5SZXNpemVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CkBAIC0xODEyLDEyICsxODE0LDE0
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlCiAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBt
X2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3Np
bmdMYXllcigpIDogbnVsbHB0cjsKICAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9p
bnQobW91c2VFdmVudC5oaXRUZXN0UmVzdWx0KCkubG9jYWxQb2ludCgpKTsKLSAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wobG9jYWxQb2ludCkpIHsKLSAgICAg
ICAgbGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsKLSAgICAgICAgbV9yZXNpemVMYXllciA9
IGxheWVyOwotICAgICAgICBtX29mZnNldEZyb21SZXNpemVDb3JuZXIgPSBsYXllci0+b2Zmc2V0
RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKLSAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllciA/IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGFibGVMYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgewor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRJblJlc2l6ZU1vZGUodHJ1ZSk7CisgICAg
ICAgICAgICBtX3Jlc2l6ZUxheWVyID0gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICAgICAgbV9v
ZmZzZXRGcm9tUmVzaXplQ29ybmVyID0gc2Nyb2xsYWJsZUxheWVyLT5vZmZzZXRGcm9tUmVzaXpl
Q29ybmVyKGxvY2FsUG9pbnQpOworICAgICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0Q2FyZXRCbGlua2luZ1N1c3BlbmRlZCh0cnVlKTsKQEAgLTE5MTgsMTAgKzE5
MjIsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIGxheWVyID0gcmVu
ZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgIGlm
ICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5v
KSkgewogICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVy
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRl
ZWI4MzQ4ZTc5ZWFiYjJhMS4uODcxOWJhMDM2NTZiYTc4Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJl
bmRlckJveDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNz
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fc3ZnUGFuIHsgZmFsc2UgfTsKIAotICAgIFJlbmRlckxheWVyKiBtX3Jl
c2l6ZUxheWVyIHsgbnVsbHB0ciB9OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9yZXNp
emVMYXllciB7IG51bGxwdHIgfTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2NhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudDsKICAgICBib29sIG1fZXZlbnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCA4MzJhMGQ1ZmU5NWJkYjM5N2UxYjhhYmZiYmFlZGI4ODE3OTZmNDljLi40YTVhYzlm
YTM3YjA0MTQ4ZTFhOGQ1OTliODgyODNhMjdiM2IyNGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC03Niw5ICs3Niw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1NjEs
NyArMjU2MSw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhh
c1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdp
ZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisgICAgICAgICAgICBBU1NFUlQo
cmVuZGVyVmlldy0+c2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+
c2Nyb2xsYWJsZUxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzgzMywxMCArMzgzNCwxMCBAQCBTY3JvbGxh
YmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byogbGF5ZXIgPSBvd25lclJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5
ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6Oklu
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+
c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogSW50UmVj
dCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CkBAIC00
MzExLDggKzQzMTIsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICAgICAgcmVuZGVy
ZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICByb290TGF5ZXItPnBhaW50KGNvbnRleHQs
IGRpcnR5UmVjdCwgTGF5b3V0U2l6ZSgpLCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyLCB7IH0s
IHNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPT0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luID8gUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9y
aWdpbiA6IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBY2Nlc3NpYmxl
T3JpZ2luT25seSwgZXZlbnRSZWdpb25Db250ZXh0KTsKLSAgICBpZiAocm9vdExheWVyLT5jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQotICAg
ICAgICByb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0
LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gcm9vdExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdp
b25Db250ZXh0KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludE92ZXJsYXlTY3Jv
bGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7Cisg
ICAgfQogCiAgICAgZGlkUGFpbnRDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QsIHBhaW50aW5n
U3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRl
eCA0ZDhiNzJmOGU1YmNiMGU4MzJkM2VjM2RkYzJlZTkyOTJiNDlmZTg2Li5kYjFhNGViZGVkMmZh
ZGQxZmZmMGI1YmRiMmE5ODAwNDFkZmFmOGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRp
YWxOYXZpZ2F0aW9uLmNwcApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk0LDExIEBA
IGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAg
ICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vy
c2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIGF1dG8qIGVuY2xvc2luZ0xheWVyID0g
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJU
KGVuY2xvc2luZ0xheWVyKTsKKworICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXJTY3Jv
bGxhYmxlID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAg
ZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoZHgs
IGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQppbmRleCA5YmI4ZTkyY2FhYzVjZjUzMmI3OWI5MGVlYWIzY2YyMTU0MGFmZjQz
Li5kMTYyNmVjM2MyN2IxZmI2M2VmYjUzYTgwZjAyZTZjODY4MDZlYzQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTYgQEAgdm9pZCBGcmFtZTo6b3Zl
cmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRl
ckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byogbGF5ZXIgPSBk
b3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG9sZFNjcm9s
bFR5cGUgPSBsYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRT
Y3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMpOwotICAgIGxheWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihw
b3NpdGlvbik7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7
CisgICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7Cisg
ICAgbGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6
OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOworICAgIGxheWVyLT5zY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIGxheWVyLT5zZXRDdXJyZW50U2Ny
b2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBG
SVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAgbGF5ZXItPmRpZEVuZFNjcm9s
bCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJh
bWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCBjMDkzMGI2MzQ5NWU3MTgxNTk5MWE0MDZhNGQ2
NjVhMjdiYTc3MTRiLi5mODQzZTllM2ZjN2Y1YzNjYWExODY0ZTVlZWZjNzg1NWVjZGExNDI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01Miw3ICs1
Miw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIgogI2ltcG9ydCAiUGxh
dGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJMYXllci5o
IgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIK
QEAgLTc4Miw3ICs3ODIsNyBAQCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
Rm9yQm94KFJlbmRlckJveCYgYm94KQogICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihib3gpKQog
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4oJmJveCk7CiAKLSAgICByZXR1
cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KICAg
ICAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5l
cihDb250YWluZXJOb2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKaW5kZXggZTVh
NDdiNzA3NGRjYzkzMWRiMDAzNzc4M2EzZTI5YWZkN2ZkZGU0My4uYWVlNTBiMDlhOTMwZGMzOTU1
MzA2ZmVjMTQ1MGNiNzdhZGM3MDI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpZ2hsaWdodERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdo
bGlnaHREYXRhLmNwcApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIwOSw3ICsyMDksOCBAQCB2b2lk
IEhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9u
LCBSZXBhaW50TW9kZSBibG9jawogCiB2b2lkIEhpZ2hsaWdodERhdGE6OmNsZWFyU2VsZWN0aW9u
KCkKIHsKLSAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fw
cygpOworICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIG1f
cmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcygp
OwogICAgIHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOZXdN
aW51c09sZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdobGlnaHREYXRhOjph
cHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9k
ZQogICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAKLSAgICBpZiAoYmxv
Y2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgbV9yZW5kZXJW
aWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgaWYgKGJs
b2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAgICAgICAgQVNTRVJU
KG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIG1fcmVuZGVyVmlldy5z
Y3JvbGxhYmxlTGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB9
CiAKICAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQg
Zm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAogICAgIC8vIHB1dCB0aGVt
IGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKaW5kZXggNmI1M2NiYTg1YzhlOWRjNTk3MTViNjM4Y2FlNTc1ZjgwZTQ4Zjk1NC4u
YTY3Y2IyMmMyM2QzM2YzMzhjOGEwYTY2NGZlYjU5MmUwZjkwNmM1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKQEAgLTU1Myw3ICs1NTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRV
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8q
IGJsb2NrIDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVy
Zmxvd0NsaXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgICAgIGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAgICAgfQogfQpA
QCAtNTg0LDggKzU4NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgp
OworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCkt
PnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXQoKQpAQCAtMTEwOSwxMiArMTExMCwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAg
IGlmIChwdXNoZWRDbGlwKQogICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFz
ZSwgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICByZXR1cm47CisKICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhh
Y3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0
aAogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91
bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUg
dGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhhc2UgPT0gUGFpbnRQaGFzZTo6Qmxv
Y2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5k
KSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCiAgICAgICAgICYmIHN0eWxlKCkudmlz
aWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50
V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgp
KQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRl
eHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVj
dChwYWludEluZm8ucmVjdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMTQ2OSwxNiArMTQ3MywxNiBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50TwogCiAgICAgICAgIExheW91dFJlY3QgZ2FwUmVjdHNCb3VuZHMgPSBz
ZWxlY3Rpb25HYXBzKCp0aGlzLCBwYWludE9mZnNldCwgTGF5b3V0U2l6ZSgpLCBsYXN0VG9wLCBs
YXN0TGVmdCwgbGFzdFJpZ2h0LCBjYWNoZSwgJnBhaW50SW5mbyk7CiAgICAgICAgIGlmICghZ2Fw
UmVjdHNCb3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxh
eWVyID0gZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyU2Ny
b2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxl
TGF5ZXIoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3Zl
QnkoLXBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7
CiAgICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQo
RmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNC
b3goKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXll
ci0+cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBn
YXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5k
cyksICZsYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaXNC
b3goKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXll
clNjcm9sbGFibGUtPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cyhnYXBSZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAgICAgbGF5ZXJTY3JvbGxhYmxlLT5hZGRC
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA1LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExh
eW91dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwg
cm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpKSk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5oaXRUZXN0T3ZlcmZs
b3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0g
dG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9j
azo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjQ5OCw5ICsyNTA1LDExIEBAIGludCBSZW5k
ZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29s
IGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBtb3Zl
cykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxpZ25z
IHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUg
aWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAg
ICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0
IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9
IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9u
dGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9s
bE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAoaXNX
cml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwotICAgICAgICAKKyAgICAgICAgYm9v
bCBoYXNNYXJxdWVlID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFy
cXVlZSgpIDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNj
cm9sbGFibGVMYXllcigpID8gKHNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigp
IHx8IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkpIDogZmFsc2U7CisgICAg
ICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllcigpID8gKHNj
cm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVy
KCktPnNjcm9sbE9mZnNldCgpLngoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpZ25vcmVCYXNl
bGluZSA9IChoYXNNYXJxdWVlIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBoYXNW
ZXJ0aWNhbFNjcm9sbGJhciA6IGhhc0hvcml6b250YWxTY3JvbGxiYXIpKSB8fCAoaXNXcml0aW5n
TW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOworCiAgICAgICAgIE9wdGlvbmFsPGludD4gYmFz
ZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2Nr
QmFzZWxpbmUoZGlyZWN0aW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0RlcHJlY2F0ZWRG
bGV4aWJsZUJveCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCmluZGV4IGUyMTNhYWM3MWE5NDQ1ODczZTIxNjA0MTY0ZTQxNDQ1OGIwNmNhOTAuLmM1
MWM1MGNlNTdiZGFlMDAzNTRhZGQyOTQyZDFjY2U3NDhkYzM4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3Rh
dGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
SXRlbS5oIgpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRl
SW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAg
ICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAg
IC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5p
bXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYg
bGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgaWYgKHNjcm9sbGFi
bGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxh
eWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2Fs
V2lkdGggPSAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApp
bmRleCA4ZmE2ZGZiMzQ5ZTJmM2NjZGZjNzdiZTVkMTFjMjg5YzdlMDRmNTExLi43NTRiZjMzNzdm
MDQ3ZmEyYWMxNjQzYTFkNjA5YzQyNjUxZGRmMjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcApAQCAtNTgsOCArNTgsOCBAQAogI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgot
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOSwxMSArMzE5LDExIEBAIHZvaWQgUmVuZGVy
Qm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBhbmQgd2Ug
aGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFs
dWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYg
KGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgU2Ny
b2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwor
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBvbGRTdHls
ZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20o
KSkgeworICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVM
YXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3Ig
PSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwog
ICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBs
YXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uKTsKICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNo
YW5nZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU0Miw4ICs1NDIsOCBAQCBMYXlv
dXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6
c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpKQotICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKKyAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZp
c2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3
b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKQEAgLTU1NSw4ICs1NTUsOCBAQCBpbnQgUmVuZGVyQm94OjpzY3Jv
bGxXaWR0aCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBs
YXllcigpLT5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xs
SGVpZ2h0KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlz
IG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRp
bmcgbW9kZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgp
IGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTU2NSwxMiArNTY1LDEyIEBA
IGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNj
cm9sbExlZnQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXll
cigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xp
cCgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCkueSgpIDogMDsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJl
Zm9yZUxheW91dElmTmVlZGVkKCkKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lkIFJlbmRlckJveDo6
cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dp
Y2FsSGVpZ2h0KDBfbHUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9y
KFJlbmRlckxheWVyJiBsYXllcikKK3N0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3Io
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIu
cmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRz
KCkpCkBAIC01ODksMjYgKzU4OSwyNiBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25p
dG9yKFJlbmRlckxheWVyJiBsYXllcikKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQo
aW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJs
ZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCps
YXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRp
b24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZUG9z
aXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNldHVw
V2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxlTGF5
ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Ny
b2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1w
aW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAoIWhhc092
ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRp
b24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
IH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0
ICs4MDgsMzAgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRv
RnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6Omlu
Y2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVy
Zmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygp
Ci0gICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwg
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVy
Zmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9
CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25z
dAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigp
LT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgp
ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dY
KCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJT
aXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOworICAgIHJldHVy
biBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBz
Y3JvbGxhYmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKIH0KIAogaW50
IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3Jv
bGxiYXJTaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aW50cmlu
c2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzNCwxMiArODQwLDEyIEBAIGlu
dCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0
eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNj
cm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVy
dGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVy
biB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKCFpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXll
cigpICYmIGxheWVyKCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VS
VChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNj
cm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsK
ICAgICB9CiAKQEAgLTg0OCwxNSArODU0LDE0IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Nj
cm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94OjpzY3JvbGxMYXll
cihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRl
ckxheWVyKiBib3hMYXllciA9IGxheWVyKCk7Ci0gICAgaWYgKGJveExheWVyICYmIGJveExheWVy
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKLSAgICAgICAg
aWYgKHN0b3BFbGVtZW50KQotICAgICAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOwot
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvKiBib3hMYXllciA9IHNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghYm94TGF5ZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoc3RvcEVsZW1lbnQpCisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQ
b2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzg4MywxNCBAQCBib29s
IFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xs
TG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBz
Y3JvbGxlZCA9IGZhbHNlOwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAg
ICBpZiAobCkgeworICAgIGF1dG8qIGxheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYg
KGxheWVyKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIE9uIE1hYyBvbmx5IHdl
IHJlc2V0IHRoZSBpbmxpbmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVu
dCBzY3JvbGwgKGUuZy4sIGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xs
KGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
LCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIHNjcm9sbGVkID0g
bGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNr
d2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAg
ICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSks
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGxheWVyLT5zY3JvbGwobG9n
aWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCiAgICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAo
c2Nyb2xsZWQpIHsKQEAgLTg5OSw5ICs5MDMsOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNj
cm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAog
ICAgIGlmIChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVs
ZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNv
bnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAg
ICAgcmV0dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllciwgc3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdC
bG9jaygpOworICAgIGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAg
ICByZXR1cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcg
KzkzNiw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkg
Y29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigp
LT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTkxLDggKzk5NSw4IEBAIFJlbmRlckJveCogUmVuZGVyQm94
OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogdm9pZCBSZW5k
ZXJCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQogewotICAgIGlmIChsYXll
cigpKQotICAgICAgICBsYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKKyAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYW5TY3Jv
bGxGcm9tUG9pbnQoc291cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlT
Y3JvbGxiYXJzKCkgY29uc3QKQEAgLTEwMTcsMTEgKzEwMjEsOSBAQCBib29sIFJlbmRlckJveDo6
bmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3QKIAogU2Nyb2xsUG9zaXRp
b24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVy
Zmxvd0NsaXAoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwotCi0gICAgQVNTRVJUKGhhc0xheWVyKCkp
OwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJC
b3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNTcxLDcg
QEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVk
RXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3Jv
dW5kUmVjdCwgYmFja2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTAg
KzE4OTAsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3Qg
TGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXpl
KGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQo
KSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0
IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7CiAgICAg
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAg
ICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVs
ZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOworICAgICAgICBjbGlw
UmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVs
ZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2
YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDVkZGZjMzExODQ3
YmFmZDkzZjMzOTQ4YzExMjViZWVlOGMyODM5ODcuLmMwZGE3ZWExMTM0Zjk2NjAzNThjOTkyMTNk
ZDMzYTg2ZmU1YTU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNDgsOSArNDgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckZs
ZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11
bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGVSb3cuaCIKQEAgLTQ5MCw4ICs0OTAsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdw
bwogICAgICAgICBGbG9hdFBvaW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGlu
Z0FuY2VzdG9yID0gY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2Nh
dGlvbigpIC0KICAgICAgICAgICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3Jk
ZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAg
ICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0Jv
eC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNv
bnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgp
OworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAm
JiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAg
IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICAg
ICAgY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihj
b250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAg
IGNvbnN0cmFpbnRzLnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01MDgsOCArNTA4LDggQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRp
b25WaWV3cG8KICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllcikgewogICAgICAgICBzdGlj
a3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciAtPSBGbG9hdFNpemUoZW5jbG9z
aW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGlu
Z0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3Np
bmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBzdGlja3lMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVy
LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBj
b250YWluaW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zm
c2V0KCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wg
aXMgbm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVj
c3Rvci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
cik7CkBAIC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmNvbnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxv
YXRSZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwog
Ci0gICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9z
aW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Ny
b2xsT2Zmc2V0OworICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQg
c2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhh
c0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9z
aW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNM
YXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFibGVMYXllcigpICYmIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSkKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LnNj
cm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKEZsb2F0
UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwgc2Nyb2xsT2Zmc2V0Lnko
KSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKQEAgLTg0NCw4ICs4NDYsMTAg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgCiAgICAgICAgIC8vIEFkanVzdCB0
aGUgcGFpbnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3Jk
ZXJzIGF0IHRoZSBlbmRzLgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNC
b3guc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRo
KGJMZWZ0ICsgbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9s
bGVkUGFpbnRSZWN0LnNldEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdo
dCgpICsgYm9yZGVyQm90dG9tKCkpOworICAgICAgICBhdXRvIHNjcm9sbFdpZHRoID0gc2Nyb2xs
YWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSA6IDA7CisgICAg
ICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgc2Nyb2xsV2lkdGggKyBiUmln
aHQpOworICAgICAgICBhdXRvIHNjcm9sbEhlaWdodCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbEhlaWdodCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWlu
dFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9t
KCkpOwogICAgIH0KICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91
bmRDbGlwU3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCAxYWVkNDcxNWY0ZWMzM2Y0Y2M1N2M5NWU5YmQ4MzU4YjE2
MDkzN2UxLi43MzBjNzBmNDQ3YTM3NTgxNTNlNmNjOGM4ZDdkOWFkMmNkNDFlYjkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NiwxNiArMjg2LDExIEBA
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlw
UmVjdHMmIGNsaXBSZWN0cykKIAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0
U2Nyb2xsaW5nU2NvcGUoKQotewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2Nv
cGUgPSAwOwotICAgIHJldHVybiArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5k
ZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3Qp
Ci0gICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1Jl
bmRlclZpZXcoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5
ZXJUeXBlKQorICAgIDogbV9sYXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZp
ZXdMYXllcihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBt
X2ZvcmNlZFN0YWNraW5nQ29udGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgp
KQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5n
Q29udGV4dChmYWxzZSkKQEAgLTMwMywxOSArMjk4LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAg
ICAgLCBtX3pPcmRlckxpc3RzRGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGly
dHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9p
blJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQog
ICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJh
bnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2Up
Ci0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1
cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHko
dHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVE
ZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50
KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBt
X2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4
ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1
ZSkKQEAgLTMyOSwxNSArMzIwLDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRl
U1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkp
CiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29t
cG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NF
UlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRp
ZgpAQCAtMzUyLDUzICszMzQsMjIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1h
bEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2lu
Z0NvbnRleHQoc2hvdWxkQmVDU1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBh
aW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNS
ZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxm
UGFpbnRpbmdMYXllciBpcyBpbml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVu
IHRob3VnaAorICAgIC8vIGl0IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNh
bGwKKyAgICAvLyAibV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdM
YXllcigpOyIKKyAgICAvLyBoZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJl
bmRlckxheWVyU1ZHL0hUTUwgY2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAg
aWYgKCFyZW5kZXJlcigpLmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50
U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRl
cmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9
Ci0KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0g
ICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRo
ZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xs
UG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAg
aWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1l
bnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAK
IFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkK
LSAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVz
dHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7
Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xs
UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIp
OwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlv
bikKICAgICAgICAgcmVtb3ZlUmVmbGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIo
KTsKLSAgICBjbGVhclJlc2l6ZXIoKTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAg
ICBpZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC00MTcsNiArMzY4LDIwIEBA
IFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04ocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8
fCAhZmlyc3RDaGlsZCgpKTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXll
cjo6c2Nyb2xsYWJsZUxheWVyKCkKK3sKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Pih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
dGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgaWYgKGlz
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB2
b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJMYXllciYgY2hpbGQsIFJlbmRlckxheWVy
KiBiZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJMYXllciogcHJldlNpYmxpbmcgPSBiZWZvcmVD
aGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGlsZCgpOwpAQCAt
OTM0LDcgKzg5OSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBP
cHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsKICAgICB1cGRhdGVM
YXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCgpOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJs
ZUxheWVyKCk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CiAKICAgICBpZiAo
Z2VvbWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9y
KHRoaXMsIHBhcmVudCgpKTsKQEAgLTk0Miw3ICs5MTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlv
blNldAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9uLgogICAg
IGNsZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygpKSB7Cisg
ICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJmbG93Q29u
dHJvbHMoKSkgewogICAgICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBp
ZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUo
dG9GbG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpA
QCAtOTUxLDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAv
LyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9y
IGxheWVyLgogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Io
cm9vdCgpKTsKICAgICAgICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91
bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5w
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsK
ICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEwMjgs
MTMgKzk5Niw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRl
ckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgIGNoaWxkLT51cGRh
dGVMYXllclBvc2l0aW9ucyhnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAgICAgLy8gV2l0aCBhbGwg
b3VyIGNoaWxkcmVuIHBvc2l0aW9uZWQsIG5vdyB1cGRhdGUgb3VyIG1hcnF1ZWUgaWYgd2UgbmVl
ZCB0by4KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtl
IHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMu
Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsK
LSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAg
IH0KKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgp
KQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZU1hcnF1ZWUoKTsKIAogICAgIGlmIChy
ZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAg
IGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJbnRlcnNl
Y3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTExNCw5MiArMTA3Nyw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVwYWludExheW91
dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3
KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVyR2VvbWV0cnlN
YXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9IHJlbmRlcmVy
KCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5j
ZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0
byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCi0gICAg
Ly8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQg
SGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbEZsYWc+IGZsYWdzKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBi
ZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKLSAgICAvLyB0
aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxv
dyBpcyB2YWxpZC4KLSAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKLQotICAg
IC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRh
bnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGluZwotICAgIC8vIG91ciByZWN0YW5nbGVz
IGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZpc2liaWxpdHkgY2hhbmdlcywgd2UgYXJl
IGV4cGVjdGVkIHRvCi0gICAgLy8gcmVjb21wdXRlIGFsbCBvdXIgcG9zaXRpb25zIGFueXdheS4K
LSAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgIW1faGFzVmlzaWJsZUNvbnRlbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5
ZXJQb3NpdGlvbigpOwotICAgIGlmIChwb3NpdGlvbkNoYW5nZWQpCi0gICAgICAgIGZsYWdzLmFk
ZChIYXNDaGFuZ2VkQW5jZXN0b3IpOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgSGFz
Q2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yLCBJc092
ZXJmbG93U2Nyb2xsIH0pKQotICAgICAgICBjbGVhckNsaXBSZWN0cygpOwotCi0gICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkKLSAgICAg
ICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpOwotCi0gICAg
aWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIGZsYWdzLmFkZChIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsKLSAgICAKLSAgICBib29sIHNob3VsZENvbXB1
dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFpbnMoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWlu
ZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNBbGwoeyBJc092ZXJmbG93U2Nyb2xsLCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0pKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCk7
Ci0gICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAhaXNWaXN1YWxseU5vbkVtcHR5KCk7Ci0gICAg
Ym9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MgPSBnZW9tZXRyeU1hcCAmJiAoKHNob3VsZENv
bXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFsbHlFbXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsK
LSAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9tZXRyeU1hcC0+
cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7Ci0KLSAgICBpZiAoc2hvdWxk
Q29tcHV0ZVJlcGFpbnRSZWN0cykgewotICAgICAgICAvLyBXaGVuIHNjcm9sbGluZywgd2UgZG9u
J3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2aXN1YWxseSBub24tZW1wdHkgbGF5ZXJzLgot
ICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQotICAgICAgICAgICAgY2xlYXJSZXBhaW50UmVj
dHMoKTsKLSAgICAgICAgZWxzZSAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgdGhlIHJlcGFpbnQg
Y29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJlZS4KLSAgICAgICAgICAgIGNvbXB1dGVS
ZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFw
KTsKLSAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9y
bVdpZGdldCgpKSB7Ci0gICAgICAgIC8vIFdoZW4gU2Nyb2xsVmlldydzIG1fcGFpbnRzRW50aXJl
Q29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5ZXIgYmFja2luZyBjaGFuZ2VzLCB0aGUgcmVw
YWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KLSAgICAgICAgLy8gdmlzdWFsIHRvIGxheW91dCBv
dmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNhY2hlZCByZXBhaW50IHJlY3RzIGJlY29t
ZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUgcmVjb21wdXRlZCAoc2VlIHdlYmtpdC5vcmcv
Yi8xODgxMjEpLgotICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNv
cnJlY3QuCi0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMo
KSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgPT0gcmVu
ZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5l
ckZvclJlcGFpbnQoKSkpOwotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExh
eW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX291dGxpbmVC
b3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRh
aW5lckZvclJlcGFpbnQoKSkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKFJlbmRlckxheWVyKiBj
aGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
Ci0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5
TWFwLCBmbGFncyk7Ci0KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMg
c2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2ggZG9lcyBub3QgY2hhbmdlIHRoZSBzaXpl
KCkKLSAgICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJl
cGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKLSAgICAvLyB1
cGRhdGVkIGFib3ZlLgotCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICBib29sIG9sZFVw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAg
ICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+
dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxk
UHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0Fu
Y2VzdG9yKHBhcmVudCgpKTsKLQotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCku
aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpOwotfQotCiAjaWYgRU5BQkxFKENTU19DT01Q
T1NJVElORykKIAogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQmxlbmRNb2RlKCkKQEAgLTE2OTAs
MzQgKzE1NjcsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVmdExvY2F0
aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJhY3Qgb3Vy
IHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCi0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJl
bnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0
aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5
bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3
ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9m
ZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlv
bmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwb3Np
dGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRl
cklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIExh
eW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50
LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0
OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlv
bmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmIChhdXRv
KiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9M
YXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKLQotICAgICAgICBBU1NFUlQo
cGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Ny
b2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwotICAg
IH0KIAotICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Ny
b2xsaW5nU2NvcGUpCi0gICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Ny
b2xsaW5nU2NvcGU7CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQu
CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigp
KQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRl
U2Nyb2xsaW5nU2NvcGVzKGxvY2FsUG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0
Q2hhbmdlZCA9IGZhbHNlOwogICAgIGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgp
KSB7CkBAIC0xODM5LDg0ICsxNjkyLDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBs
YXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25l
ckVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3duZXJSZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVuZGVyZXIp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVu
Y2xvc2luZ0xheWVyKCk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1lQm91bmRh
cmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFt
ZUJvdW5kYXJpZXMpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5j
bG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8qIGFuY2Vz
dG9yID0gZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAgICAgIHJl
dHVybiBhbmNlc3RvcjsKIAogICAgIGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QK
LXsKLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIo
KSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVk
QW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAgaWYgKGluY2x1ZGVTZWxmID09
IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUo
KnRoaXMpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwot
ICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIg
PSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91
bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRMYXll
cikpCi0gICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAgIH0KLQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5n
Qm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCku
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lk
ZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
VXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1J1
YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigp
KQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgYXV0byogb3duZXJSZW5kZXJl
ciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW93bmVyUmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNj
cm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAg
IHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0dXJuIG93bmVyUmVuZGVyZXIt
PmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ0LDMzMSArMjI0MSw2IEBAIExh
eW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9M
YXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5z
KSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdz
KCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5H
X1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJl
bmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3Jt
VG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVk
IHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktp
dC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZl
bnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50
KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVu
dEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAgaWYg
KCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAg
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0KLS8vIEZJWE1FOiB0aGlzIGlz
IG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRl
ZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRo
aXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5
ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3Io
KS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGljIGlu
bGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0gICAg
Ly8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDovL214
ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93
c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAgaW50
IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBpZiAo
YWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0
YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1c3Rl
ZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShj
b25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9s
bERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgp
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQ
b2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlv
biA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBt
b3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0
IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIElu
dFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3Np
dGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNl
Ci0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247
Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBv
aW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNj
cm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNv
bgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgp
KSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVp
Z2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRl
bHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxl
KCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29u
c3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAg
IGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAg
ICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxl
KCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNl
dCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3Jv
bGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQot
ICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBs
YXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNh
biBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0g
bmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5n
U2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0g
ICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFp
bmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIo
KS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUg
Y2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxl
ZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBt
ZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAg
ICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAg
ICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlk
bid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRo
ZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0
aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQo
KQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBv
c2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1w
aW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3Np
dGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9z
aXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBT
Y3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVkID09
IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGlu
Zyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNl
dCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJl
dHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcp
Ci17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9s
bE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1
cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
LCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQotICAg
IHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
IG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykK
LXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0g
ICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQg
bmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBj
bGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmlt
YXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotICAg
IGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0
KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlv
bikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0g
PDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1f
c2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5
cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRpb24g
bmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7
Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQg
aWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAgICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQn
cyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVt
cyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZzZXQg
PSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihu
ZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54
KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lk
dGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9s
bFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBuZXdPZmZz
ZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0K
LSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5Bbmlt
YXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBz
Y3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2Vy
IGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBu
ZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAg
ICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAgICAg
ICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAgICAg
dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0K
LSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBVcGRh
dGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBm
aXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBk
b24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBk
ZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZpZXcu
ZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAg
ICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBk
YXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3
KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNv
bXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1
cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBw
b3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMs
IGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRo
ZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgotICAg
ICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24g
Y2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNo
IG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8gc28gdHJp
Z2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCi0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQot
ICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRl
QmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAg
b2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmlu
dmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFnZU92
ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBGcmFt
ZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwot
ICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9s
bGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0g
ICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWlu
dExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWlu
dFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRD
b250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBG
bG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQotICAg
ICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxU
b0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5ldmVu
dEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Ci0g
ICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21w
b3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0
ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBhaW50
ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9Ci0K
LSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAg
aWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250
YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2NoZWR1
bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAgICBp
ZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdl
U2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHND
aGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMp
OwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9s
bChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBmcmFt
ZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3JiaWRk
ZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODEzLDMwICsyMjg1LDMzIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0
LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAg
ICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsK
LSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0
aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsK
ICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCiAgICAgaWYgKGFsbG93c0N1
cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5z
Y3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAg
ICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlz
IHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAg
Ly8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhl
IHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4cG9z
ZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJzb2x1
dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIt
PnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAgICAg
ICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94
LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0CiAg
ICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBT
byB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9z
aXRpb24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2lu
dCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4cG9z
ZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3Vu
ZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsK
ICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91
bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9u
cy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJl
Y3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9m
ZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAh
PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAgIFNj
cm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNsYW1wU2Ny
b2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91
bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgICAgICBpZiAoY2xhbXBl
ZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8IHNjcm9s
bGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xk
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAg
ICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAg
ICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVzZVNtb290aFNjcm9sbGluZyhv
cHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0
ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CiAg
ICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xs
T2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwogICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1v
dmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwogICAgICAgICAgICAgbmV3UmVjdCA9IExheW91
dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxF
eHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwpAQCAtMjg1NCw3ICsy
MzI5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlv
dXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBm
cm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2Nv
cGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChMZWdh
Y3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZp
ZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVn
YWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBl
eHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGluc2lk
ZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAgICAgICAg
ICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9j
YXRpb24oKSkpOwpAQCAtMjg3MCw4ICsyMzQ1LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lk
CiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91bGRB
bGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3BhZ2F0
ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xv
c2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9z
c0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5j
bG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBl
bmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVM
YXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFt
ZSdzIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNv
bnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0ludFJlY3QobmV3UmVjdCkp
OwogICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRl
YWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlv
bjpmaXhlZC4KQEAgLTI5MjgsMjQgKzI0MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAog
ICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNpZGVG
aXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVudENv
bXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBp
cyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBu
ZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXll
cnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2Vz
dG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkgewot
ICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAg
ICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRl
VHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9u
bHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGlu
Zy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05l
ZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAgICAg
Y29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlw
ZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2Uo
Y29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9zZVJl
Y3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25z
dCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6
OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CiAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkgJiYgaW5zaWRlRml4ZWQpIHsKQEAgLTMw
MjMsMTE1NSArMjQ4Myw5NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBv
c2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheQogICAgICAgICAvLyBJ
ZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCBkb24ndCBib3RoZXIg
dHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxpZ25tZW50cyB3aWxsIHdvcmsuCiAgICAgICAgIHNj
cm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhhdmlvcihhbGlnblkpOwogICAg
ICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRl
cikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Nj
cm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCi0gICAgICAgIC8vIElm
IHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVkIHBh
cnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0UGFy
dGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxZID0gU2Nyb2xs
QWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwotICAgIC8vIElmIHdlJ3JlIHRy
eWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMg
ZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2Vy
IHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCi0gICAg
aWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nlc3RF
ZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9zZVJl
Y3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc2Nyb2xsWSA9IFNj
cm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwotCi0gICAgLy8gR2l2ZW4gdGhl
IFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KLSAgICBMYXlvdXRVbml0IHk7
Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwp
Ci0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBT
Y3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4cG9z
ZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xs
WSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgeSA9
IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWln
aHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0gICAg
cmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5X
aW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1l
bnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1v
ZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3Jv
bGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29uc3QK
LXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRo
ZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRv
ICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQgdG8g
YWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYg
b2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBn
ZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVzaXpl
TW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5l
bGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBE
byB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUg
YmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxlbWVu
dCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8
UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1bWVu
dCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVu
dEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQg
em9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGF1
dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQu
cG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29s
dXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09mZnNl
dCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0LnNl
dFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0LnNl
dEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBMYXlv
dXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21G
YWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNpemUg
bWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8o
Y3VycmVudFNpemUpOwotICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWlu
aW11bVNpemUpOwotICAgIAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlv
dXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgp
IC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgewotICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0
aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zm
c2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAo
Y3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyht
aW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVs
ZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlzQm94
U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5n
OjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVz
aXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uu
d2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1l
bnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhl
bWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFj
dG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1h
cmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAg
fQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlz
Qm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3Rv
cjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENT
U1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpI
b3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBs
aWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVy
LT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5p
dFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0
ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRl
cmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWln
aHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVp
Z2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0K
LQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQx
MTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5
IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQot
ewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQot
U2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewot
ICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xl
OjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJl
Y3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFy
SW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRT
aXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBz
Y3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJh
clNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6
ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwg
eyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgo
KSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVp
Z2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBj
b25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCku
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAg
ICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMg
dG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJs
ZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZz
ZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7
Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgp
ID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3Ry
ZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgp
IC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0g
ICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAo
cmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXpl
LndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3Jv
bGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7
Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNl
bmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJl
bmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlz
Qm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0
KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5t
b3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygm
cmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsK
LSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Ny
b2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIo
KSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQ
b2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJl
cigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVy
TGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAg
cmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50
KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVu
dHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3Jv
bGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNv
bnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUu
d2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3Rk
OjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0K
LSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17
Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24p
OwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxi
YXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQot
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZv
cmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xh
eW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJM
YXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9u
IHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRh
dGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50
OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgp
OwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4o
cmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94
LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRS
ZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAg
IGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0
KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJh
ci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNv
bnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYg
IXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2
ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1f
aEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0g
aXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRp
Y2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0g
KGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRp
Y2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRh
bFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJ
bnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAg
ICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBz
cXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAg
ICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlm
IChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0
aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkg
LSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9p
ZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBj
b3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJh
clJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBp
ZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0
KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5t
YXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFy
c0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXpl
LmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0
OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUp
IHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAg
ICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBi
b3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhl
aWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJl
Y3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBj
b3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZv
aWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5l
clNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxD
b3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25l
c3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywg
c2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNj
cm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAg
ICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkg
ewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVj
dCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQo
Ym94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0
aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJl
Y3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UK
LSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAg
IHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRl
cmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAg
ICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBt
X3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNj
cm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJh
cigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9s
bGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9v
dCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAg
ICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2Vu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNj
cm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNT
RVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxS
ZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhh
c0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYg
ZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHls
ZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUp
Ci0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFy
KCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlciku
ZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVu
dGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQot
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFn
ZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxl
YXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+
JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFy
IDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNj
cm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+
cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBt
X2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0Zv
clN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRp
YyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2Ug
ewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNj
cm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bw
b3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFy
LT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxl
Q2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJh
cihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIp
IHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxh
c3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJi
ZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGlj
aXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVB
cmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAg
ICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRW
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ug
b3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAg
bV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXIt
PnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0g
ICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBu
ZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9z
c0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBl
YXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5j
ZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5
b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVt
ZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94
KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25j
YXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QK
LXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3Jv
bGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wg
UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVy
biBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAi
UmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAg
YnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNp
emUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ry
b3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVy
Il9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChp
c0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIv
VGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAg
ICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
c3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJh
cgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQot
aW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAg
ICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNp
emUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5l
cigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2lu
dCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250
cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxD
b3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNp
emUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNh
blJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1v
dmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAg
ICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAg
ICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAg
fQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0
RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAg
ICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJl
bmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgp
KTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29s
dXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQot
aW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5k
ZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgp
OwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1M
YXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlv
dXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVy
Ojpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5k
ZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxv
d1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQo
cm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50
IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94
LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRv
SW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmln
aW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZs
b3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAg
IHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092
ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiBy
ZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJv
eCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3Jv
bGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlz
KQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlv
bjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZs
b3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09
IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3Jv
bGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygp
OwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGlj
U2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
YXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92
ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAg
ICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3Zl
cmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNh
bE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwg
dGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAm
JiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigp
LnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVk
KGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVo
YXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBv
ciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1
dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRl
U2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQot
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykg
ewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJl
cigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJl
bnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJv
eD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0g
ICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXAp
LgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6
OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAg
IGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94
LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFn
ZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMg
Y2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZz
ZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8v
IEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBw
cm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRp
ZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52
YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRv
IHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVw
IHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVz
dCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBv
aW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hl
cmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUg
cmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVy
Zmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3Jl
IGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9p
bnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAg
ICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3Np
dGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3Qm
IGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBlbHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAwKQor
ICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2UgdGhl
IHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGln
bm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOworICAgIGVsc2UKKyAgICAgICAgc2Ny
b2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKKyAgICAv
LyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBl
eHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgorICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBh
bmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUg
Ym90dG9tLgorICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFs
aWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1heFko
KSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAgICAg
IHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKIAotICAg
IGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRp
bmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7CisgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25t
ZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Cisg
ICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJv
dHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0
KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpB
bGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVp
Z2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAgIGVsc2UKKyAgICAgICAgeSA9
IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBMYXlvdXRS
ZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwogfQogCi1ib29sIFJl
bmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAordm9pZCBSZW5kZXJMYXll
cjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKIHsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1h
ZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIEludFBvaW50IGN1cnJlbnRE
b2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93VG9D
b250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKKyAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExheW91
dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBmYWxzZSwg
eyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0Vk
Z2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTaG91bGRB
bGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWlu
dGluZ092ZXJsYXlDb250cm9scykKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVy
Zmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRo
cm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBvbiB0
b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFz
cywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ug
c2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNj
cm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNl
IHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAvLyBh
bmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNo
ZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVk
IHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAoaGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAgICAg
ICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAgICAg
ICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Ny
b2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBsb2NhbERh
bWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFp
bnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxv
Y2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZW5kZXJMYXll
ciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBp
ZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCku
dmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Ny
b2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBvaW50IGFkanVz
dGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3Jv
bGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNl
c3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0
LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBv
Y2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0g
ICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAgICAv
LyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxh
Y2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0g
ICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBt
X3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAn
eCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVy
IHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0
aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9s
bENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAK
LSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0
aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWlu
dE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpw
YWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJbnRSZWN0
IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAg
ICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRp
bnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIGlmIChtX3Njcm9sbENv
cm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBw
YWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhh
c0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9z
KTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBv
dmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBi
ZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsK
LX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3Jt
UmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYg
cmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFn
ZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0g
ICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAg
ICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigp
KTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwot
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Cisg
ICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5n
QnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0cmVh
bTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBidWlsZGVy
LmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgp
OwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3Ju
ZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29y
bmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKLSAgICAgICAg
Y29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAgICAgIGlmIChyZXNpemVD
b3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJ
bWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKLSAgICAg
ICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCBp
bWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5l
clJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVy
U2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBj
b250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7CisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNp
emVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQorTGF5b3V0VW5pdCBSZW5kZXJMYXll
cjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNS
ZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
KCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXItPnBhaW50
SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCBy
ZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVy
ICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAg
ICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2Yg
dGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8
fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAg
ICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFy
Z2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUs
IGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25h
cHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
KyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNQ
b2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogewotICAgIGlmICghY2FuUmVz
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dS
ZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAotYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXpl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYg
KHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAg
aWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBt
X3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBp
ZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewot
ICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkp
IHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAm
JiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYg
KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAg
ICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3Qo
Ym94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUo
b3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKIH0KIAotYm9vbCBS
ZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorTGF5b3V0VW5pdCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gt
PmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiB2b2lkIFJl
bmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5T3Jp
Z2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRSZWdp
b25Db250ZXh0KQpAQCAtNDE4OSwxNyArMjU5MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwK
ICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQotewotICAg
IGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRS
ZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWlu
dFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExheWVy
RmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAgICBtX2NvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9S
ZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBh
aW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIGNvbnN0
IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUpCiB7CiAg
ICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKTsKQEAgLTQyMjIsNyArMjYxMyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNs
aXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0aW9uIGZv
ciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJmbG93IG9i
amVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBibG9jayBjaGFpbiBzbyB3ZSBj
aGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcnVsZSA9
PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5ZXI7IGxh
eWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5j
b250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAm
JiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlmIChwYWlu
dEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9s
bENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBsYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkg
JiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CkBAIC00
NDI0LDcgKzI4MTUsOCBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50
aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wmCiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9yIG92
ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQogICAgIC8vIHRo
aW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQ
YWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKKyAg
ICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gIXNjcm9sbGFibGVMYXllcigp
IHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBi
b29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIoKS5mcmFt
ZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNjcm9sbGlu
Z09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29taW5nKSB7
CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRp
emVGb250cygpOwpAQCAtNDcxOSw4ICszMTExLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkK
ICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50Q29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJhcnMo
KSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgaWYg
KGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
Y3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAgICAgICBpZiAoZmlsdGVy
Q29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdtZW50
cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0aGUg
ZmlsdGVyIGJvdW5kcy4KQEAgLTUxODgsMTggKzM1ODAsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGlu
Z0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRz
KSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAgIHBhaW50T3Zl
cmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFn
bWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2Fs
UGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAgICBzbmFwcGVkSW50UmVj
dChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9y
ZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0
KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RFdmVudFJlZ2lvbkZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikKIHsKICAgICBBU1NFUlQo
bG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAgLTUyMzMsNyArMzYxMyw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91
dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJl
YS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkp
OworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXll
ciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RB
cmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU0NjQsOSArMzg0NCwxMSBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVy
LCBSZW5kZXJMYXllciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVy
KSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNpemUoKSAm
JiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRp
b24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3Vs
dChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAgICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5oaXRU
ZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxv
Y2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9zIGlz
IGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuIENoZWNrCkBAIC01
NTM5LDM1ICszOTIxLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsK
LSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92
ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9
IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXpl
clJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJv
cmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVy
KCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZ
Q29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVj
dC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJ
bnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3Ju
ZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21S
aWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsK
LQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21l
bnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJl
Y3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMu
cmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3Rz
KGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRl
c3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVu
dCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXll
ckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhp
dFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3Qg
SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0
KQogewpAQCAtNjAwOCwzNiArNDM2MSw2IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2Fs
Q2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAgICAgcmV0dXJuIGNsaXBS
ZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjphZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMo
Y29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKLXsKLSAgICBtX2Jsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9
IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKLXsKLSAgICBmb3IgKFJlbmRl
ckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0K
LSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
czsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAg
ICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZs
b3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5v
dCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKLSAgICAgICAg
cmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChM
YXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQg
Zm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWlu
dFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFn
ZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgY2FjaGVkQm91bmRp
bmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhl
IHJvb3QuCkBAIC02MzM0LDIxICs0NjU3LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9z
aXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5oYXNN
YXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFj
a2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFw
aGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6Omxh
eWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9i
YWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBSZW5k
ZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFp
bnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29tcG9z
aXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygpOwpAQCAtNjM3OSwxMSArNDY4
Nyw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3MuY29u
dGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNlKTsK
IH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9CZU9w
YXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAgaWYg
KCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dCgpKQpAQCAtNjUwNyw4ICs0ODEwLDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlU2Vs
ZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXNOb3JtYWxGbG93T25seSgpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycygpCi0g
ICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKQorICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGJvb2wgaGFzT3ZlcmxheVNj
cm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKKworICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycworICAgICAgICB8fCBjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCiAg
ICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigpLmlz
VmlkZW8oKQpAQCAtNjYyNSw3ICs0OTMyLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzVmlzaWJs
ZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlv
bnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCk7CisgICAgcmV0dXJuIGhh
c1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9v
bCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCog
cmVxdWVzdCkgY29uc3QKQEAgLTY2MzUsNyArNDk0Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omlz
VmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAg
ICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRl
clJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVy
KCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxl
TGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3Qp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY2MCwzOCArNDk2Nyw2IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJl
cXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVl
c3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNo
YW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJl
IGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBp
ZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxl
IHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgot
ICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZs
b3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgp
OwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQg
d2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9
IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYg
c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8
fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIp
KTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJh
cik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7
Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBh
cmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRj
aGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVn
IDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBv
bGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBv
dmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVk
KHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92
ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQo
dHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRh
dGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwg
aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6
OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25s
eSgpKTsKQEAgLTY3MTQsNiArNDk4OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdl
ZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAg
ICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hhbmdl
cyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRpcnR5IGJpdHMuIFRoaXMgbG9naWMgY291bGQKICAg
ICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKG9sZFN0eWxl
KSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBvbGRTdHlsZS0+dmlzaWJpbGl0
eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7CiAgICAgICAgIGlmIChvbGRT
dHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS51c2VkWkluZGV4KCkgfHwg
dmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjMsMTggKzQ5OTksMTUgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5wdXQg
dG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0eUNo
YW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgc2Nyb2xsYWJsZUxheWVyKQor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1ZWUo
KSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2
aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAgICAgICBpZiAoIW1fbWFycXVl
ZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4odGhp
cyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7Ci0gICAgfSBlbHNl
IGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7CisgICAgaWYgKHNj
cm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNyZWF0ZU9yRGVsZXRl
TWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xs
YmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KIAotICAgIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAvLyBPdmVybGF5IHNjcm9sbGJh
cnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0
byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAg
ICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NDcsMTUgKzUwMjAsMTIgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9yZWZsZWN0
aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7CiAgICAgfQotICAgIAotICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNj
cm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hC
YXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQogCiAgICAgdXBkYXRlRGVzY2Vu
ZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02Nzc2LDk4
ICs1MDQ2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewot
ICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0
VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVW
aWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAm
PSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVz
dGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2li
bGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAg
IEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNT
Y3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAg
ICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRl
ZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJl
bW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChp
c1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAg
IHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1
bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAg
ICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxp
c3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShh
ZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0g
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+
c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJT
Y3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3Jv
bGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikp
OwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMg
cGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsK
LSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Ny
b2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVu
dChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0
dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRv
IHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXIt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVu
ZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAg
ICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9y
ZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9s
bGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAg
ICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50
IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1f
cmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXpl
ci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
bGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0
cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25z
dAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBu
dWxscHRyOwpAQCAtNjk5OSw3ICs1MTc3LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRM
YXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBw
YXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJl
dHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIu
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1Ry
YW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MjQ1LDExICs1NDIz
LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRTdHJl
YW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBzdHJlYW0gPDwgIiAiOwogCi0g
ICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7Ci0gICAgc3RyZWFtIDw8ICIg
IjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAg
ICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5ib3hTY3JvbGxpbmdTY29wZSgpOworICAg
ICAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBz
dHJlYW0gPDwgIiAiOworICAgIH0KIAogICAgIG91dHB1dElkZW50KHN0cmVhbSwgZGVwdGgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGQ4MzczYWFlODE5ZDRl
Yjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQuLjA0NDFkZGFiNzJkMmFlZWI4NmMyNTQ0ZmUwMjVj
MjA4NTY0OTdlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC01
MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJl
YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQwLDIwICsxMzksMjkgQEAgc3RydWN0IFNjcm9sbFJl
Y3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBTY3JvbGxCZWhhdmlvciBiZWhhdmlvciB7IFNjcm9s
bEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90
OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7
Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFz
cyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVy
KTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJh
Y2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOworCisgICAgZW51bSBjbGFzcyBMYXllclR5
cGUgeworICAgICAgICBTdGF0aWMsCisgICAgICAgIFNjcm9sbGFibGUKKyAgICB9OwogCiAgICAg
ZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1
YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBMYXllclR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclR5cGU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Ny
b2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdDsKKwogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRn
ZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3ll
ZCgpOwpAQCAtMjIzLDYgKzIzMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11
dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBm
bGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdz
IHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNz
IENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0
eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7
CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVl
LmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93
KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDIsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVj
dCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9
CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBj
b250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsK
LSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxh
eWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
Y29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9s
bFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBB
bmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1h
dGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6
Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQg
c2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBz
Y3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Ny
b2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZv
aWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7
Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFi
bGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVy
IHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxl
QXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwot
CiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVz
LgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25z
Jik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25z
dCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7
Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0K
LSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJl
YSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAg
IFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZC
YXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEo
KSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
IGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcigp
IGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5h
bDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlv
bjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJv
b2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wg
aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRp
ZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVu
ZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5k
aWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBz
Y3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBz
Y3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9s
bGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBi
b29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUp
IGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAg
IGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93
Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAg
IHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAot
ICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXpl
TW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVy
Vmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJv
b2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNr
aW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1
NSw5ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQo
Ym9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhh
c0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAg
ZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9k
ZSkgY29uc3QKQEAgLTU3OSwxMCArNDg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlw
UmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxs
Q2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5
cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcygp
OwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0
dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wg
aGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9
CkBAIC02MzcsNiArNTQwLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdB
bmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGlu
ZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNs
aXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjAzLDYgQEAgcHVibGlj
OgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRp
b25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0g
U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQq
ID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3Zl
cmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAg
ICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBS
ZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBp
bk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVz
cGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg4LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lu
bGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRp
b24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlv
bjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
Ym9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRp
ZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhh
c1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUg
dHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwyMCAr
NzU3LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygp
OwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNl
KTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigp
IGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KICAg
ICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Ip
IHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Nj
b3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBm
b3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3Jv
bGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KLSAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAgICAgYm9vbCBwYWludHNXaXRo
VHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50KCkgfHwgaGFzQmxlbmRNb2Rl
KCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yOjpGbGF0dGVu
Q29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEgKzc3Myw2
IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBjb29y
ZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25z
dCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tn
cm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KLSAg
ICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xs
YmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFy
czsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wgcmVx
dWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE4LDggKzgwMSw2
IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvd0Fu
Y2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgdm9pZCBzaW11bGF0ZUZy
ZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJl
cXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsgfQog
CkBAIC05MzAsNyArODExLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdpb25J
bnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5vbkNv
bXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVn
aW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAogcHJp
dmF0ZToKIApAQCAtMTAxMCw5ICs4OTEsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxh
ZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAw
LAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwgMSwK
QEAgLTEwMzAsMTYgKzkwOCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7
Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8
PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAx
IDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQ
YWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJC
b3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgp
OyB9CkBAIC0xMDcyLDcgKzk0MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJP
YmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3Vu
ZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAg
ICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKLSAgICB2
b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CiAgICAgdm9p
ZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWlu
dENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRC
ZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZv
aWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwpAQCAt
MTA5OSw2NCArOTY2LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVu
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNv
bnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0
OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQp
IGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21l
bnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRy
KTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25z
dCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwot
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6
ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9p
ZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBi
b29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3Rv
ckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwMTMsNiBAQCBw
cml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBs
YXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBv
aW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAg
dm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigp
OwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29s
IGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxNywyMCArMTAy
Niw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKICAg
ICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBPdmVyZmxv
d0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAg
ICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVyIDogcmVzaXplcjsKLSAgICAg
ICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBMYXllclR5cGUgbV9sYXllclR5
cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwog
CiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDQsMTAgKzEw
NDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93TGlzdERpcnR5OiAxOwogICAg
IGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0gICAgLy8gS2VlcHMgdHJhY2sg
b2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2Fu
IGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAgIGJvb2wgbV9pblJlc2l6ZU1v
ZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9v
bCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBh
aW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1
cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTA1MSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQgdXAg
cGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUgbmVl
ZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgogICAgIGJv
b2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJhY2tp
bmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2luT3Zl
cmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsgLy8g
UmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgOiAx
OwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGVE
ZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2VuZGFu
dCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAgYm9v
bCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2ZXNB
c0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3Nyw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRS
ZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsK
LSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOwot
I2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
IDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKLSAg
ICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VOQUJM
RUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpAQCAt
MTMzOCwyNSArMTExNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVp
Z2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Ny
b2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQg
YXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0
aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAotICAg
IEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIE1hcmthYmxl
PFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAw
Pj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50
ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxp
bmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7
IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cg
dmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQv
dG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAgICAg
TGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEwICsxMTI4LDYgQEAg
cHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxp
Y2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJl
cGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0
b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xs
YmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBh
cnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJM
YXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5v
dCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYxZS4u
Y2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUzLDEzICs1Mywx
NCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBs
dWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAi
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAi
UmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAKICAgICBBU1NFUlQobV9vd25p
bmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
Y29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycygqc2Nyb2xsYWJs
ZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXllcnMoKTsKIH0KQEAgLTQyMSwx
MSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAKICAgICBUaWxlZEJhY2tpbmc6
OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmlz
aWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0gZnJh
bWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2
ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAmJiBsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVD
b3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsK
IAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292
ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFn
ZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6
Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlm
IChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkg
ewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9y
QmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENv
bnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+
c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0
UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0
b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNl
dCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3Jv
bGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXll
cigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGNvbXBvc2l0ZWRB
bmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKTsKKyAgICAgICAgcGFy
ZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9j
YXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24o
KSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBAIC0xMjg1LDcgKzEyODksOCBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5
ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXIt
PnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7CiAKICAgICAgICAgICAg
IGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICAgICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS5jbGlwRGF0YS5j
bGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgICAgIGVudHJ5LmNs
aXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAg
ICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEzOTAsNyAr
MTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlv
bigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENv
bnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29u
dGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisgICAgICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAg
ICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxh
eWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyArMTQxMSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBv
bGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRG
cm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXll
ci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAg
SW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9IG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5nZWQp
CiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7
CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldExv
Y2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAogdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQgc2Ny
b2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCkg
PT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxU
eXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMg
aGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJv
dW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAg
IHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5
ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50
cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFu
IGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xs
ZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNl
dCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVCht
X3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTExLDEy
ICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9yU2Ny
b2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNj
cm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJh
cihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkp
OwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJh
ckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhciht
X293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmICghbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVx
dWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QK
ICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5v
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFy
ID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xsYmFy
ID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5ZXIu
aG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIgPSB2
ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVyLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwxMiBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpv
bnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9s
YXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9s
bCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3du
aW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJU
KG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAgICAgICAgIGlmIChob3Jpem9u
dGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwg
SG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgICAgIGlmICh2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3Jv
bGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVy
c0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAog
CiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
aWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFycygp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhl
bCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRo
ZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJl
Y3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJl
Y3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAogICAgIGlm
IChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAg
IHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFy
LCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3du
aW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5
ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAg
ICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250
ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250
ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVM
YXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkp
OwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVT
Y3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldp
dGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92
ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsQ29udGFpbmVy
TGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAg
ICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIobV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKQotICAgICAg
ICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9vd25pbmdMYXllcik7Ci0gICAg
CisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRk
U2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIH0K
KwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMwMTAsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRS
ZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXllciAm
JiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBGbG9hdFJlY3Qg
bGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAgIGxh
eWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVu
ZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKSAtIG1f
c3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3Zl
KC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91
dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkpIC0g
bV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXAp
OwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3Jh
cAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBs
YXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdz
KTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygp
ICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLnBhaW50
TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJXaXRo
RWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCkBAIC0zMzIzLDE3
ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERl
YnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAg
cGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRl
eHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxl
TGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAg
IH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVj
dCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
ICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9
IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JS
ZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0
aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3Qo
Y2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlv
bigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJ
bnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9v
d25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRD
bGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNm
b3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgp
LnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0
OWM3ZmYzY2U2ODUyMjZhLi43NWYwYmRlZTQ5YjdlNWMyOGZjOGY2ZDRlNzY2N2RhZmYwMWQ1YjU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAog
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdE
YXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAhbGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBMYXlv
dXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRlckxh
eWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgb3ZlcmZsb3dTY3JvbGxM
YXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKSA9PSBvdmVyZmxv
d1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxvd1Njcm9sbExheWVyLnNjcm9s
bGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmJveFNj
cm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+
Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRl
TGF5ZXIpCkBAIC00NTY3LDggKzQ1NjksMTEgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQKIExh
eW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVS
ZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9y
TGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUg
YWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlmICgh
YW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXpl
KGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKHNjcm9sbGFibGVM
YXllci0+dmlzaWJsZVNpemUoKSkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAg
IH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJv
eD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00NTg4LDExICs0NTkzLDE0IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xp
cExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICps
YXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXll
cnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFja2lu
Zy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigp
LAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxh
eWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxhYmxl
TGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0ciwKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAgLTQ2MzAsOCArNDYzOCwxMCBA
QCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdO
b2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGlu
Z05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2Rl
TGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAg
ICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkg
JiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxh
eWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6Okxh
eWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkgeworICAgICAgICAgICAgQVNT
RVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQs
ICpsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1
cm4gbmV3Tm9kZUlEOwpAQCAtNDc2NywyMCArNDc3NywyMSBAQCB2b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2RlcygpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICBh
dXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKSB7CiAgICAgICAgIGlmICgm
bGF5ZXIucmVuZGVyZXIoKSA9PSAmcmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gbGF5ZXIu
Ym94U2Nyb2xsaW5nU2NvcGUoKTsKICAgICAgICAgcmV0dXJuIGxheWVyLmNvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUoKTsKICAgICB9OwogCi0gICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBtX3Jl
bmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVCht
X3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Nj
b3BlID0gbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Nj
b3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogKnNsb3dSZXBhaW50T2JqZWN0cykg
ewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVM
YXllcigpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBzY3JvbGxpbmdT
Y29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpsYXllcik7CisgICAgICAg
IGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Njb3BlKHJlbmRlcmVyLCAq
bGF5ZXItPnNjcm9sbGFibGVMYXllcigpKTsKICAgICAgICAgaWYgKHNjcm9sbGluZ1Njb3BlICE9
IHJvb3RTY3JvbGxpbmdTY29wZSkgewogICAgICAgICAgICAgYXV0byBlbmNsb3NpbmdTY3JvbGxp
bmdOb2RlSUQgPSBhc3luY1Njcm9sbGFibGVDb250YWluZXJOb2RlSUQocmVuZGVyZXIpOwogICAg
ICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJRCk7CkBAIC00ODA0LDcgKzQ4
MTUsNyBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxl
QXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5k
ZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xh
eWVyTWFwLmdldChub2RlSUQpLmdldCgpOworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xh
eWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAogdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDdh
ODViMjY5NmM2OGFhNDBkNDI4MWYzYmMyMmM2YmNkNmI4ODAwNWEuLmJmZjIxOWM0Yjc5MTExNjdi
NmM3NWExY2YwYTg2NTg4ZTE5YjY4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJH
cmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIuaCIK
ICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAy
YzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRhYWY0YTA4MTUxYThjYjFkLi4zODYxM2IyMmE1MjRhNjRj
YmIwNDIxMjU1YjMwNmIwMzJjOGVkZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9p
ZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcigpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAg
ICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1F
OiBIb29rIGluIG9wdGltaXphdGlvbiB0byBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFi
bGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNj
cm9sbGFibGU+KCp0aGlzKTsKICAgICBzZXRIYXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5p
bnNlcnRPbmx5VGhpc0xheWVyKFJlbmRlckxheWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVD
aGFuZ2UpOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBt
X2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2Fk
Y2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2YzA4MmY5YWI0ZTFhNjZlM2Jk
YmM3ZWJkMzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAgICBM
YXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVuY2xv
c2luZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiArNDgsOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJlbmRl
ckxheWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KIAorICAgIFdF
QkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29u
c3Q7CisKICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzYx
ZGJmNzdkN2M4ZGYzZjQ4YjE5NzdhZGEwY2M1NDkyYThlOTFiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKQEAgLTAs
MCArMSwyMDAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0
c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3RoZXIgY29udHJpYnV0
b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1PgorICogICBEYXZp
ZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFuIEJpZXNpbmdl
ciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5j
b20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1n
aWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29tPgorICogICBCb3Jp
cyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0
ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0
aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9u
IDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwi
KSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3Vu
ZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIp
LCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUK
KyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFs
bG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0
ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BM
KSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0
aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2Ug
YW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwg
YXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lv
bnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5n
U2NvcGUoKQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwor
ICAgIHJldHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hF
QVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCitSZW5kZXJMYXllclNjcm9s
bGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5k
ZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXllcihyZW5kZXJlckxheWVyTW9k
ZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgLCBtX2lu
UmVzaXplTW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisg
ICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQoreworICAg
IG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKwor
ICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3Bl
ID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisKKyAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7CisgICAgICAg
IC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhl
ciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRp
b24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFt
X3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5z
ZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGVsZW1lbnQtPnNl
dFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICB9Cit9CisKK1JlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpCit7CisgICAgaWYgKGlu
UmVzaXplTW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
cmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFi
bGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgaWYgKEVsZW1l
bnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJv
eVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAg
IGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK0ludFNpemUg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0
aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJ
bnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sK
KyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAg
aWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRz
U2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUo
KS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkp
CisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhl
aWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNT
aXplOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25z
RGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsK
KyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgp
OworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5p
bmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4K
KyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29u
dGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2Vy
ID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRS
ZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwg
LTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVs
dGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisg
ICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1
c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRT
aXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBh
blNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0
byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdp
bmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBp
cyBpbmNvaGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsK
KyAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZp
b3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlv
biA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtu
b3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0
aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3
ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsK
KyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJh
ZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNp
dmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisKKy8vIEZJWE1FOiB1bmlmeSB3
aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBT
Y3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFs
c2U7CisgICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxp
bmVDbGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9u
ZSgpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xs
T2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxl
ZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNj
cm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAg
ICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNj
cm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8o
KSAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBz
a2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNj
cm9sbGVkQXJlYSk7CisKKyAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVy
IHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAg
ICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRv
Y3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJl
YSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xl
IHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVu
dD8gCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODIzNworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFT
WU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwg
KnN0YXRpY19jYXN0PFJlbmRlckxheWVyKj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUgIiA8PCBwb3NpdGlvbik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBv
c2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxD
bGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNl
dCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAg
IGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxU
eXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAo
IXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xh
bXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsK
KyAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBl
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlw
ZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xs
VHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zm
c2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhh
dmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9y
KCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+
c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdp
dGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBl
KHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9z
aXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9s
bFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xs
IGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
cG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBl
LCBjbGFtcGluZyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQorewor
ICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVk
KCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gV1RGOjpudWxsb3B0OworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVz
KSBjb25zdAoreworICAgIGF1dG8gaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSA9IFtdKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllcikgeworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQm94PihsYXllci5y
ZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpLmNhbkJl
U2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOworICAgIH07CisKKyAgICBpZiAoaW5jbHVk
ZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYgJiYgaXNDb25zaWRlcmVkU2Ny
b2xsYWJsZSgqdGhpcykpCisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZSo+KHRoaXMpOworICAgIAorICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7
IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jv
c3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxl
KCpuZXh0TGF5ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV4dExheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGlmIChyZWFzb24gPT0gQXZhaWxh
YmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJs
b2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Cisg
ICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkg
JiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3Zl
cmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9s
bEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCku
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGlj
aXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGlu
ZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4g
V2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlm
IChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJh
cikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQor
eworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX3ZCYXIgPSBj
cmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJm
bG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxh
YmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxF
bGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95
aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRv
IGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mg
c3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsK
KyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCitz
dGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
cmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290
ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNo
YWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAg
ICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJU
KHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5k
ZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBib29sIGhhc0N1
c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93
bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQ
c2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisg
ICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0
aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxl
bWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVO
YXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6
UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0
aW9uKTsKKyAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAg
ICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgp
LndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNl
Tm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Ny
b2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxS
ZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3Jv
bGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQor
CitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHls
ZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEo
KSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisKKyAgICByZXR1
cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgcmV0dXJu
IHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXll
cigpICYmIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmlzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgp
OworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBw
b3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9z
aW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJl
bmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMs
ICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5z
dHlsZSgpKTsKK30KKyNlbmRpZgorCisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3Jt
VG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVk
IHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktp
dC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZl
bnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2
b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgp
LmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXll
cjo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5k
T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xs
KCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5j
ZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIHBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlm
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QKK3sKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIoKS5zZXR0
aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBp
c1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVj
dCgpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9M
TElOR19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYm
IChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRl
cmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1f
dkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNj
cm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8
ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8
ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVy
biBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Cit7
CisgICAgaWYgKCFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQorewor
ICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisK
KyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAgIGlmIChyZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVy
LmNvbnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5k
IHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZC
YXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFs
U2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0
U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2Fs
UG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpLnJlc2l6ZXI7CisgICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigp
IDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAt
IHJlc2l6ZUNvcm5lcjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3Zl
cmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJs
YXlDb250cm9scykKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92
ZXJmbG93LgorICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3Mg
dGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAorICAgIC8vIG9u
IHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBw
YXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3
ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkg
c2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1
c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAorICAgIC8v
IGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNh
Y2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5l
ZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmICho
YXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAg
ICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAg
ICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBz
Y3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2Fs
RGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1w
YWludE9mZnNldCk7CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3Qo
bG9jYWxEYW1nZVJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxh
eWVyKiBwYWludGluZ1Jvb3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAg
IGlmICghcGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIo
KS52aWV3KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
cGFpbnRpbmdSb290LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBw
YWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAg
aWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0
ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Ny
b2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUg
d2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4g
bW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3Jv
bGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVt
ZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBh
aW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJz
IGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAh
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29u
dGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwor
CisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Ny
b2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRn
ZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFp
bnRPZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIAorICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxh
c3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50
UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3Qo
KTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0Lmlu
dGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0
LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5l
clN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFp
bnRPZmZzZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFy
cywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBp
ZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KQoreworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpO
b25lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXpl
cjsKKyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVz
aXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBk
YXRlUmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwg
cGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisK
KyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBp
ZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxs
IGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBp
ZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAg
ICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJn
ZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUo
TGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWln
aHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50
OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2Vy
Q29ybmVyKSk7CisgICAgfQorfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2Rl
IChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNj
cm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3Vy
ZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBz
dHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzU5NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAo
IWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKKyAg
ICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBw
b3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Ny
b2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbiku
CisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxk
IG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAg
ICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBp
bnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisg
ICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJv
dW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAg
ICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisg
ICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAg
ICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworI2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0
KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisg
ICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZz
ZXQoKSkpOworCisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIHNldE5lZWRzQ29t
cG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29u
ZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCisgICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7
CisKKyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0Cit7CisgICAg
Ly8gV2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVy
IGhhdmUKKyAgICAvLyBoYXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGlj
aXRseSIgY2xpcCB0aGVpciBjb250ZW50cywgc28KKyAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJl
c2l6aW5nIHRoZW0gYWxzby4KKyAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkgfHwgcmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXpl
JiBvbGRPZmZzZXQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9u
IGdlbmVyYXRlZCBjb250ZW50IGJ1dCBpcyBub3QgcmlnaHQgbm93LgorICAgIGlmICghaW5SZXNp
emVNb2RlKCkgfHwgIWNhblJlc2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXIt
PmVsZW1lbnQoKS0+cmVuZGVyZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMu
IERvIHRoZXkgbWF0dGVyIGhlcmU/CisgICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBi
ZSBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRoZW0gZXhwbGljaXRseS4KKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KGVsZW1lbnQtPnJlbmRlcmVyKCkpOworCisgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2
ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9h
dCB6b29tRmFjdG9yID0gcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworCisgICAg
YXV0byBhYnNvbHV0ZVBvaW50ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2
dC5wb3NpdGlvbigpKTsKKyAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJz
b2x1dGVUb0NvbnRlbnRzKGFic29sdXRlUG9pbnQpKTsKKworICAgIExheW91dFNpemUgbmV3T2Zm
c2V0ID0gb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICBuZXdPZmZzZXQu
c2V0V2lkdGgobmV3T2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKKyAgICBuZXdPZmZzZXQu
c2V0SGVpZ2h0KG5ld09mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIAorICAgIExh
eW91dFNpemUgY3VycmVudFNpemUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9v
bUZhY3RvciwgcmVuZGVyZXItPmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgTGF5b3V0U2l6
ZSBtaW5pbXVtU2l6ZSA9IGVsZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtU
byhjdXJyZW50U2l6ZSk7CisgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyht
aW5pbXVtU2l6ZSk7CisgICAgCisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExh
eW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CisgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0Lndp
ZHRoKCkpOworICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRP
ZmZzZXQud2lkdGgoKSk7CisgICAgfQorICAgIAorICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9
IChjdXJyZW50U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRv
KG1pbmltdW1TaXplKSAtIGN1cnJlbnRTaXplOworCisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNC
b3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXpp
bmc6OkJvcmRlckJveDsKKworICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5y
ZXNpemUoKTsKKyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5j
ZS53aWR0aCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxl
bWVudCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0
aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21G
YWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+
bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAg
ICB9CisgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAo
aXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQ
YWRkaW5nRXh0ZW50KCkpOworICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFj
dG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwg
Q1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6
Okhvcml6b250YWwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgeworICAgICAgICBpZiAoaXM8SFRN
TEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGlt
cGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVy
ZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
ICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NV
bml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWln
aHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVu
ZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZUhl
aWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VI
ZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
fQorCisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRSAoUmFkYXIg
NDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nh
cnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgorfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93
U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zv
cm1zKTsKKyAgICBpZiAodGhpcyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAg
ICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsK
KworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMg
b2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5W
aWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxv
d0NsaXAgZmxhZ3M/CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0
cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NF
UlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxp
bmcsICJSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1
bWVudFNjcm9sbCIpOworCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJh
bnNmb3Jtcyk7CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlN
YXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKK3sKKyAgICBtX2Jsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcykpOworfQorCitzdGF0
aWMgdm9pZCByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKFJlbmRlckxh
eWVyKiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJz
dENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKK3sKKyAgICBtX2Jsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKKyAgICByZWN1cnNpdmVseUNsZWFyQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKHRoaXMpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVJl
cGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAo
UmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMo
KQoreworICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAg
ICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsK
KyAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAg
IHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dD
bGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgorICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVj
dC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlv
dXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9y
LgorICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3Zl
cmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJ
bmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWlu
dEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5
ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5
U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZh
bHNlOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1f
YmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitH
cmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBu
dWxscHRyOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1h
ZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygp
LT5oYXNTY3JvbGxpbmdMYXllcigpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlk
IGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVz
ZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VD
b29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwor
fQorCitTdHJpbmcgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKwor
c3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cg
PSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5
bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUu
aGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92
ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0
aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJm
bG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/
IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxv
d1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0
eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9
PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdl
KGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBi
b3ggY29uY2VwdC4KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICgh
Ym94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhl
IHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAg
aWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1go
KTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisK
KyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRl
ckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMg
YWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxT
Y3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092
ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNB
dXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0
eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwor
ICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKwor
ICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBh
bHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5n
IHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5
ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0
eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJm
bG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1
ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5
bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZs
b3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVl
KTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNj
cm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBh
cnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFy
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0
aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZs
b3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyBy
ZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2Fi
bGUuCisgICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCku
c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxl
ZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAg
ICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Ny
b2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBz
Y3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhh
dmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJm
bG93KTsKKyAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJh
cigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAg
IGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAg
ICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7
CisgICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigp
KQorICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxv
dyk7CisKKyAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5k
ZXJlcigpLnJlcGFpbnQoKTsKKworICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxh
eW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2Vk
KGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hh
bmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91
dCgpOworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFy
ZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQt
PmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNo
aWxkKCpyZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5k
IHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNs
aWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQg
cGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9o
QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsK
KyAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUu
d2lkdGgoKSk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhl
aWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdl
U3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFy
LT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAg
ICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhl
aWdodCgpKTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJMYXllciogbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1h
cCwgT3B0aW9uU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0g
bGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoY2hpbGQsIGdl
b21ldHJ5TWFwLCBmbGFncyk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4g
ZmxhZ3MpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRo
ZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQorICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBz
dGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgorICAg
IHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOworCisgICAgLy8gSWYgd2UgaGF2ZSBu
byB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5v
IHBvaW50IHJlY29tcHV0aW5nCisgICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJl
IGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KKyAg
ICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgorICAgIGlmICghbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Cisg
ICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNl
c3Rvcik7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3Is
IEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkp
CisgICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
Lmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQorICAgICAgICBmbGFncy5hZGQoSGFz
U2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7CisKKyAgICBpZiAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXApOworICAgIAorICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9
IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBm
bGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzVmlz
dWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKKyAgICBib29sIHNob3VsZFB1c2hB
bmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0
cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOworICAgIGlmIChzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKKworICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJl
Y3RzKSB7CisgICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFp
bnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCisgICAgICAgIGlmIChpc1Zp
c3VhbGx5RW1wdHkpCisgICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOworICAgICAgICBl
bHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ug
d2FsayBkb3duIHRoZSB0cmVlLgorICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5k
ZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOworICAgIH0gZWxzZSBp
ZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAg
ICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZs
aXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNp
dGlvbnMgZnJvbQorICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRo
aXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRo
ZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCisgICAg
ICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KKyAgICAgICAg
QVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCku
cmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7
CisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCBy
ZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigp
Lm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
KSk7CisgICAgfQorCisgICAgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsKHRoaXMsIGdlb21ldHJ5TWFwLCBmbGFncyk7ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgdXBk
YXRlIG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRv
ZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgpCisgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRl
clJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIg
cG9zaXRpb24gd2FzCisgICAgLy8gdXBkYXRlZCBhYm92ZS4KKworICAgIGlmIChtX21hcnF1ZWUp
IHsKKyAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb247CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVl
OworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAgICBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cisg
ICAgfQorCisgICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0
cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7CisKKyAgICByZW5kZXJlcigp
LmRvY3VtZW50KCkubWFya2VycygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKK30K
KworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3JvbGxPZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNj
cm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9m
ZnNldCgpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dD
b250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2Fs
UGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZy
YWdtZW50cykgeworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgICAgICBw
YWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9p
bnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkg
KyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICAgICAgc25hcHBl
ZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVu
ZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBw
cm9jZXNzLgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlm
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhp
dFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQm
IHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBz
bmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJl
Y3QoKSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
YXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJv
dW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6
ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAt
IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVj
dCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVm
dCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXpl
KCkgfTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9
IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVz
aXplclJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdt
ZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdt
ZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6
ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZy
YWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJl
Y3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsK
KyAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0
aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7
CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxT
aXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkp
KTsKKyAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20o
KSAtIG92ZXJmbG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAo
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3Jv
bGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQg
c2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5i
b3JkZXJUb3AoKSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVm
dE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAg
ICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsK
KyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKKworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRl
ckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsK
KyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAg
ICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9j
dXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVy
KCkuaXNCb3goKSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOwor
fQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsK
K30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJS
ZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICBy
ZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRv
Q29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAor
eworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsK
KyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4g
cmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0
IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9
IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJh
cikpOworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJv
bVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQ
b2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVy
KCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xs
YmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNj
cm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5n
Tm9kZUlEIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sK
KyAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9s
ZTo6U2Nyb2xsaW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2li
bGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFy
cyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAor
eworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250
cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAg
ICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRv
IHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQ
b3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJT
cGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxi
YXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xs
YWJsZVJlZ2lvbnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJ
bnRTaXplIHN0cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQo
KSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0
IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigp
KTsKKyAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgp
OworICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWln
aHQoc2Nyb2xsT2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQo
KSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChy
ZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Ny
b2xsT2Zmc2V0LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0
LngoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNl
dC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAg
c3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAg
cmV0dXJuIEludFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGU6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVy
biByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxF
dmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVy
biByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFy
ZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBy
ZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1
ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3Jv
bGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQo
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dy
ZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3Jv
bGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNj
cm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblBy
b2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0
b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRv
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01v
Y2tTY3JvbGxBbmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9n
TW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7
CisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAi
ICsgbWVzc2FnZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVy
KCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVy
ZXIoKS5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlm
IC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsK
KworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xs
UG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9
PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhl
eSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmICht
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qg
Y2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFz
b25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3Jv
bGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAg
U2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3Np
dGlvbik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7Cisg
ICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsK
KyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAg
ICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZz
ZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAg
c2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0
WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAK
KyAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKKyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxU
bygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1
cmUuCisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0
byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBp
ZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAg
IHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRl
Q29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBS
ZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhl
IHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBs
YXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVw
ZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVW
aWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAg
Ly8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxh
eWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2No
ZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0
aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGlu
ZyBsYXllcgorICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlv
bnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAor
ICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBv
c2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAg
ICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFm
ZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBi
ZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBh
IGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAg
ICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2lu
Z0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBw
YXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRh
dGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlz
OjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8v
IFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwor
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisg
ICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91
dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3Qg
OiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWlu
ZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1
YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29s
dXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRs
ZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYg
KHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tp
bmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFj
a2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAv
LyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJl
cXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIo
cmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhl
IHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCog
ZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVu
dCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Ny
b2xsc092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xs
T2Zmc2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2Vk
KCk7CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpCit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdM
YXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRl
ZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAg
ICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRo
ZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFj
a2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAg
ICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3Np
dG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNv
bXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBs
YXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAg
ICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9y
KCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9s
bCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0
aW9uKCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICBy
ZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Cisg
ICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJl
cigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zp
c2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCkt
PnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3Zl
cmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBm
YWxzZTsKKyAgICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJh
bWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Nj
cm9sbGFibGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewor
ICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Cisg
ICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRo
aXMpOworICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0K
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkg
eworICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3Vj
aCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdl
IGJlY2FtZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMg
YSB0b3VjaCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYg
b2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVz
aXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKwor
ICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShv
ZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBt
X2hCYXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisK
KyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFt
ZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAg
IG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIFJlbmRl
ckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIo
KSk7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0
dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFy
Q29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYg
KCFjb3JuZXIpIHsKKyAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRv
Y3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJl
ciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRp
YWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5
bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
bGVhclNjcm9sbENvcm5lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9z
Y3JvbGxDb3JuZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlUmVzaXplclN0eWxlKCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJl
ciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8gcmVzaXplciA9
IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNo
ZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5
bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVz
aXplcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsK
KyAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4o
cmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAg
IG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9yZXNpemVyLT5p
bml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHls
ZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
bGVhclJlc2l6ZXIoKQoreworICAgIGlmICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0
cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJ
bWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJD
b3JuZXJSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAg
RmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICBy
ZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5l
clJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVy
UmVzaXplclNpemUuc2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAg
ICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAg
Y29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAg
ICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJD
b3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJS
ZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUu
aGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsK
KyAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJS
ZXNpemVyU2l6ZSkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1
cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5
b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXpl
clNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwg
aW1hZ2VSZWN0KTsKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxvd0NvbnRyb2xS
ZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJl
bmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xs
YmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVj
dEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRv
IGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7
CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZl
Tm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJh
ci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJl
c2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAg
IGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNj
cm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6
ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxi
YXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUg
PSBJbnRTaXplIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDog
dmVydGljYWxTY3JvbGxiYXJXaWR0aAorICAgICAgICB9OworICAgIH0KKworICAgIE92ZXJmbG93
Q29udHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBi
YXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVj
dC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KTsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVj
dC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53
aWR0aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xs
YmFyID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8g
YmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChw
bGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRX
aWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAg
YmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1
bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVy
UmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGlj
YWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5l
ciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9t
TGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRp
b25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Cisg
ICAgfTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5z
Y3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNp
emVyKSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBy
ZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29y
bmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3Qm
IGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2Fs
UmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTWFycXVlZSgpCit7CisgICAgaWYgKG1f
bWFycXVlZSkgeworICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2Nv
cGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgorICAgICAgICBib29sIG9s
ZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAg
ICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVl
ZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7Cisg
ICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5t
YXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5p
c0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVl
ID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51
cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAg
bV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1
YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBs
b2NhbFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0
LgorICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OworICAgIGlmIChyZW5kZXJlcigp
LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5n
QW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7Cisg
ICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBvc2l0aW9uZWRQ
YXJlbnQtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25l
ZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIn
cyBzY3JvbGwgb2Zmc2V0LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxh
YmxlLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQ
b3NpdGlvbigpKTsKKworICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9z
aXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAg
TGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJl
bnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5l
KCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2Nh
bFBvaW50ICs9IG9mZnNldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAg
ICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1
dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExh
eWVyU2Nyb2xsYWJsZSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAg
ICAgICAgaWYgKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0Ns
aXAoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRM
YXllclNjcm9sbGFibGUtPnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBBU1NFUlQo
cGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAg
ICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVu
dHNTY3JvbGxpbmdTY29wZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3Qg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVyID0gcGFyZW50TGF5ZXItPnBhcmVudCgpOworICAg
ICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdMYXllclNjcm9s
bGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgd2hpbGUgKGVuY2xvc2luZ0xheWVyKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdM
YXllci0+c2Nyb2xsYWJsZUxheWVyKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBlbmNsb3NpbmdMYXllciA9IGVuY2xvc2luZ0xheWVyLT5wYXJlbnQoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJs
ZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAgICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdT
Y29wZSA9IGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxp
bmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29w
ZSkKKyAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdT
Y29wZSgpOworICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sKKyAgICAvLyBG
SVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxi
YXJzIChhbmQgdmljZSB2ZXJzYSkuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5z
dHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hh
bmdlZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVkNmQ3NzE4MDcw
NzQwMDQ2ZDIxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21t
dW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAg
IFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9uIDxk
YmFyb25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmllc2lu
Z2VyQHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAqICAg
Um9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4uZGU+
CisgKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJza3kg
PGJ6YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5
LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcwor
ICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3Vu
ZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6
Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNo
IGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGlj
YWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9m
IHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9u
ZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3Qg
dG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJv
dmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90
aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2Fz
ZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwg
YSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBh
bnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCit1c2luZyBTY3JvbGxpbmdTY29wZSA9
IHVpbnQ2NF90OworCitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGUgZmluYWwKKyAgICA6IHB1
YmxpYyBSZW5kZXJMYXllcgorICAgICwgcHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9s
bGFibGUpOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOworCisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJM
YXllclNjcm9sbGFibGUoKTsKKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7
IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBj
b25zdCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAg
IEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAg
IGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsK
KworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAv
LyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVy
Zmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBib29sIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkKSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zm
c2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0
aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBz
Y3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRl
ZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1
c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNj
cm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGlu
Zzo6VW5jbGFtcGVkKTsgfQorCisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
T3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9z
aW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0
dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhl
IEZyYW1lVmlldyBhcyBhIFNjcm9sbGFibGVBcmVhLgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVC
b3VuZGFyaWVzKSBjb25zdDsKKworICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2Vk
KEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOworCisgICAgYm9vbCBzY3JvbGxzT3Zl
cmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3co
KSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7
CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJh
cjsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lk
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3Jv
bGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9v
bCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
IGZpbmFsOworCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCisgICAgU2Nyb2xsUG9z
aXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0
aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJs
ZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29s
IGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAg
ICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24g
PSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWly
ZXNSZWNvbmNpbGlhdGlvbjsgfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxh
dGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3Jv
bGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlk
VXBkYXRlU2Nyb2xsKCkgZmluYWw7CisjZW5kaWYKKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVu
IHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQg
d2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wg
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworCisgICAgaW50IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBi
b29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7Cisg
ICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50
UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZs
b3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7Cisg
ICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2lu
dCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCk7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisg
ICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEpOworCisgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKKyAgICB2b2lk
IHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7Cisg
ICAgYm9vbCBpblJlc2l6ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQor
ICAgIHZvaWQgc2V0SW5SZXNpemVNb2RlKGJvb2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0K
KworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Cisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAg
IHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKKyAg
ICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgdm9pZCByZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRy
KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJv
b2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYK
KworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0
IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICAv
LyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29t
ZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KKyAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJl
dHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+
IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7IH0KKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNv
bnN0OworCisgICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0
Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1f
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAg
ICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKTsgfQorCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5h
bDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91
dCgpOworCisgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7Cisg
ICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwK
KyAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAx
LAorICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8
IDIsCisgICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMywKKyAgICB9OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChS
ZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsRmxhZz4gPSB7IH0pOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJv
bHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZs
b3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAg
IGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICBib29sIGhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQg
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCk7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UK
KyAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRS
ZWN0JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxD
b3JuZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQ
b2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
JiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9p
bnQmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29u
c3QgZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2li
bGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZp
b3IpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRS
ZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxw
dHIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VU
ZXN0aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBi
b29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJv
b2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNj
cm9sbGFibGVBcmVhLgorICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsK
KyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsgIAorCisgICAg
SW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAgICB2
b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAgdm9p
ZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Cisg
ICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOwor
CisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93
Q29udHJvbFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAg
ICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENv
cm5lcjsKKyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENv
cm5lck9yUmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
IXNjcm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAg
ICB9CisgICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29u
c3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgYm9v
bCB1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQ
b3NpdGlvbnNGbGFnPiogPSBudWxscHRyKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBv
c2l0aW9uc0ZsYWc+KTsKKworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0
cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5z
cGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRl
ckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50Rm9y
ZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4
dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJh
bnNwYXJlbmN5LCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OworCisgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKKyAgICB2b2lk
IHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJl
bmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFp
bnRMYXllckZsYWc+LCBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91
dFNpemUoKSk7CisKKyAgICBib29sIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBo
aWNzQ29udGV4dCYsIGJvb2wmIGRpZFF1YW50aXplRm9udHMpOworI2VuZGlmCisKKyAgICB2b2lk
IHVwZGF0ZU1hcnF1ZWUoKTsKKyAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVk
KCk7CisgICAgdm9pZCBzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3Bl
cyhMYXlvdXRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJTdHls
ZSgpOworCitwcml2YXRlOgorICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVy
IGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBz
dGFydCBhbmQgc3RvcC4KKyAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKKyAgICBib29sIG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0
IDogMTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9v
bCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5k
aWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRp
ZgorCisgICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7
CisgICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9v
bCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG1f
c2Nyb2xsUG9zaXRpb247CisgICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xs
ZWQgYXJlYS4KKyAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKKworICAgIC8vIEZvciBsYXllcnMg
d2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAg
SW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgTWFya2FibGU8
U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+
PiBtX2JveFNjcm9sbGluZ1Njb3BlOworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRl
Z3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsg
Ly8gVXNlZCBmb3IgPG1hcnF1ZWU+LgorCisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1
c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3Jv
bGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFy
UGFydD4gbV9yZXNpemVyOworCisgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
czsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OlJlbmRlckxheWVyJiBsYXllcikgeyByZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkgPT0gV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CmluZGV4IDdlOWYzODMyZDM2ZWZkMTkxM2NmNzM5NzAxMWViYjNkMjE5NDhlMjQuLmU0NTZjNmM4
YTU1ODMyMDRmNjNhZWZiNjhlOGJjMDMwYjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2Rl
UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg3OSwxMCArODc5LDkgQEAg
Ym9vbCBSZW5kZXJMaXN0Qm94Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb24KIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94Ojpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiB7CiAgICAgYXV0byogbGF5ZXIgPSBlbmNs
b3NpbmdMYXllcigpOwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Ny
b2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5k
ZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEs
MTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkK
IAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigp
LT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgYXV0byogbGF5
ZXIgPSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBsYXllci0+c2Ny
b2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsK
IH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJv
b2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmlu
ZGV4IDc2ZTIzZTRkMDk5NmU2YmZiZTQwYTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFiYTVhNjAyMWU4
ZDIxM2FiZDQyNGU3ZWVmNTIzODRiZjQwMTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1ZWU6OlJlbmRl
ck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQorUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVl
ZShSZW5kZXJMYXllclNjcm9sbGFibGUqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAg
ICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKaW5kZXggMWM3ODg0OTVlMGU4ODU3NWU4
MGJmOTMwOGEyZjQ5NGZiNGE2MjhkNS4uMDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2Njg1NDUyYzQ3
Yjk4MjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCkBAIC00
OSwxMyArNDksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJMYXll
cjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIAogLy8gVGhpcyBjbGFzcyBoYW5kbGVz
IHRoZSBhdXRvLXNjcm9sbGluZyBmb3IgPG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJNYXJxdWVlIGZp
bmFsIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJNYXJxdWVlKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5k
ZXJMYXllciopOworICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlKik7CiAgICAgflJlbmRlck1hcnF1ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkg
Y29uc3Q7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHRpbWVyRmlyZWQo
KTsKIAotICAgIFJlbmRlckxheWVyKiBtX2xheWVyOworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSogbV9sYXllcjsKICAgICBUaW1lciBtX3RpbWVyOwogICAgIGludCBtX2N1cnJlbnRMb29wIHsg
MCB9OwogICAgIGludCBtX3RvdGFsTG9vcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKaW5kZXggNzExM2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3Nzli
MTJmOC4uOTU3NTQxYTZiZTgxZjFjMGM2Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNz
IFJlbmRlck9iamVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VX
ZWFrUHRyPFJlbmRlck9iamVjCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5
ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1YmxpYzoKICAg
ICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIg
bm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQg
YXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNjI2
MGE4MTU3OWY1ODRmNThjYzQwZjdjZTA5MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUyYTIyMmJiZDM4
NWM4YjZkM2M4OTZkNjJkMjRjMDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CkBAIC00MDAsMTcgKzQwMCwyMiBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bAogICAgIFJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAm
JiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVy
ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3
aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoq
IHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9s
bChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJUZXh0Q29u
dHJvbElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigp
OworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAg
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rp
b24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OmxvZ2lj
YWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
aW5kZXggZTA1NjBkN2E1MmE5NTI2NGQ2YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4uY2JjODljZDM4
MmJjYjlhM2UyZjdiMmYzNjc1YmVmZjExOWM2YjI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAj
aW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5LDE1ICs1OTks
MTYgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAi
IDw8IGFkanVzdGVkQ2xpcFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngo
KSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgp
LngoKTsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAg
aWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNs
aWVudFdpZHRoKCkpICE9IGxheWVyLnNjcm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbFdpZHRoICIgPDwgbGF5ZXIuc2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVy
LnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKSAhPSBsYXllci5zY3JvbGxIZWlnaHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xs
SGVpZ2h0ICIgPDwgbGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CisgICAgaWYgKGxheWVyLnJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAg
ICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gKmxheWVyLnNjcm9sbGFibGVMYXllcigpOworICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS54KCk7
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgp
LnkoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIu
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci5zY3JvbGxXaWR0
aCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXll
ci5zY3JvbGxXaWR0aCgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRU
b0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IHNjcm9sbGFibGVMYXll
ci5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwg
c2Nyb2xsYWJsZUxheWVyLnNjcm9sbEhlaWdodCgpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICAg
ICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCk7CiAgICAgICAgIGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5o
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCmluZGV4IDE3MjQ4Y2RhMzRhYTZiNmE3MTk2ZjdmMDA2ZjIwODVmYTlhYjQyNmMu
LjM0NzA2ZDY2ZWUwMDMzNTMwMWVhMDZkMTAyNTQyMTU3NzM2NjhlYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtMzI5LDggKzMyOSw4IEBAIHZvaWQg
UmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNu
YXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
KTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkK
LSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5k
ZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlm
IChoYXNMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5j
YW5SZXNpemUoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50UmVzaXplcihwYWlu
dEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBh
aW50SW5mby5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVz
dWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmlu
ZGV4IGMwNTNhNGRkYTIwMDhlZmQ3YTY2ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgyYjliZTRhNzBh
ZTk3ZDg1ZjZjOTFkMjQxM2NlNmJiZjc4MGU3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKQEAgLTE1NSw2ICsxNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE5MDYsNyArMTkwNyw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBl
bGVtZW50LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxh
YmxlQXJlYSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAg
IHNjcm9sbGFibGVBcmVhID0gYm94LnNjcm9sbGFibGVMYXllcigpOwogICAgIH0KICAgICAKICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjkwMSw3ICsyOTAyLDcgQEAgRXhjZXB0aW9uT3I8
U2Nyb2xsYWJsZUFyZWEqPiBJbnRlcm5hbHM6OnNjcm9sbGFibGVBcmVhRm9yTm9kZShOb2RlKiBu
b2RlKSBjb25zdAogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRl
ckJveCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
Qm94LmxheWVyKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5zY3Jv
bGxhYmxlTGF5ZXIoKTsKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWROb2RlVHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5k
ZXggYmY2OGE3MTQ1ZGE4OThlZDRlN2NlNzRlNjE1N2YwMGJkNzBmN2E2My4uYTRlNzYzYjQ1ODky
Yjk5MGIzM2M2NjM4ZDlkMDJmNjkyMGI4ZjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1By
b2dyZXNzVHJhY2tlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KQEAgLTIwMzUsMTAgKzIwMzUsMTIgQEAgYm9v
bCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICAgICAgSW50U2l6
ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRhWCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2Nh
bGVGYWN0b3IpOwogCi0gICAgICAgIFJlbmRlckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxs
cHRyOworICAgICAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllciA9IG51
bGxwdHI7CiAgICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXROb2RlICYmIG1fZ2VzdHVyZVRhcmdl
dE5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2Vz
dHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7
CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406558</attachid>
            <date>2020-08-13 16:49:06 -0700</date>
            <delta_ts>2020-08-14 00:59:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200814014904.patch</filename>
            <type>text/plain</type>
            <size>327188</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGQxMTZiMDU3MzI4NjNh
OGM2Y2FmMGIwMWI5MDUzZTIxOWU5OWZlYi4uZWZhNGExZTU4NzQ1YzlhMWY0YzVmZjFmZGVhMDBl
ZjY2YTNjMjEzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wOC0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5j
aHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNjcm9s
bGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJvbVBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQnlS
ZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNv
bnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJD
b3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRh
dGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNPdmVy
Zmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3Zl
cmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdh
cHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBhaW50Qmxv
Y2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXll
ckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2ZWFs
QmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVSZXF1
aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0aWNT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAgIChX
ZWJDb3JlOjpyZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0aWNh
bE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZUhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENvcm5l
clZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFuZ0Ft
b3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VV
cGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9sbENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVJl
c2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
ZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTWFy
cXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9y
RGVsZXRlTWFycXVlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJT
dHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFy
cXVlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11
bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTA4
LTEzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBQb2NrZXQgQ2l0
eSBnYW1lIHBsYXkgYXJlYSBpcyBibGFuayAoV2ViR0wgaXMgYnJva2VuIGluIENhdGFseXN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNmNzRmMmUzZThh
YmU5ZmM5OGM1NTA2MjMuLjc5YTA4MmE1N2VlZWI4ZmYzMzRlMmU3Mzk0NGE4OGE4NmQ1MTU1YWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0x
MyAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIg
aW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6IFVzZSBSZW5kZXJMYXllcjo6
c2Nyb2xsYWJsZUxheWVyKCkuCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNl
cyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggYTZjYTU0MTBjNDFhZmZlYjFi
YjVlZDEwNmE2YWQxOTNiM2JhZjM3OC4uYzJmNzNiYjJjOWRkN2UyYzcxOTljNDU1MDQxMDU0M2U4
ZmI1MzE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzkxLDYgKzEzOTEsNyBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGUuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVu
ZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKaW5kZXggOWRlZjE2ZmUzYjQ1MTY1NGE5MTg2NTUyYjg0MjcwMzIzMDBhNmY1Ni4uYzUy
NGQyODFmMTg5YTdiM2Q2NmI1YmM5NmVhMDk5MGQ1YWJlOWM5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAg
LTIxMjcsNiArMjEyNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKIHJlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKIHJl
bmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA4ZjQwMzM2NDhhNzE4MzIzZmI1ZTBmMTVjN2NhNjIxMDgxMjczZjNiLi5jMzdm
Mzg5MTE3NThjYTFiNjE5YzU1YTQxMGU2MmM4NGNiYjQ5MTNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDgsNiArMzA4LDcg
QEAKIAkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQjBCMEYx
MkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5
IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRjkwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVy
Q29tcG9zaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYx
MkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBMTE0
OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLzsgfTsKIAkJMEY1ODBG
QUYxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4
IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJl
ZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU5MjMsNiAr
NTkyNCw4IEBACiAJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkIw
RjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckJh
Y2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQjBGMTNBQjlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVy
U2Nyb2xsYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkExMTQ5
NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5n
TGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxl
ZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUx
NDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI4NzY5LDYgKzI4NzcyLDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBD
NDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3
NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1ODBD
RkMwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8sCisJCQkJ
MEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovLAog
CQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8s
CiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8s
CiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAq
LywKQEAgLTMzMTIzLDYgKzMzMTI4LDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4
IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzEx
MkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMGQ4MzhkNTc0ODFmYjQ3YmQ5ZmUyOWQ5N2E1ZGMw
OWFiMWQ4Y2FiNi4uNTJiNDNhMDgyNmY2YjJhZjBiMzkzZDQwMTAwNzBmN2QwYjMyYzQ1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1h
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRv
ci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTE2LDcgKzM5MTYs
OCBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xs
YWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRB
bmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBib3gubGF5ZXIoKTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXllcigpKTsKKyAg
ICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5
MjksNyArMzkzMCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8o
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
SVhNRTogaXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4g
UlRMIG92ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7Cisg
ICAgQVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYm94LnNjcm9sbGFibGVMYXll
cigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1MWVj
NDQ0Y2QuLjg4MDRhMTZiZWMxNGNkMDJmMDdhZWZhNjliZjliMTIwNmQyNmQzMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFzc0No
YW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRl
ckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBk
YXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihu
ZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6
OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1
ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xs
YWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3Vs
ZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTMzMiw4ICsxMzMyLDgg
QEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNs
YW1wZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZl
Y3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290
aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6
WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9w
KGNsYW1wZWRUb3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVu
ZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hv
dWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkOTdl
NjZmOGY4YWYwNWZhMDI3NzZhMDA4NTBmNWY1NWFlODYxZjNmLi5kOGQ0NzdlMWM4YjAzZDllNzBi
ZTEyYTBiYTAxYTQ2MWMyY2I4NGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcApAQCAtMjQxMiw5ICsyNDEyLDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJl
dmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9s
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXll
ciA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
IHsKICAgICAgICAgICAgIGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
KyAgICAgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNp
ZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFw
cGVhcmFuY2UoKTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAg
ICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5v
dGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFk
ZjdkMTY0ZTJlNGUyYjBmYjExM2YwM2ExYmQzYTczYzI3MTI3NS4uMDQ4ZjA1MGY4MWE4NjFjMTQ0
NzEwNDljZDYyNTUzZGEwMGU5ODEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1
ZWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3NSw4IEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxN
YXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJl
cigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+bWFycXVlZSgpOwor
ICAgIEFTU0VSVChyZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5ZXIoKSk7Cisg
ICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFibGVMYXllcigpLT5tYXJx
dWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZmZDQ0
ZTFjNDQyNjc4NmEzLi43MjIyNGY5NTEwYTk2OWY3ZDRhZGFhNDFjNjhiOTU3ODFlY2I5MGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3ICs0
OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBU
ZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlubmVyVGV4dFJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJU
ZXh0UmVuZGVyZXItPmxheWVyKCk7CisgICAgYXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJl
bmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAoIWlubmVyTGF5ZXIpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE2YTYyYWM5
ZjZlZWNhNDUwMWNkNDdhNWYwMGUwZTUxZmY3NjEzOTIuLmI1MDJlZGFhYTlkYTQ3OGM5ZDA3NzE4
ZjY4MTM2YTY2NTMwODhhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNDMsMTIgKzM0MywxNCBAQCBzdGF0aWMgYm9vbCBo
YW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2RlKiBzdGFydE5vZGUs
IGNvbnN0IFdoZQogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7CiAgICAgICAgIGlm
IChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7
CiAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQ
bGF0Zm9ybUV2ZW50KCk7Ci0gICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7Ci0g
ICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29w
aWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRl
cmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCks
IGZpbHRlcmVkVmVsb2NpdHkpOwotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQg
PSBib3hMYXllci0+aGFuZGxlV2hlZWxFdmVudChjb3BpZWRFdmVudCk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gZGlkU2Nyb2xsSW5T
Y3JvbGxhYmxlQXJlYSgqYm94TGF5ZXIsIHdoZWVsRXZlbnQpOworICAgICAgICAgICAgYm9vbCBz
Y3JvbGxpbmdXYXNIYW5kbGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXV0byogYm94TGF5
ZXJTY3JvbGxhYmxlID0gYm94TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3Bp
ZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVy
ZWRQbGF0Zm9ybURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwg
ZmlsdGVyZWRWZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRs
ZWQgPSBib3hMYXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNI
YW5kbGVkID0gZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3
aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dh
c0hhbmRsZWQpIHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3Np
bmdCb3gtPmVsZW1lbnQoKTsKQEAgLTE1NjgsNyArMTU3MCw3IEBAIE9wdGlvbmFsPEN1cnNvcj4g
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBi
b29sIHNoCiAgICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdp
dGggcmlnaHQtYWxpZ25lZCB0ZXh0IGluIGEgYm94LCB0aGUgcmVuZGVyZXIgaGVyZSBpcyB1c3Vh
bGx5IGEgUmVuZGVyVGV4dCwgd2hpY2ggcHJldmVudHMgc2hvd2luZyB0aGUgcmVzaXplIGN1cnNv
cjogd2Via2l0Lm9yZy9iLzIxMDkzNS4KLSAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVz
aXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1
bHQubG9jYWxQb2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6
ZUN1cnNvcigpOwpAQCAtMTgxMiwxMiArMTgxNCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3Vz
ZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkgPyBt
X2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAgICAg
YXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJlc3Vs
dCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5SZXNp
emVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1vZGUo
dHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZzZXRG
cm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2lu
dCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJ
blJlc2l6ZUNvbnRyb2wobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNj
cm9sbGFibGVMYXllcjsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNj
cm9sbGFibGVMYXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAg
ICAgICAgIGludmFsaWRhdGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdT
dXNwZW5kZWQodHJ1ZSk7CkBAIC0xOTE4LDEwICsxOTIyLDEwIEBAIFNjcm9sbGFibGVBcmVhKiBF
dmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0KIAogICAgICAgICBhdXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwot
ICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkg
eworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVM
YXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKICAgICAgICAgICAgIGlmICghc2Ny
b2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBzY3JvbGxhYmxlTGF5ZXI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDYxNzkwNWUwMWIxZGRmMGQxZTBjMWQ0ZWViODM0OGU3OWVhYmIyYTEuLjg3MTliYTAz
NjU2YmE3ODc4OTRiMzU1ZTFlNTAzNDQ1YTA5ZTIyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaApAQCAtODMsNyArODMsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFz
cyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJFbGVt
ZW50OwotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBj
bGFzcyBSZW5kZXJXaWRnZXQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJh
cjsKQEAgLTU1MCw3ICs1NTAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3N2Z1BhbiB7IGZh
bHNlIH07CiAKLSAgICBSZW5kZXJMYXllciogbV9yZXNpemVMYXllciB7IG51bGxwdHIgfTsKKyAg
ICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fcmVzaXplTGF5ZXIgeyBudWxscHRyIH07CiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gbV9jYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQ7CiAgICAgYm9v
bCBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudCB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZjliMWE1ZDcxNWI3NTQ3Mjk0
Mjg1ODlhZTU4MWU2OWM1YjdkZTExYy4uMmVhMGYyODViZGRlYmVlNjk2YzkzNzc4NzUyMDA1YWZm
YzY2ZDNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNzcsOSArNzcsOSBAQAog
I2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9z
aXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTYyLDcgKzI1NjIsOCBAQCB2b2lkIEZyYW1lVmll
dzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRD
b250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVy
VmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAg
ICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpOworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXllcigpLT51cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM4NDAsMTAgKzM4NDEsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGF1dG8qIGxheWVyID0gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAo
IWxheWVyKQorICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObyk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJl
YUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApAQCAtNDMxOCw4ICs0MzE5LDEwIEBAIHZvaWQgRnJh
bWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwog
CiAgICAgcm9vdExheWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwg
bV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5
ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29u
dGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJs
YXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJl
cik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3Qs
IG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVu
dHMoY29udGV4dCwgZGlydHlSZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggNGQ4YjcyZjhlNWJjYjBlODMyZDNlYzNk
ZGMyZWU5MjkyYjQ5ZmU4Ni4uZGIxYTRlYmRlZDJmYWRkMWZmZjBiNWJkYjJhOTgwMDQxZGZhZjhm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTQwLDcg
KzQwLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NCwxMSBAQCBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5v
ZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwor
ICAgICAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVu
Y2xvc2luZ0xheWVyKCk7CisgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllcik7CisKKyAgICAg
ICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+
c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggOWJiOGU5MmNh
YWM1Y2Y1MzJiNzliOTBlZWFiM2NmMjE1NDBhZmY0My4uZDE2MjZlYzNjMjdiMWZiNjNlZmI1M2E4
MGYwMmU2Yzg2ODA2ZWM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTgx
OSwxNCArODE5LDE2IEBAIHZvaWQgRnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
Rm9yTm9kZShjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIE5vZGUqCiAgICAgaWYgKCFyZW5kZXJl
ciB8fCAhcmVuZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
ckxheWVyJiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVy
KS5sYXllcigpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIuY3VycmVudFNjcm9s
bFR5cGUoKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBT
Y3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKLSAgICBsYXllci5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwotICAgIGxheWVyLnNldEN1
cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIGxheWVyLT5zZXRDdXJyZW50U2Nyb2xs
VHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljKTsKKyAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0
aW9uKTsKKyAgICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAK
LSAgICBsYXllci5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2Fs
bCB0aGlzPworICAgIGxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBh
bHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVy
bWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5k
ZXggYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4uZjg0M2U5ZTNmYzdm
NWMzY2FhMTg2NGU1ZWVmYzc4NTVlY2RhMTQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJS
YW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmll
dy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgyLDcgQEAgc3RhdGlj
IFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKICAg
ICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIHJldHVy
biBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAgICAgCiBzdGF0aWMgQ29udGFpbmVyTm9kZSog
ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29udGFpbmVyTm9kZSogbm9kZSwgY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpZ2hsaWdodERhdGEuY3BwCmluZGV4IGU1YTQ3YjcwNzRkY2M5MzFkYjAwMzc3ODNhM2Uy
OWFmZDdmZGRlNDMuLmFlZTUwYjA5YTkzMGRjMzk1NTMwNmZlYzE0NTBjYjc3YWRjNzAyNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNs
dWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC0yMDksNyArMjA5LDggQEAgdm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rp
b24oY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2sKIAogdm9p
ZCBIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbigpCiB7Ci0gICAgbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJW
aWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVy
KCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKICAgICBzZXRTZWxlY3Rpb24oeyB9LCBI
aWdobGlnaHREYXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwogfQogCkBAIC0zMTksOCAr
MzIwLDEwIEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVy
UmFuZ2UmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUKICAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
Okluc2lkZSk7CiAgICAgfQogCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1v
ZGU6Ok5vdGhpbmcpCi0gICAgICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5jbGVhckJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcygpOworICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRN
b2RlOjpOb3RoaW5nKSB7CisgICAgICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgICAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPmNsZWFyQmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgfQogCiAgICAgLy8gTm93IHRoYXQgdGhlIHNl
bGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsg
dGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDZiNTNjYmE4NWM4
ZTlkYzU5NzE1YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmE2N2NiMjJjMjNkMzNmMzM4YzhhMGE2NjRm
ZWI1OTJlMGY5MDZjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1h
cmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC01NTMsNyArNTUzLDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
VHJhbnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9jayA6IGJsb2Nrc1RvVXBkYXRlKSB7
CiAgICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBibG9j
ay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgICAgIGlmIChi
bG9jay0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBibG9jay0+c2Nyb2xsYWJsZUxh
eWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogICAgICAgICBibG9jay0+Y2xl
YXJMYXlvdXRPdmVyZmxvdygpOwogICAgIH0KIH0KQEAgLTU4NCw4ICs1ODUsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigp
LT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKQEAgLTExMDksMTIgKzExMTAs
MTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVzaGVkQ2xpcCkKICAgICAgICAg
cG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwog
CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8g
T3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8s
IHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAvLyB6LWluZGV4LiBXZSBwYWlu
dCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Ny
b2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KICAg
ICBpZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQ
YWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKQogICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpW
aXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWlu
dEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRP
dmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29u
dGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRS
ZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVu
dHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
QEAgLTE0NjksMTYgKzE0NzMsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24o
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogICAgICAg
ICBMYXlvdXRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2FwcygqdGhpcywgcGFpbnRP
ZmZzZXQsIExheW91dFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2FjaGUs
ICZwYWludEluZm8pOwogICAgICAgICBpZiAoIWdhcFJlY3RzQm91bmRzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllcigp
ID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7CiAgICAg
ICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KC1wYWludE9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFoYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFJl
Y3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgICAgICAgICBmbGlw
Rm9yV3JpdGluZ01vZGUobG9jYWxCb3VuZHMpOwotICAgICAgICAgICAgICAgICAgICBnYXBSZWN0
c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZs
YXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXJTY3JvbGxhYmxlLT5yZW5k
ZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
bGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJCb3goKS0+
c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxh
eWVyLT5hZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOworICAgICAg
ICAgICAgICAgIGxheWVyU2Nyb2xsYWJsZS0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGdh
cFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIwMDEs
NyArMjAwNSwxMCBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wo
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5o
aXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbklu
Q29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVk
SW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9m
ZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QK
QEAgLTI0OTgsOSArMjUwNSwxMSBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAv
LyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFz
IHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNv
IGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3Jv
bGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcu
LCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCku
Ci0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFy
cXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAg
ICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3Jv
bGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVi
eVJ1bigpKTsKLSAgICAgICAgCisgICAgICAgIGJvb2wgaGFzTWFycXVlZSA9IHNjcm9sbGFibGVM
YXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSA6IG51bGxwdHI7CisgICAgICAg
IGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxh
YmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Ny
b2xsT2Zmc2V0KCkueSgpKSA6IGZhbHNlOworICAgICAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkpIDog
ZmFsc2U7CisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAoaGFzTWFycXVlZSB8fCAoZGly
ZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigp
KTsKKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUg
PyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBlMjEzYWFjNzFhOTQ0
NTg3M2UyMTYwNDE2NGU0MTQ0NThiMDZjYTkwLi5jNTFjNTBjZTU3YmRhZTAwMzU0YWRkMjk0MmQx
Y2NlNzQ4ZGMzODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM0OSw3ICszNDksNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5
b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9XcmFwKCkg
JiYgY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFycXVlZSB3
aXRoIGlubGluZSBjaGlsZHJlbiBoYXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAgaWYgKGxh
eWVyKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jp
em9udGFsKCkpCisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5
ZXIoKS0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpv
bnRhbCgpKQogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjEyMzc2YmFhZDYxYmQ2MmZhM2Nl
ZGE4ZGRhMmFhMjY0M2I3OTlkYi4uZDEyOGQxNGE2OGYyNDcwZjlhODY5NjFiZmQ5NTI1ZTcyOWYx
OGJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDggKzU4
LDggQEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBA
IC0zMTksMTEgKzMxOSwxMSBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gSWYg
b3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExlZnQv
VG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3IHpv
b21lZCBjb29yZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUu
ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9u
ID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgU2Nyb2xsUG9zaXRp
b24gc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsK
ICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgp
IC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2Nh
bGUoem9vbVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNl
dFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAg
Ly8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBs
YXlvdXQuCkBAIC01NDIsOCArNTQyLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhl
aWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVy
KCktPnNjcm9sbFdpZHRoKCk7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFdpZHRo
KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNo
ZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9k
ZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC01NTUs
OCArNTU1LDggQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogCiBpbnQgUmVu
ZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpKQotICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7Cisg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEhlaWdodCgpOwogICAgIC8vIEZvciBvYmpl
Y3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCkBAIC01NjUsMTIgKzU2NSwxMiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWln
aHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCkueCgpIDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwog
fQogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxUb3AoKSBjb25zdAogewotICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkg
OiAwOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/
IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQg
UmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01
NzksNyArNTc5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxh
eW91dElmTmVlZGVkKCkKICAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwX2x1KTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCitzdGF0
aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5
ZXIpCiB7CiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlm
ICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQpAQCAtNTg5LDI2ICs1ODksMjYgQEAg
c3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAK
IHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRl
ZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICgh
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47
Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Ny
b2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
KyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNs
YW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50
IG5ld1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8
fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVy
KCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5l
d1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxh
eWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCkgY29uc3QKQEAgLTgwOCwyNCArODA4LDMwIEBAIGJvb2wgUmVuZGVyQm94
OjpmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKGNvbnN0IEZyYW1lVmlldyYgZnJh
bWVWaWV3KSBjCiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAh
bGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OkF1dG8pOworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigp
LT5oYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVk
ZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQot
ICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0
eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOworICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHNjcm9sbGFibGVMYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvOwogfQog
CiBpbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFy
U2l6ZSgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9s
bGJhclNpemUoKSA/IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7Cisg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpICYmIHNjcm9sbGFibGVM
YXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6
IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgp
IGNvbnN0CkBAIC04MzQsMTIgKzg0MCwxMiBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3Jv
bGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFT
U0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xs
YmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVy
biBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg1NCwx
NCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25z
dAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1l
bnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigp
OwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAg
ICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSBzY3JvbGxhYmxl
TGF5ZXIoKTsKKyAgICBpZiAoIWJveExheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0b3BFbGVtZW50KQorICAgICAgICAq
c3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUmVu
ZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwg
UmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KQpAQCAtODc4LDE1ICs4ODMsMTQgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKIGJvb2wg
UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVu
dCoqIHN0b3BFbGVtZW50KQogewogICAgIGJvb2wgc2Nyb2xsZWQgPSBmYWxzZTsKLSAgICAKLSAg
ICBSZW5kZXJMYXllciogbCA9IGxheWVyKCk7Ci0gICAgaWYgKGwpIHsKKyAgICBhdXRvKiBsYXll
ciA9IHNjcm9sbGFibGVMYXllcigpOworICAgIGlmIChsYXllcikgewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlv
biBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhv
bWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0g
ICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJ
bmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBzY3JvbGxlZCA9IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5
c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9j
dW1lbnQsIG11bHRpcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNh
bFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgp
LmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikp
CisgICAgICAgIGlmIChsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQg
PSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC04OTksOSArOTAz
LDkgQEAgYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXQKICAgICBpZiAoc3RvcEVsZW1lbnQgJiYgKnN0
b3BFbGVtZW50ICYmICpzdG9wRWxlbWVudCA9PSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAo
YiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5sb2dpY2FsU2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKKyAgICBS
ZW5kZXJCbG9jayogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoYmxvY2sgJiYg
IWJsb2NrLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sb2dpY2FsU2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTkzMiw3ICs5MzYsNyBAQCBib29sIFJlbmRlckJveDo6
Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94Ojp1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYg
c2Nyb2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiB9CiAKIHZvaWQg
UmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTk5MSw4
ICs5OTUsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50
UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFu
U2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9CiAK
IGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0xMDE3
LDExICsxMDIxLDkgQEAgYm9vbCBSZW5kZXJCb3g6Om5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxj
dWxhdGlvbigpIGNvbnN0CiAKIFNjcm9sbFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRp
b24oKSBjb25zdAogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiB7IDAs
IDAgfTsKLQotICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Ny
b2xsUG9zaXRpb24oKTsKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCk7CiB9CiAKIExheW91dFNpemUgUmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dD
bGlwKCkgY29uc3QKQEAgLTE1NjksNyArMTU3MSw3IEBAIGJvb2wgUmVuZGVyQm94Ojpjb21wdXRl
QmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
CiAgICAgaWYgKCFnZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVudChwYWludE9mZnNldCwgYmFja2dy
b3VuZFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAm
JiBsYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgaWYgKHNjcm9s
bGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBmb3JlZ3JvdW5k
SXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJh
dGlvblRlc3RNYXhEZXB0aCk7CkBAIC0xODg4LDEwICsxODkwLDEwIEBAIExheW91dFJlY3QgUmVu
ZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVu
ZGVyRnJhZ21lCiAgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRT
aXplKGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90
dG9tKCkpKTsKIAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhl
bS4KLSAgICBpZiAobGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0
aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlw
UmVjdC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAg
ICAgICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1
cm4gY2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAppbmRleCA1ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgz
OTg3Li5jMGRhN2VhMTEzNGY5NjYwMzU4Yzk5MjEzZGQzM2E4NmZlNWE1NjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4
LDkgKzQ4LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCAr
NDkwLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9u
Q29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250
YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RS
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9h
dFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJv
cmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAg
ICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdD
bGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250YWluaW5n
QmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAt
NTA4LDggKzUwOCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQ
b3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgaWYgKGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xs
aW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQo
KSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNs
b3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRp
bmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmlu
Z0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5j
ZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc3RpY2t5TG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgIH0KICAgICAvLyBGSVhN
RTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5vdCB0cmFuc2Zvcm1lZC4KICAgICBz
dGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iuc2V0TG9jYXRpb24oc3RpY2t5TG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTQ4LDExICs1NDgsMTMgQEAg
RmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5
UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0ID0g
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGNsaXBS
ZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAgICAgICBGbG9hdFBvaW50IHNjcm9s
bE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Ny
b2xsT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAg
ICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBw
aW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAg
ICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAg
ICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgICAgICBzY3JvbGxiYXJP
ZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5zY3JvbGxhYmxlTGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29u
c3RyYWluaW5nUmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBz
Y3JvbGxiYXJPZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0
cmFpbmluZ1JlY3Q7CkBAIC04NDQsOCArODQ2LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
CiAgICAgICAgIAogICAgICAgICAvLyBBZGp1c3QgdGhlIHBhaW50IHJlY3QgdG8gcmVmbGVjdCBh
IHNjcm9sbGVkIGNvbnRlbnQgYm94IHdpdGggYm9yZGVycyBhdCB0aGUgZW5kcy4KICAgICAgICAg
c2Nyb2xsZWRQYWludFJlY3QubW92ZUJ5KC10aGlzQm94LnNjcm9sbFBvc2l0aW9uKCkpOwotICAg
ICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIGxheWVyKCktPnNjcm9sbFdp
ZHRoKCkgKyBiUmlnaHQpOwotICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9y
ZGVyVG9wKCkgKyBsYXllcigpLT5zY3JvbGxIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpKTsKKyAg
ICAgICAgYXV0byBzY3JvbGxXaWR0aCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbFdpZHRoKCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRX
aWR0aChiTGVmdCArIHNjcm9sbFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgYXV0byBzY3JvbGxI
ZWlnaHQgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxIZWln
aHQoKSA6IDA7CisgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldEhlaWdodChib3JkZXJUb3Ao
KSArIHNjcm9sbEhlaWdodCArIGJvcmRlckJvdHRvbSgpKTsKICAgICB9CiAgICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIoY29udGV4dCwg
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTll
ODI0ZDEzNTcwNjM5ZTNlNGQ0NDNjOTY1ZjE0NGU5ZDQ4ZjQ0Ni4uZGE3NDc5MzdhY2MzMDZlZDBi
NGE0MjEyNWI0NjZlNDQ0NTQ3MjIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0yODcsMTYgKzI4NywxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpCiAKICNlbmRp
ZgogCi1zdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKLXsKLSAgICBz
dGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKLSAgICByZXR1cm4gKytjdXJy
ZW50U2NvcGU7Ci19Ci0KIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVu
ZGVyTGF5ZXIpOwogCi1SZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQotICAgIDogbV9pc1JlbmRlclZpZXdMYXll
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCitSZW5kZXJMYXllcjo6
UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2Jq
ZWN0LCBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKKyAgICA6IG1fbGF5ZXJUeXBl
KGxheWVyVHlwZSkKKyAgICAsIG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0LmlzUmVuZGVyVmlldygpKQogICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVu
ZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKICAgICAsIG1faXNOb3JtYWxGbG93T25s
eShmYWxzZSkKICAgICAsIG1faXNDU1NTdGFja2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zMDQsMTkg
KzI5OSwxNSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV96T3JkZXJMaXN0c0RpcnR5KGZh
bHNlKQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCiAgICAgLCBtX2hhZE5lZ2F0
aXZlWk9yZGVyTGlzdChmYWxzZSkKLSAgICAsIG1faW5SZXNpemVNb2RlKGZhbHNlKQotICAgICwg
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1f
cGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAgICwgbV9pbk92ZXJmbG93UmVsYXlv
dXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVlZHNOb3JtYWxSZXBhaW50KQogICAg
ICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1Zpc2libGVD
b250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5KGZhbHNl
KQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxzZSkKLSAgICAsIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0ZpeGVkSW50ZXJzZWN0aW5nVmlld3Bv
cnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZhbHNlKQogICAgICwgbV8zRFRyYW5z
Zm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCkBAIC0zMzAsMTUgKzMyMSw2IEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3QoZmFsc2UpCiAg
ICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFp
bmVkTm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICAsIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0g
ICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAg
ICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCi0gICAgLCBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fbGF5ZXJM
aXN0TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM1Myw1MyArMzM1LDIyIEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZs
b3dPbmx5KCkpOwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tp
bmdDb250ZXh0KCkpOwogCi0gICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxm
UGFpbnRpbmdMYXllcigpOwotCi0gICAgaWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Ny
b2xsaW5nU2NvcGUoKTsKKyAgICAvLyBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgaXMgaW5pdGlhbGl6
ZWQgaW4gUmVuZGVyTGF5ZXJTVkcvSFRNTCwgZXZlbiB0aG91Z2gKKyAgICAvLyBpdCBiZWxvbmdz
IHRvIFJlbmRlckxheWVyIC0tIHdlIGNhbm5vdCBjYWxsCisgICAgLy8gIm1faXNTZWxmUGFpbnRp
bmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsiCisgICAgLy8gaGVyZSwgaW4g
dGhlIGNvbnN0cnVjdG9yIC0tIHNpbmNlIHRoZSBSZW5kZXJMYXllclNWRy9IVE1MIGNsYXNzZXMg
YXJlbid0IGluaXRpYWxpemVkIHlldC4KIAogICAgIGlmICghcmVuZGVyZXIoKS5maXJzdENoaWxk
KCkpIHsKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7CiAgICAg
ICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgp
ID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0
b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUg
cmVjYWxjdWxhdGVkLgotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1pl
cm8oKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOwotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJlbmRlckxheWVy
KCkKIHsKLSAgICBpZiAoaW5SZXNpemVNb2RlKCkpCi0gICAgICAgIHJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1v
dmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlm
Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAg
ICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24p
OwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0
cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVh
KCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rp
b24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0K
ICAgICBjbGVhckxheWVyRmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJh
Y2tpbmcoKSkgewpAQCAtNDE4LDYgKzM2OSwyMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVy
KCkKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlbmRlcmVy
KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgfHwgIWZpcnN0Q2hpbGQoKSk7CiB9CiAKK1Jl
bmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpCit7Cisg
ICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRy
OworfQorCitjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxh
YmxlTGF5ZXIoKSBjb25zdAoreworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRo
aXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlz
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6YWRkQ2hpbGQo
UmVuZGVyTGF5ZXImIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQpCiB7CiAgICAgUmVu
ZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTkzNSw3ICs5MDAsMTAgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRp
bmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigmZmxhZ3MpOwotICAg
IGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+YXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICBnZW9t
ZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CkBAIC05NDMs
NyArOTExLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVhciBvdXIgY2Fj
aGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAg
aWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYg
c2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0
U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAg
ICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5h
YnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk1Miw3ICs5MjAsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0
cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2Vz
dG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNl
dEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290
KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJv
dW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVzY2Vu
ZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDI5LDEzICs5OTcsOCBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAs
IE9wdGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlN
YXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBu
b3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkg
ewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQg
aXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRl
TWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKHNjcm9sbGFibGVMYXll
ciAmJiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT51cGRhdGVNYXJxdWVlKCk7CiAKICAgICBpZiAocmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25l
ZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4
ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBib29sIGludGVyc2VjdHNWaWV3cG9ydCA9
IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50ZXJzZWN0c1ZpZXdwb3J0KCp0aGlzKTsKQEAgLTEx
MTUsOTIgKzEwNzgsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhclJlcGFpbnRSZWN0cygpCiAg
ICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRMYXlvdXRSZWN0cygpOwogfQogCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQotewotICAg
IEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOwotCi0gICAgTE9HKFNj
cm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRT
Y3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9y
bXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93
U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zv
cm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQotICAgICAg
ICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsK
LQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMg
b2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwotICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5W
aWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxv
d0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0
cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwg
T3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQgdGhlcmUgYXJlIHNv
bWUgY29ybmVyIGNhc2VzIHdoZXJlCi0gICAgLy8gdGhlc2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5
LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCi0gICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vIHZpc2libGUg
Y29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVj
b21wdXRpbmcKLSAgICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwgYmUgZW1wdHkuIElm
IG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bwotICAgIC8vIHJlY29t
cHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCi0gICAgaWYgKCFtX2hhc1Zpc2libGVEZXNj
ZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKLSAgICBpZiAocG9z
aXRpb25DaGFuZ2VkKQotICAgICAgICBmbGFncy5hZGQoSGFzQ2hhbmdlZEFuY2VzdG9yKTsKLQot
ICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0NoYW5nZWRBbmNlc3RvciwgSGFzU2VlblZp
ZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVyZmxvd1Njcm9sbCB9KSkKLSAgICAgICAg
Y2xlYXJDbGlwUmVjdHMoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzVmlld3Bv
cnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCi0gICAgICAgIGZsYWdzLmFkZChIYXNTZWVuVmlld3Bv
cnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xp
cCk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRDb21wdXRlUmVwYWludFJlY3RzID0gKGZsYWdzLmNv
bnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRh
aW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xp
cCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwotICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5
ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOwotICAgIGJvb2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBp
bmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzICYmICFpc1Zp
c3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Ci0gICAgaWYgKHNob3VsZFB1c2hBbmRQb3BN
YXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhp
cywgcGFyZW50KCkpOwotCi0gICAgaWYgKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMpIHsKLSAg
ICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0IGNvbXB1dGUgcmVwYWludCByZWN0cyBm
b3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KLSAgICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0
eSkKLSAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3RzKCk7Ci0gICAgICAgIGVsc2UgLy8gRklY
TUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNvbnRhaW5lciBhcyB3ZSB3YWxrIGRvd24g
dGhlIHRyZWUuCi0gICAgICAgICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCkuY29u
dGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7Ci0gICAgfSBlbHNlIGlmICghcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1XaWRnZXQoKSkgewotICAgICAgICAvLyBX
aGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNvbnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRv
IGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFpbnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9t
Ci0gICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3ZlcmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5z
IHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUgaW52YWxpZCBhbmQgdGhleSBuZWVkIHRv
IGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTg4MTIxKS4KLSAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3JyZWN0LgotICAgICAgICBBU1NFUlQoIXJl
bmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5
b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKLSAgICAgICAg
QVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCku
cmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94ID09IHJlbmRlcmVyKCkub3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKLSAgICB9
Ci0gICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOwotCi0gICAgLy8gV2Ug
ZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0aW9u
IHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgpCi0gICAgLy8gb2YgYW4gb2JqZWN0LCB0
aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0
aGUgbGF5ZXIgcG9zaXRpb24gd2FzCi0gICAgLy8gdXBkYXRlZCBhYm92ZS4KLQotICAgIGlmICht
X21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwot
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKLSAgICAg
ICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7Ci0KLSAgICBy
ZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtl
cnMoKTsKLX0KLQogI2lmIEVOQUJMRShDU1NfQ09NUE9TSVRJTkcpCiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUJsZW5kTW9kZSgpCkBAIC0xNjkxLDM0ICsxNTY4LDEwIEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZz4qIGZsYWdzCiAgICAgICAgICAgICBsb2NhbFBvaW50IC09IGRvd25jYXN0PFJlbmRlclRh
YmxlUm93PigqYW5jZXN0b3IpLnRvcExlZnRMb2NhdGlvbk9mZnNldCgpOwogICAgICAgICB9CiAg
ICAgfQotICAgIAotICAgIC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0Lgot
ICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwotICAgIGlmIChyZW5kZXJlcigpLmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5j
ZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7Ci0gICAg
ICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3Np
bmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0gICAgICAgIGlmIChwb3NpdGlv
bmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9j
YWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsUG9zaXRpb24o
KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5p
c0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0
PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5G
bG93UG9zaXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0g
ICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKLSAgICAgICAgfQotCi0gICAgICAgIEFT
U0VSVChwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwotICAgICAg
ICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxp
bmdTY29wZSgpOwotICAgIH0gZWxzZSBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkg
ewotICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnQoKS0+c2Nyb2xs
UG9zaXRpb24oKSk7Ci0KLSAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCkpOwotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXIt
PmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7Ci0gICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3Bl
KQotICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Nj
b3BlKCk7Ci0gICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQotICAgICAgICBtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2JveFNjcm9sbGluZ1Njb3BlOworICAgIC8vIFN1YnRy
YWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3Blcyhsb2NhbFBvaW50
KTsKIAogICAgIGJvb2wgcG9zaXRpb25Pck9mZnNldENoYW5nZWQgPSBmYWxzZTsKICAgICBpZiAo
cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSkgewpAQCAtMTg0MCw4NiArMTY5MywyOCBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpIGNvbnN0CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZW5kZXJM
YXllciogZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIp
Ci17Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOwotICAgIGlmICghb3duZXJFbGVtZW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8qIG93bmVyUmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFvd25lclJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotfQotCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMp
CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAg
IGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250
YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAo
Y3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KGxheWVyKTsKLX0KLQotUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0Ci17Ci0gICAgUmVuZGVyVHJlZU11dGF0aW9u
RGlzYWxsb3dlZFNjb3BlIHJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZTsKLQotICAg
IGF1dG8gaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSA9IFtdKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
cikgewotICAgICAgICByZXR1cm4gaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSAmJiBk
b3duY2FzdDxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpOwotICAgIH07Ci0KLSAgICBpZiAoaW5jbHVkZVNlbGYgPT0gSW5jbHVk
ZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYgJiYgaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqdGhpcykp
Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyk7Ci0gICAgCi0g
ICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigq
dGhpcywgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCpuZXh0TGF5ZXIsIGNyb3NzRnJhbWVCb3VuZGFyaWVz
KSkgewotICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKLSAg
ICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9v
bCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QK
LXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xs
QW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBlbmNsb3Np
bmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MoKSBjb25zdAorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdG
cmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAg
ICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2Vu
ZGlmCisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVy
RWxlbWVudCgpOworICAgIGlmICghb3duZXJFbGVtZW50KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBmYWxzZTsKLX0KKyAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3du
ZXJFbGVtZW50LT5yZW5kZXJlcigpOworICAgIGlmICghb3duZXJSZW5kZXJlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFy
c09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKKyAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9z
aW5nTGF5ZXIoKTsKIH0KIAogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFu
c2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKQEAgLTI0NDcsMzMxICsyMjQyLDYgQEAgTGF5b3V0U2l6
ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFuY2VzdG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBDb2wKICAgICByZXR1cm4gdG9MYXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29v
cmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3lu
Y092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYm
IHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gp
Ci0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIo
KS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRp
bmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LWJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2
ZW50JiB0b3VjaEV2ZW50KQotewotICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xs
aW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgotICAg
IGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3Vj
aEV2ZW50KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxl
cigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKLXsKLSAgICBpZiAoIXJlbmRl
cmVyKCkuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnJl
bW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKLX0KLSNlbmRp
ZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2
YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYg
YmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBv
bmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNl
c0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNv
b3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGlu
dCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlz
IGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemls
bGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1s
Izg1Ni4KLSAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0
ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3Rl
ZERlbHRhID4gMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0g
MTsKLSAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVs
dGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRv
dWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IElu
dFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEo
ZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBz
b3VyY2VQb2ludCkKLXsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsK
LSAgICAKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBv
c2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhl
IHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQg
cHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngo
KSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAg
ICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAg
IEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0K
LSAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFk
aXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAg
ICAgIGRlbHRhLnNldFdpZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNj
cm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7
Ci0KLSAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsK
LX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2Rl
IGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRT
aXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRl
bHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxp
bmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICBy
ZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5l
Q2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Nj
cm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zm
c2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAg
ICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNh
bid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9s
bCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3Jv
bGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxP
ZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Ny
b2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQg
b24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQg
ZG9lc24ndAotICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRo
YXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Ny
b2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1l
cyBvd25lckVsZW1lbnQ/IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17
Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9
IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgs
IG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBv
c2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQ
b3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0
ZWRTY3JvbGw6OlllcykKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihw
b3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRl
ckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJ
bnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0
aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewot
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICp0aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwg
cG9zaXRpb24pOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGlu
YXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAg
IGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRD
dXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3Jv
bGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Ny
b2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlv
clN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikK
LSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5l
d1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0g
ICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQ
b3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09
IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5
IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBj
bGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNv
bmFibGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9s
bFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBT
Y3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0
aW9uKTsKLSAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAg
ICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewot
ICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAg
ICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNl
dCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRY
KHNjcm9sbFhPZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlv
bkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAot
ICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxC
ZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikg
ewotICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRv
KCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVy
ZS4KLSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRv
IG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlm
IChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVD
b21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJl
bmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUg
cG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxh
eWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVw
ZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBk
YXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZp
ZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAv
LyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5
ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hl
ZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRp
bmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5n
IGxheWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9u
cyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0g
ICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9z
aXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAg
ICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZm
ZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJl
IGEgc2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEg
ZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHBhaW50LW9yZGVyIHBhcmVudC4KLSAgICAgICAgICAg
ICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBwYWludE9yZGVyUGFyZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5n
QW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVw
ZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBh
cnRpY3VsYXIgcmVnaW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0
ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6
OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFt
ZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8g
VGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0g
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAg
ICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0
UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6
IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5l
cik7Ci0KLSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVh
ZChyZWN0Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1
dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxl
cigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNl
TW92ZUV2ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAo
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5n
R2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2lu
Z0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNr
aW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8v
IEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVx
dWlyZXNSZXBhaW50KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihy
ZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUg
c2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3Jv
bGxzT3ZlcmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxP
ZmZzZXQoKTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQo
KTsKLSAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0K
IHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxG
cmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykK
IHsKICAgICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVy
bWl0IHNjcm9sbGluZy4KQEAgLTI4MTYsMzAgKzIyODYsMzMgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKIAogICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotICAgIGF1
dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3Np
bmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogICAgIGJv
b2wgYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgPSAhcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7CiAKICAgICBpZiAoYWxsb3dzQ3VycmVudFNj
cm9sbCgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFi
bGVMYXllcigpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwogICAgICAgICAv
LyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJp
Y3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgogICAgICAgICAvLyBUaGlz
IHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVy
IGluIFNhZmFyaSBSU1MuCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAg
ICAgICAgIEFTU0VSVChib3gpOwogICAgICAgICBMYXlvdXRSZWN0IGxvY2FsRXhwb3NlUmVjdChi
b3gtPmFic29sdXRlVG9Mb2NhbFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChhYnNvbHV0ZVJlY3Qp
KSkuYm91bmRpbmdCb3goKSk7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBG
b3IgZGlyZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBz
Y3JvbGwgYmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAg
ICAgIC8vIHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4
IG9mIGxvY2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0
b28uCi0gICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5t
b3ZlQnkoTGF5b3V0UG9pbnQoLXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpLCAwKSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAg
ICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxv
Y2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWdu
WSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZl
YWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworICAgICAgICBTY3JvbGxPZmZz
ZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVMYXllci0+Y2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50
UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xs
T2Zmc2V0ICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgfHwgc2Nyb2xsYWJsZUxh
eWVyLT5jdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1
czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxP
ZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICAgICAgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAgICAgICAgICBp
ZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgJiYgdXNlU21vb3RoU2Nyb2xsaW5nKG9wdGlvbnMu
YmVoYXZpb3IsIGJveC0+ZWxlbWVudCgpKSkKICAgICAgICAgICAgICAgICBhbmltYXRlZCA9IEFu
aW1hdGVkU2Nyb2xsOjpZZXM7Ci0gICAgICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQ
b3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKICAgICAgICAg
ICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQg
LSBvbGRTY3JvbGxPZmZzZXQ7CiAgICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZSgtc2Ny
b2xsT2Zmc2V0RGlmZmVyZW5jZSk7CiAgICAgICAgICAgICBuZXdSZWN0ID0gTGF5b3V0UmVjdChi
b3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJl
Y3QpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7CkBAIC0yODU3LDcgKzIzMzAsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3Qm
IGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNz
ZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20gYmVp
bmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5N
YWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExheW91
dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0Rv
Y3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3Qg
PSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NE
b2N1bWVudFZpc2libGVSZWN0KTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGV4cG9zZVJl
Y3QgPSBnZXRSZWN0VG9FeHBvc2Uodmlld1JlY3QsIGFic29sdXRlUmVjdCwgaW5zaWRlRml4ZWQs
IG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAKICAgICAgICAgICAgICAgICBJbnRQ
b2ludCBzY3JvbGxQb3NpdGlvbihyb3VuZGVkSW50UG9pbnQoZXhwb3NlUmVjdC5sb2NhdGlvbigp
KSk7CkBAIC0yODczLDggKzIzNDYsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAg
ICAgICAgICAgICBmcmFtZVZpZXcuc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CiAKICAgICAgICAgICAgICAgICBpZiAo
b3B0aW9ucy5zaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nID09IFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB8fCBmcmFtZVZpZXcuc2FmZVRvUHJvcGFnYXRlU2Nyb2xs
VG9QYXJlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5
ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0xheWVyLT5lbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpObyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdM
YXllciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2lu
Z0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJlbnRMYXllciA9IHNjcm9sbGFibGVMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhl
IHJlY3QgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcGFyZW50IGZyYW1lJ3MgZG9j
dW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIG5ld1JlY3QgPSBmcmFtZVZpZXcuY29udGVudHNU
b0NvbnRhaW5pbmdWaWV3Q29udGVudHMoZW5jbG9zaW5nSW50UmVjdChuZXdSZWN0KSk7CiAgICAg
ICAgICAgICAgICAgICAgIGluc2lkZUZpeGVkID0gZmFsc2U7IC8vIEZJWE1FOiBpZGVhbGx5IG5l
ZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgPGlmcmFtZT4gaXMgaW5zaWRlIHBvc2l0aW9uOmZpeGVk
LgpAQCAtMjkzMSwyNCArMjQwNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zp
c2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAg
IHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZpeGVkLCBv
cHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRp
bmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJh
bnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKLSAg
ICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9t
IHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBz
dGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0gICAgICAg
ICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBjb21w
b3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpP
bkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0
eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgotICAg
ICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0
ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBjb21wb3Np
dG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNj
cm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBM
YXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9v
bCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9s
bEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0
JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFs
aWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVW
aWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICBpZiAo
cmVuZGVyZXIoKS5pc1JlbmRlclZpZXcoKSAmJiBpbnNpZGVGaXhlZCkgewpAQCAtMzAyNiwxMTU1
ICsyNDg0LDk3IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25z
dCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIC8vIElmIHRoZSBy
ZWN0IGlzIGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIGRvbid0IGJvdGhlciB0cnlpbmcg
dG8gY2VudGVyLiBPdGhlciBhbGlnbm1lbnRzIHdpbGwgd29yay4KICAgICAgICAgc2Nyb2xsWSA9
IFNjcm9sbEFsaWdubWVudDo6Z2V0VmlzaWJsZUJlaGF2aW9yKGFsaWduWSk7CiAgICAgICAgIGlm
IChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQotICAg
ICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsOwot
ICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0SGVpZ2h0ID4gMCkKLSAgICAgICAgLy8gSWYgdGhlIHJl
Y3RhbmdsZSBpcyBwYXJ0aWFsbHkgdmlzaWJsZSwgdXNlIHRoZSBzcGVjaWZpZWQgcGFydGlhbCBi
ZWhhdmlvcgotICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRQYXJ0aWFsQmVo
YXZpb3IoYWxpZ25ZKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1l
bnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7Ci0gICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRv
IGFsaWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVy
IGRvd24KLSAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0
aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KLSAgICBpZiAoc2Ny
b2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnblRvQ2xvc2VzdEVkZ2UgJiYg
ZXhwb3NlUmVjdC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWln
aHQoKSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQotICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxp
Z25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b207Ci0KLSAgICAvLyBHaXZlbiB0aGUgWSBiZWhh
dmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgotICAgIExheW91dFVuaXQgeTsKLSAgICBp
ZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbCkKLSAgICAg
ICAgeSA9IHZpc2libGVSZWN0LnkoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFs
aWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tKQotICAgICAgICB5ID0gZXhwb3NlUmVjdC5t
YXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNj
cm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQotICAgICAgICB5ID0gZXhwb3Nl
UmVjdC55KCkgKyAoZXhwb3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpKSAv
IDI7Ci0gICAgZWxzZQotICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCk7Ci0KLSAgICByZXR1cm4g
TGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25Jbldp
bmRvdykKLXsKLSAgICBJbnRQb2ludCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7
Ci0gICAgc2Nyb2xsUmVjdFRvVmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0
aW9uLCBMYXlvdXRTaXplKDEsIDEpKSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2
ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6
WWVzIH0pOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpjYW5SZXNpemUoKSBjb25zdAotewotICAg
IC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJhbWU+IGJlY2F1c2UgdGhleSBuZXZl
ciBoYXZlCi0gICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhvd2V2ZXIsIHRoZXkgZG8gImltcGxp
Y2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCi0gICAgLy8gd2Ugd2FudCB0byBhbGxvdyBy
ZXNpemluZyB0aGVtIGFsc28uCi0gICAgcmV0dXJuIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkgJiYgcmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVzaXpl
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZz
ZXQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRl
ZCBjb250ZW50IGJ1dCBpcyBub3QgcmlnaHQgbm93LgotICAgIGlmICghaW5SZXNpemVNb2RlKCkg
fHwgIWNhblJlc2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQo
KS0+cmVuZGVyZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkg
bWF0dGVyIGhlcmU/Ci0gICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIg
dG8gZGVhbCB3aXRoIHRoZW0gZXhwbGljaXRseS4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCk7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJC
b3g+KGVsZW1lbnQtPnJlbmRlcmVyKCkpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxl
bWVudC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxl
cigpLm1vdXNlUHJlc3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB6b29tRmFj
dG9yID0gcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgYXV0byBhYnNv
bHV0ZVBvaW50ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlv
bigpKTsKLSAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0Nv
bnRlbnRzKGFic29sdXRlUG9pbnQpKTsKLQotICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zm
c2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKLSAgICBuZXdPZmZzZXQuc2V0V2lkdGgo
bmV3T2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKLSAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0
KG5ld09mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIAotICAgIExheW91dFNpemUg
Y3VycmVudFNpemUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3Rvciwg
cmVuZGVyZXItPmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgTGF5b3V0U2l6ZSBtaW5pbXVt
U2l6ZSA9IGVsZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50
U2l6ZSk7Ci0gICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6
ZSk7Ci0gICAgCi0gICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUo
b2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7Ci0gICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwot
ICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lk
dGgoKSk7Ci0gICAgfQotICAgIAotICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50
U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1T
aXplKSAtIGN1cnJlbnRTaXplOwotCi0gICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9
IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOwotICAgIGJvb2wgaXNCb3hTaXppbmdC
b3JkZXIgPSByZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRl
ckJveDsKLQotICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsK
LSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgp
KSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsK
LSAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBs
aWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3Piku
Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENT
U1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmln
aHQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAg
ICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXpp
bmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0
ZW50KCkpOwotICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250
YWwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1h
cmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdp
blRvcCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90
dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5k
ZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZl
cnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJh
c2VIZWlnaHQgLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBk
aWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAg
ZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6
IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2Vl
cCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAg
c2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxp
bmdOb2RlSUQgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2lu
ZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9s
bGluZyk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVy
bmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNp
b24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Ny
b2xsYmFyU3BhY2U7Ci0gICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2Ug
PSBzY3JvbGxiYXJJbnRydXNpb24oKTsKLSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhp
cy0+dmlzaWJsZVNpemUoKTsKLSAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6
bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3Rk
OjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkg
fSB9OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5n
cygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJ
WE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3Jv
bGxhYmxlQXJlYS4KLSAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9
IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkg
PCAwKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBl
bHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFj
aGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpKTsKLQotICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAg
c3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNl
dC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAg
IHJldHVybiBzdHJldGNoOwotI2Vsc2UKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFn
ZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5
ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7
Ci0gICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0
IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0
Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Ny
b2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJl
cigpLCByZWN0KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBwYXJlbnRSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZy
ZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKLSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChz
Y3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIElu
dFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2lu
dCk7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5k
ZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6
dmlzaWJsZVNpemUoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4g
SW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRIZWlnaHQoKSkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUo
KSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdo
dCgpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKSBjb25zdAotewotICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNT
aXplKCk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAg
ICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgp
LCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihj
b250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJl
dHVybiBjb250ZW50c1NpemU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRl
bnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBT
Y3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAg
ICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFu
Z2VkKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxh
eW91dENoaWxkcmVuKHRydWUpOwotICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7
Ci0gICAgfQotfQotCi1ib29sIFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpk
aWRVcGRhdGVTY3JvbGwoKQotewotICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3
ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0g
ICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9s
bCk7Ci19Ci0jZW5kaWYKLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0K
LVJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJl
cigpKSk7Ci0gICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKTsKLSAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAg
YXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVu
ZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7
Ci0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0
aCgpIDogMDsKLQotICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpIHsKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xs
YmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3Zl
cmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdl
dCgpKTsKLSAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92
ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCk7Ci0gICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAh
PSBSZXNpemU6Ok5vbmU7Ci0gICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5v
bk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3Jv
bGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUg
Y29ybmVyU2l6ZTsKLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8v
IElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4K
LSAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0LAotICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0g
ICAgfQotCi0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJh
cikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdS
ZWN0OwotICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQpOwotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
KSB7Ci0gICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAg
ICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNp
emUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5j
b250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVz
dWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZC
YXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdDsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAg
ICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAt
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRD
b3JuZXIpCi0gICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0
KCkpOwotCi0gICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAg
fQotCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAg
ICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAg
YXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5t
aW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxl
ZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCks
IH0sIGNvcm5lclNpemUgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNp
emUsIGNvcm5lclNpemUgfTsKLSAgICB9OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikKLSAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7
Ci0KLSAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikKLSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAg
cmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxi
YXJUaGlja25lc3MgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFy
JiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBy
ZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0g
ICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRT
aXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAg
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0g
ICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVj
dDsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwot
ICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlz
IG5vIG5lZWQgdG8gcmVwYWludC4KLSAgICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAg
IGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3Zl
QnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAg
ICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkp
OwotCi0gICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVy
Qm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5y
ZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
IXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBh
aW50UmVjdGFuZ2xlKHJlY3QpOwotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXpl
ci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
ICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6
Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewot
ICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwot
fQotCi1zdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFk
b3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAg
aWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAg
ICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFy
PiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVu
ZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVy
ID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9t
U2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2Fz
dDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpOwotICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAg
ICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMs
IG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50
KCkpOwotICAgIGVsc2UgewotICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2
ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1
bGFyKTsKLSAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24p
OwotICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hl
ZWxFdmVudFRlc3RNb25pdG9yKCkpOwotICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25O
dWxsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9s
bGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZC
YXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Ny
b2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFy
KHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVG
cm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4o
cmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQot
ewotICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9
IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNP
dmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Ny
b2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Ny
b2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFs
U2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAg
Ly8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFy
IGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBz
Y3JvbGxiYXIncyBzdHlsZS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxl
Q2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wg
aGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAg
ICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5
ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRp
bmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNl
dFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Ny
b2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBv
c2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXIt
PnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVD
aGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFyZWEoKSBjb25zdAotewotICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCi0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7
Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQot
ewotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpZZXMpKSB7Ci0gICAgICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2Uo
KSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19
Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U25hcE9mZnNldHMoKQotewotICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRN
TEVsZW1lbnRzLgotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkg
fHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAg
ICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlzLCAqZG93bmNhc3Q8SFRN
TEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSksICpib3gsIGJveC0+c3R5bGUoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1h
dG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQotYm9vbCBSZW5kZXJM
YXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJl
Y2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgY29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJM
YXllcjogIiArIG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVy
LmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhl
aWdodCgpKTsKLQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiBoYXMgdHJhbnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCYWNrZHJvcEZpbHRl
cigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwot
Ci0gICAgaWYgKGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBi
bGVuZCBtb2RlIl9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAgaWYgKGlzQ29tcG9z
aXRlZCgpKSB7Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3Ry
ZWFtIGludGVncmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3Ry
ZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0u
cmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQot
Ci1pbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV92QmFyCi0gICAg
ICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV92QmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwotfQotCi1pbnQgUmVu
ZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFyCi0gICAgICAgIHx8
ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8
ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2lu
dCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkucmVzaXplcjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBy
ZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVz
aXplQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8
fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zm
c2V0RnJvbVJvb3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXpl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAg
IGlmIChtX3ZCYXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICByZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX2hC
YXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJl
Y3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1f
cmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1pbnQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJM
YXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwotfQotCi1pbnQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgp
KTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29s
dXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKLXsKLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0KLUxheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxz
ZTsKLQotICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJmbG93UmlnaHQo
KSAtIG92ZXJmbG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhlaWdodChyb3VuZFRv
SW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAgICBpbnQgc2Nyb2xs
YWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRl
ckxlZnQoKSk7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkKLSAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3Zl
cmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQ
b2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOwot
ICAgIAotICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkKLXsKLSAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8
fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dY
KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJv
eCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc0hvcml6
b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94
KCktPmNsaWVudFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
LQotICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNs
aWVudEhlaWdodCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsK
LSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikg
JiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0
c0xpa2VBdXRvOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQot
ewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6
SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZ
KCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92
ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxi
YXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwot
ICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFj
dHNMaWtlQXV0bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VS
VChib3gpOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5
IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygp
OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZs
b3coKTsKLQotICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdl
IGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9oQmFyICYmIHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0g
ICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUo
KSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVy
dGljYWxPdmVyZmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBt
YXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92
ZWQuCi0gICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hv
cml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wgYXV0b1ZlcnRpY2Fs
U2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2
aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7
Ci0KLSAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNh
bFNjcm9sbEJhckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJveC0+aGFzVmVydGlj
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1cGRhdGVTZWxmUGFp
bnRpbmdMYXllcigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOwotCi0gICAgICAg
IGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwg
cmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgbV9p
bk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBi
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFu
Z2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICAgICAg
YmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgbV9pbk92
ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOwot
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVy
KCkuaXNCb3goKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJl
bnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKLSAgICB9Ci0K
LSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCi0gICAg
aWYgKG1faEJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0
ZXAoY2xpZW50V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYgKG1f
dkJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVu
dEhlaWdodCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRIZWlnaHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24o
Y2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhpcyBpcyBjYWxsZWQg
ZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9sbE9mZnNldCBvcmln
aW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgLy8gRklYTUU6
IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1t
YXRpYyBzdHlsZSBjaGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2VuZGlmCi0KLSAg
ICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkp
IHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNj
cm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBv
dXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhl
IG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUg
c2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgot
ICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUg
dGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBl
ZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQg
aXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWls
cy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQot
ICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0
KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3Jv
bGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBk
YXRlKCk7Ci0KLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxi
YXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9y
OjpOb1Njcm9sbDsKKyAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCisgICAgICAg
IC8vIElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lm
aWVkIHBhcnRpYWwgYmVoYXZpb3IKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6
Z2V0UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxZID0g
U2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOworICAgIC8vIElmIHdl
J3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJl
Y3QgaXMgZnVydGhlciBkb3duCisgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3Qg
YmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20u
CisgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Ns
b3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4
cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgc2Nyb2xs
WSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwogCi0gICAgaWYgKHJl
Y3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgor
ICAgIExheW91dFVuaXQgeTsKKyAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJl
aGF2aW9yOjpOb1Njcm9sbCkKKyAgICAgICAgeSA9IHZpc2libGVSZWN0LnkoKTsKKyAgICBlbHNl
IGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tKQor
ICAgICAgICB5ID0gZXhwb3NlUmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKKyAg
ICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2Vu
dGVyKQorICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCkgKyAoZXhwb3NlUmVjdC5oZWlnaHQoKSAt
IHZpc2libGVSZWN0LmhlaWdodCgpKSAvIDI7CisgICAgZWxzZQorICAgICAgICB5ID0gZXhwb3Nl
UmVjdC55KCk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5
b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjphdXRv
c2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbkluV2luZG93KQogewotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFkZSBpbiB0
aGUgVUkgcHJvY2Vzcy4KLSAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
LSNlbmRpZgotCi0gICAgcmV0dXJuIHRydWU7CisgICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50
UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRz
KHBvc2l0aW9uSW5XaW5kb3cpOworICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChj
dXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVj
dGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVl
ZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKQorU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29u
c3QKIHsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93Lgot
ICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0
aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBl
dmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWlu
dGluZ092ZXJsYXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQg
anVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFy
cwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNl
Y29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSds
bCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFu
ZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUt
ZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5
U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2Nh
Y2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJ
dCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJz
IHBhaW50IGludG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0
ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNl
dCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1n
ZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWlu
dGluZ1Jvb3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFp
bnRpbmdSb290KQotICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCku
bGF5ZXIoKTsKLQotICAgICAgICBwYWludGluZ1Jvb3QtPnNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoaXMg
Y2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJz
IHR3aWNlLgotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNj
cm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWlu
dE9mZnNldCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykK
LSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9m
ZnNldDsKLQotICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4g
IFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBz
b21ldGltZXMKLSAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3Vycmlu
ZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBj
b250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0
aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFp
bnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkKLSAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAo
bV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSkKLSAgICAgICAgcmV0dXJuOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6
ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3
aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkg
dXAgdG8gdGhlCi0gICAgLy8gZWRnZSBvZiB0aGUgYm94LgotICAgIHBhaW50U2Nyb2xsQ29ybmVy
KGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotICAgIAotICAgIC8v
IFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3Jv
bGwgY29ybmVyLgotICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBkYW1hZ2VSZWN0KTsKLX0KKyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Ny
b2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVj
dCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7
Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7CiAKLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkg
ewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7
Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zm
c2V0LCBhYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmxlbmRN
b2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0g
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkg
c2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBp
dC4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRo
ZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOwotfQorICAg
IGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0
ZXMgYmxlbmRpbmciX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVy
SW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVy
Q29ybmVyUmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOwotICAg
IEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKLSAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKLSAgICAgICAg
cmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOwotICAgICAgICBjb3Ju
ZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgICAgIGNvcm5l
clJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOwotICAg
ICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7Ci0gICAgICAg
IGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICBpZiAo
aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVy
L1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAg
ICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6
ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0
LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0
LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lcklt
YWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250
ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJl
c2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVj
dCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwg
cmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQu
ZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd1RvcCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9
PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSBy
ZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0g
ICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewot
ICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVj
dChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJB
YnNSZWN0KTsKLQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBn
cmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENs
aXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZy
YW1lLgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJh
cikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQpOwotICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlv
dXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3Ju
ZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2Vy
Q29ybmVyLmhlaWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9y
Ojp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50
UmVjdChsYXJnZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5S
ZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwor
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KQorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOwotCi0gICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVuZGVy
ZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAocmVj
dHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xs
Q29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZC
YXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAg
IGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAg
ICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9oQmFyICYmIG1faEJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMu
aG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAg
cmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxh
eW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxv
d1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwogfQogCi1ib29sIFJlbmRlckxh
eWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpv
dmVyZmxvd1JpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0
T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVj
dCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qs
IE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRl
eHQpCkBAIC00MTkyLDE3ICsyNTkyLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAg
ICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWlu
dEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFt
YWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7
Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJ
bmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJl
Y3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpOwpAQCAtNDIyNSw3ICsyNjE0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVj
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAg
ICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5n
IGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJl
IGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRo
YXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1
ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBs
YXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5z
KFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVy
LT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZp
b3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVu
dCkgJiYgbGF5ZXItPnNjcm9sbGFibGVMYXllcigpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNl
c3RvckxheWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjcsNyAr
MjgxNiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9u
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91
bGRuJ3QgaGF2ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cg
Y2xpcHMgb3Igc3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5n
ID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpIHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wg
ZG9lc05vdFVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgPSAhc2Nyb2xsYWJsZUxheWVyKCkgfHwgIXNj
cm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIGJvb2wgY29u
dGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
ZG9lc05vdFVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3du
ZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xsaW5nT25NYWlu
VGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcpIHsKICAgICAg
ICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KCk7CkBAIC00NzIyLDggKzMxMTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAg
ICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAg
ICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRz
LCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICBpZiAoaXNQYWlu
dGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVM
YXllcigpLT5oYXNTY3JvbGxiYXJzKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0
KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFz
dCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIg
Ym91bmRzLgpAQCAtNTE5MSwxOCArMzU4MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hp
bGRDbGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykK
LXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKLSAg
ICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50Lmxh
eWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGlu
Z0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKLSAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwotICAgICAgICByZXN0b3JlQ2xpcChj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAg
IH0KLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEV2ZW50UmVnaW9uRm9yRnJhZ21lbnRz
KGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKQogewogICAgIEFTU0VSVChsb2NhbFBh
aW50aW5nSW5mby5ldmVudFJlZ2lvbkNvbnRleHQpOwpAQCAtNTIzNiw3ICszNjE0LDcgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3Bv
cnRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVy
c2VjdChhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAg
ICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZp
c2libGVSZWN0KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0
VGVzdExheWVyKHRoaXMsIG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhp
dFRlc3RMb2NhdGlvbiwgZmFsc2UpOwpAQCAtNTQ2Nyw5ICszODQ1LDExIEBAIFJlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRl
ckxheWVyKiBjb250CiAgICAgICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAog
ICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRl
c3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9j
YWxQb2ludCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3Vs
dCwgbG9jYWxQb2ludCk7Ci0gICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyLT5jYW5SZXNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2lu
dCkpIHsKKyAgICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGxvY2FsUG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KICAgICB9
CiAKICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRl
IHRoZSBjaGlsZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKQEAgLTU1NDIsMzUg
KzM5MjIsNiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVz
dExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlm
IChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gYm9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNv
bnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkg
ewotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KSB7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94
UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAg
ICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIo
KSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdo
dCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUg
b2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
cmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBm
cmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0g
cmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAg
Zm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0g
ICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQo
aSk7Ci0gICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJh
Z21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVy
KTsKLSAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVz
dExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0
aW9uLnJvdW5kZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9M
YXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBS
ZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJl
Y3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBA
IC02MDExLDM2ICs0MzYyLDYgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVj
dChib29sJiBjbGlwRXhjZWVkc0JvdW5kcykgY29uc3QKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBM
YXlvdXRSZWN0JiBib3VuZHMpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5p
dGUoZW5jbG9zaW5nSW50UmVjdChib3VuZHMpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xl
YXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzID0gSW50UmVjdCgpOwotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hp
bGQtPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQotewotICAgIGZvciAoUmVuZGVyTGF5ZXIq
IGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGQtPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQotICAgIGlm
IChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwotICAg
IHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgcmVj
dC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBS
ZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291
bnRlZCBmb3IuCi0gICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0Lmlu
dGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExheW91dFBv
aW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCi0g
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFu
Z2xlKHJlY3QpOwotfQotCiBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChj
b25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCwgY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
RnJvbVJvb3QsIGNvbnN0IE9wdGlvbmFsPExheW91dFJlY3Q+JiBjYWNoZWRCb3VuZGluZ0JveCkg
Y29uc3QKIHsKICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4K
QEAgLTYzMzcsMjEgKzQ2NTgsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFz
aygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXll
cigpOwogfQogCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5s
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5
ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JT
Y3JvbGxDb3JuZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmct
PmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVy
OjpwYWludHNXaXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yKSBjb25zdAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkg
fHwgYmFja2luZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02MzgyLDExICs0Njg4LDYgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQ
YWludExheWVyRmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1i
b29sIFJlbmRlckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5S
ZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBA
IC02NTEwLDggKzQ4MTEsMTIgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxmUGFpbnRp
bmdMYXllcigpIGNvbnN0CiAgICAgaWYgKCFpc05vcm1hbEZsb3dPbmx5KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgcmV0dXJuIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAg
fHwgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFy
cyA9IHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gc2Nyb2xsYWJsZUxh
eWVyICYmIHNjcm9sbGFibGVMYXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworCisg
ICAgcmV0dXJuIGhhc092ZXJsYXlTY3JvbGxiYXJzCisgICAgICAgIHx8IGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKICAgICAgICAg
fHwgcmVuZGVyZXIoKS5pc0NhbnZhcygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNWaWRlbygp
CkBAIC02NjI4LDcgKzQ5MzMsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnMoKSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFj
a2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJs
ZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKHNjcm9sbGFibGVMYXllcigpICYmIHNj
cm9sbGFibGVMYXllcigpLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRl
ckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0
KSBjb25zdApAQCAtNjYzOCw3ICs0OTQzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAo
IWhhc1Zpc2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFj
ZWQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigp
LT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpKSB7CiAgICAgICAgIGlmICghcmVxdWVzdCkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02NjYzLDM4ICs0OTY4LDYgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkg
Y29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1wdHlDaGlsZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3gg
Y29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNj
cm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYg
KGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsK
LSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAg
ICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxh
eW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxy
ZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURl
ZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJm
bG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwotICAg
IHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAg
ICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAg
IC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdh
eXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgotICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRv
IGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUp
LgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93
WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7
Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUg
JiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZ
ICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsK
LQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIHVwZGF0ZVNjcm9s
bGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVD
aGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
CiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpA
QCAtNjcxNyw2ICs0OTkwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIEZJ
WE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91
Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8vIGxp
a2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAob2xkU3R5bGUpIHsKICAg
ICAgICAgYm9vbCB2aXNpYmlsaXR5Q2hhbmdlZCA9IG9sZFN0eWxlLT52aXNpYmlsaXR5KCkgIT0g
cmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKTsKICAgICAgICAgaWYgKG9sZFN0eWxlLT51
c2VkWkluZGV4KCkgIT0gcmVuZGVyZXIoKS5zdHlsZSgpLnVzZWRaSW5kZXgoKSB8fCB2aXNpYmls
aXR5Q2hhbmdlZCkgewpAQCAtNjcyNiwxOCArNTAwMCwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjpz
dHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkK
LSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cisg
ICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCk7CiAgICAgfQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJl
bmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5v
bmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAg
ICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAg
ICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1f
bWFycXVlZSkKLSAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKKyAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKSB7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y3JlYXRlT3JEZWxldGVNYXJxdWVl
SWZOZWVkZWQoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7CisgICAgfQogCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOwogICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBjYW4g
bWFrZSB0aGlzIGxheWVyIHNlbGYtcGFpbnRpbmcgc28gd2UgbmVlZAogICAgIC8vIHRvIHJlY29t
cHV0ZSB0aGUgYml0IG9uY2Ugc2Nyb2xsYmFycyBoYXZlIGJlZW4gdXBkYXRlZC4KICAgICB1cGRh
dGVTZWxmUGFpbnRpbmdMYXllcigpOwpAQCAtNjc1MCwxNSArNTAyMSwxMiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3JlZmxlY3Rpb24tPnNl
dFN0eWxlKGNyZWF0ZVJlZmxlY3Rpb25TdHlsZSgpKTsKICAgICB9Ci0gICAgCi0gICAgLy8gRklY
TUU6IE5lZWQgdG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFy
cyAoYW5kIHZpY2UgdmVyc2EpLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKLSAgICAKLSAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJl
c2l6ZXJTdHlsZSgpOworCisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT51cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVw
ZW5kZW50RmxhZ3MoKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKQEAgLTY3NzksOTggKzUwNDcs
NiBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCi17Ci0gICAgRnJh
bWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAg
IGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5n
KCk7Ci0gICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJh
bWUoKS5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVy
LT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7
Ci0KLSAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0
VGVzdDsKLSAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJU
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFi
bGVBcmVhKHRoaXMpKTsKLSAgICAKLSAgICBpZiAoaXNTY3JvbGxhYmxlKSB7Ci0gICAgICAgIGlm
ICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgICAgIGFkZGVkT3JSZW1v
dmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9
IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgbV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKLSAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsKLSAgICAgICAgaWYgKGlzU2Nyb2xs
YWJsZSAmJiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgcmVnaXN0
ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxl
cmF0ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKLSAgICAgICAgICAgIC8v
IGFjY2VsZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIu
Ci0gICAgICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JS
ZW1vdmVkKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxDb3Ju
ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHls
ZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgp
KSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIWNvcm5lcikgewotICAgICAgICBjbGVhclNjcm9sbENv
cm5lcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Njcm9sbENvcm5l
cikgewotICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9s
bGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQh
Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAg
ICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6Y2xlYXJTY3JvbGxDb3JuZXIoKQotewotICAgIGlmICghbV9zY3JvbGxDb3Ju
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxw
dHIpOwotICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlUmVzaXplclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5k
ZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVzaXpl
ciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5j
YWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+
c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZXNpemVyKSB7Ci0gICAgICAgIGNsZWFy
UmVzaXplcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc2l6ZXIp
IHsKLSAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7Ci0gICAgICAgIC8v
IEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAg
ICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9yZXNpemVy
LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9yZXNpemVyLT5zZXRT
dHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVz
aXplcigpCi17Ci0gICAgaWYgKCFtX3Jlc2l6ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jl
c2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOwotfQot
CiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlZmxlY3Rpb25MYXllcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fcmVmbGVjdGlvbiA/IG1fcmVmbGVjdGlvbi0+bGF5ZXIoKSA6IG51bGxwdHI7
CkBAIC03MDAyLDcgKzUxNzgsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jv
c3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9
IGxheWVyLnBhcmVudCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3Np
bmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJl
bnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcyNDgsMTEgKzU0MjQsMTMgQEAg
c3RhdGljIHZvaWQgb3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3Ry
ZWFtLCBjb25zdCBXZWJDb3JlOjpSZW4KIAogICAgIHN0cmVhbSA8PCAiICI7CiAKLSAgICBzdHJl
YW0gPDwgbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKTsKLSAgICBzdHJlYW0gPDwgIiAiOwotICAg
IHN0cmVhbSA8PCBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIHN0
cmVhbSA8PCBzY3JvbGxhYmxlTGF5ZXItPmJveFNjcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIHN0
cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCBzY3JvbGxhYmxlTGF5ZXItPmNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKTsKIAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8
PCAiICI7CisgICAgfQogCiAgICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIy
N2RjY2U1ZWVlMDk0ZmVlOWJmNC4uMDQ0MWRkYWI3MmQyYWVlYjg2YzI1NDRmZTAyNWMyMDg1NjQ5
N2VhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUx
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNp
bmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CkBAIC0xNDAsMjAgKzEzOSwyOSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMgewogICAgIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZp
b3I6OkF1dG8gfTsKIH07CiAKLXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNz
IFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRl
ckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVi
bGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsK
ICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJMYXllclNjcm9sbGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7Cisg
ICAgICAgIFN0YXRpYywKKyAgICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNp
dCBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVu
ZGVyTGF5ZXIoKTsKIAorICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyVHlwZTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
KiBzY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBSZW5kZXJMYXll
clNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllcigpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYg
YW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBA
IC0yMjMsNiArMjMxLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25B
bGxvd2VkKGJvb2wgZmxhZykgeyBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0K
ICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYsIExheWVyVHlwZSk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJvcGFn
YXRlIGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29tcG9z
aXRpbmcgewpAQCAtNDExLDggKzQyMiw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAotICAg
IFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7
IH0KLQogICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNT
ZWxmUGFpbnRpbmdMYXllcjsgfQogCiAgICAgYm9vbCBjYW5ub3RCbGl0VG9XaW5kb3coKSBjb25z
dDsKQEAgLTQzMywxMTMgKzQ0MiwxNCBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRSZWN0IHJlY3Qo
KSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uKCksIHNpemUoKSk7IH0KIAotICAg
IEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKSBjb25zdCBmaW5hbDsKLQotICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwotICAgIGlu
dCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLQotICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNv
bnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRo
YXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KLSAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZl
bHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0g
bnVsbHB0cik7Ci0KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhB
bmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7Ci0K
LSAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVk
U2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlw
ZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3Jv
bGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0K
LSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCi0gICAgdm9pZCBzY3JvbGxU
b1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9m
ZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVu
Y2xhbXBlZCk7IH0KLSAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotCi0gICAgdm9pZCBzZXRQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKLSAgICB2
b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKLQotICAgIC8vIFJl
dHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJsZS4KLSAg
ICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIgd2hlbiBj
YWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFibGVBcmVhLgot
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OwotCi0gICAgdm9pZCBhdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7Ci0KICAgICAv
LyAiYWJzb2x1dGVSZWN0IiBpcyBpbiBzY2FsZWQgZG9jdW1lbnQgY29vcmRpbmF0ZXMuCiAgICAg
dm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMmKTsKIAot
ICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIoYm9vbCk7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKLQotICAg
IFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0g
ICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLQotICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3Jv
bGxiYXIoKTsgfQotICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9Ci0KLSAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB2ZXJ0aWNhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIG92ZXJy
aWRlcwotICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQotCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQo
KTsgfQotICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7
Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7
Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2Vu
ZGlmCi0KLSAgICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1
aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVU
b3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAg
Ci0gICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xs
KCkgZmluYWw7Ci0gICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCi0g
ICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGlu
ZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFi
bGUgb3ZlcmZsb3cuCi0gICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7
CiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBv
dmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgogICAgIGJvb2wgaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQogCi0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7
Ci0KLSAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKLSAgICBib29sIGlzUG9p
bnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpOwotICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9s
cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBw
YWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpOwotICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7
Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwotCi0gICAgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciA9IDEpOwogICAgIHZvaWQgYXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYpOwogCi0gICAgYm9v
bCBjYW5SZXNpemUoKSBjb25zdDsKLSAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7Ci0gICAgYm9vbCBpblJlc2l6ZU1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQotICAgIHZvaWQgc2V0SW5SZXNpemVNb2RlKGJv
b2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0KLQogICAgIGJvb2wgaXNSZW5kZXJWaWV3TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUmVuZGVyVmlld0xheWVyOyB9CiAgICAgYm9vbCBpc0Zv
cmNlZFN0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9yY2VkU3RhY2tpbmdDb250
ZXh0OyB9CiAgICAgYm9vbCBpc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2lzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dDsgfQpAQCAtNTU1LDkgKzQ2
NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNo
YW5nZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlz
UmVsYXlvdXRpbmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9z
aXRlZExheWVySW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBh
Z2luYXRpb25JbmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMs
IEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ1BhZ2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25z
dApAQCAtNTc5LDEwICs0ODYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0c0lu
Y2x1ZGluZ0Rlc2NlbmRhbnRzKENsaXBSZWN0c1R5cGUgdHlwZVRvQ2xlYXIgPSBBbGxDbGlwUmVj
dFR5cGVzKTsKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzKENsaXBSZWN0c1R5cGUgdHlwZVRvQ2xl
YXIgPSBBbGxDbGlwUmVjdFR5cGVzKTsKIAotICAgIHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKLSAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKCk7Ci0gICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0KICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIEFTU0VSVCghbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5
KSBoZXJlLCBidXQgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MTA0NAogICAgIC8vIGRpdHRvIGZvciBoYXNWaXNpYmxlRGVzY2VuZGFudCgpLCBzZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMjc3CiAgICAgYm9vbCBoYXNWaXNp
YmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmlzaWJsZUNvbnRlbnQ7IH0KQEAgLTYz
Nyw2ICs1NDAsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0FuY2VzdG9y
Rm9yUG9zaXRpb24oUG9zaXRpb25UeXBlKSBjb25zdDsKICAgICAKICAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3Q7CisgICAgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
KSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNv
bnN0OwogCiAgICAgLy8gVGhlIGxheWVyIHJlbGF0aXZlIHRvIHdoaWNoIGNsaXBwaW5nIHJlY3Rz
IGZvciB0aGlzIGxheWVyIGFyZSBjb21wdXRlZC4KICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdS
b290Rm9yUGFpbnRpbmcoKSBjb25zdDsKQEAgLTY5OCw3ICs2MDMsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIE9wdGlvblNldDxQ
YWludExheWVyRmxhZz4gPSB7IH0sIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPSBTZWN1cml0
eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4sIEV2ZW50UmVnaW9uQ29udGV4dCogPSBudWxs
cHRyKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0Jik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwotICAgIHZvaWQgcGFpbnRPdmVybGF5U2Ny
b2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9
IG51bGxwdHIpOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQgewogICAgICAgICBDbGlw
UmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwgQ2xpcFJlY3RzVHlw
ZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hv
dWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKQpAQCAtNzg0LDExICs2ODgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0
aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljSW5saW5lUG9z
aXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhdGljQmxvY2tQb3NpdGlvbihMYXlv
dXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmc7IH0KLSAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotI2VuZGlmCi0KICAg
ICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaGFzVHJhbnNm
b3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSB0cmFuc2Zv
cm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpAQCAtODU4LDIwICs3NTcsOSBA
QCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBlbnN1cmVCYWNraW5nKCk7CiAgICAg
dm9pZCBjbGVhckJhY2tpbmcoYm9vbCBsYXllckJlaW5nRGVzdHJveWVkID0gZmFsc2UpOwogCi0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLQogICAgIGJvb2wg
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KICAgICB2b2lkIHNldEhhc0NvbXBvc2l0ZWRTY3Jv
bGxpbmdBbmNlc3Rvcihib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcikgeyBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNl
c3RvcjsgfQogCi0gICAgLy8gTGF5ZXJzIHdpdGggdGhlIHNhbWUgU2Nyb2xsaW5nU2NvcGUgYXJl
IHNjcm9sbGVkIGJ5IHNvbWUgY29tbW9uIGFuY2VzdG9yIHNjcm9sbGVyLiBVc2VkIGZvciBhc3lu
YyBzY3JvbGxpbmcuCi0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGJveFNjcm9sbGluZ1Nj
b3BlKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTY3JvbGxpbmdTY29wZTsgfQotICAgIE9wdGlvbmFs
PFNjcm9sbGluZ1Njb3BlPiBjb250ZW50c1Njcm9sbGluZ1Njb3BlKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhUcmFuc3Bh
cmVuY3koT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gKGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNCbGVuZE1vZGUoKSB8fCAo
aXNvbGF0ZXNCbGVuZGluZygpICYmICFyZW5kZXJlcigpLmlzRG9jdW1lbnRFbGVtZW50UmVuZGVy
ZXIoKSkpICYmICgocGFpbnRCZWhhdmlvciAmIFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3Np
dGluZ0xheWVycykgfHwgIWlzQ29tcG9zaXRlZCgpKTsKQEAgLTg4NSwxMSArNzczLDYgQEAgcHVi
bGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVz
LgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91
dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgp
IGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQg
c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7
IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0K
ICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1
bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTgsOCArODAxLDYgQEAgcHVi
bGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3Io
KSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQ
YWludCgpIHsgU2luZ2xlUGFpbnRGcmVxdWVuY3lUcmFja2luZyB7IG1fcGFpbnRGcmVxdWVuY3lU
cmFja2VyIH07IH0KICAgICBib29sIHBhaW50aW5nRnJlcXVlbnRseSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLnBhaW50aW5nRnJlcXVlbnRseSgpOyB9CiAKQEAgLTkz
MCw3ICs4MTEsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFdmVudFJlZ2lvbkludmFsaWRh
dGlvblJlYXNvbiB7IFBhaW50LCBTZXR0aW5nRGlkQ2hhbmdlLCBTdHlsZSwgTm9uQ29tcG9zaXRl
ZEZyYW1lIH07CiAgICAgYm9vbCBpbnZhbGlkYXRlRXZlbnRSZWdpb24oRXZlbnRSZWdpb25JbnZh
bGlkYXRpb25SZWFzb24pOwogCi0gICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBm
aW5hbDsKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0OwogCiBwcml2YXRlOgog
CkBAIC0xMDEwLDkgKzg5MSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyKCk7CiAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdl
KGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQoKTsKLQogICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnIHsKICAg
ICAgICAgQ2hlY2tGb3JSZXBhaW50ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCiAgICAg
ICAgIE5lZWRzRnVsbFJlcGFpbnRJbkJhY2tpbmcgICAgICAgICAgID0gMSA8PCAxLApAQCAtMTAz
MCwxNiArOTA4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMo
UmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPik7
CiAKLSAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKLSAgICAg
ICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAotICAg
ICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAgPSAxIDw8IDEsCi0g
ICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAgICA9IDEgPDwgMiwK
LSAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAotICAgIH07Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRl
ckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnPiA9IHsgfSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7Ci0KICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5h
dGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFBhZ2luYXRp
b25JbmNsdXNpb25Nb2RlKSBjb25zdDsKIAogICAgIExheW91dFBvaW50IHJlbmRlckJveExvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/IGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkubG9jYXRpb24oKSA6IExheW91dFBvaW50KCk7IH0KQEAg
LTEwNzIsNyArOTQwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJh
bnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCog
cGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJh
Z21lbnRzV2l0aFBoYXNlKFBhaW50UGhhc2UsIGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQg
cGFpbnRPdXRsaW5lRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwotICAgIHZvaWQgcGFp
bnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mKTsKICAgICB2b2lkIHBhaW50
TWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Q2hpbGRD
bGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWlu
dFRyYW5zZm9ybWVkTGF5ZXJJbnRvRnJhZ21lbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPik7CkBAIC0xMDk5LDY0
ICs5NjYsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGhpdFRlc3RDb250ZW50cyhjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBsYXll
ckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlcikgY29uc3Q7CiAg
ICAgYm9vbCBoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
LCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlwUmVjdCkgY29uc3Q7Ci0gICAg
Ym9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7
CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVu
ZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0
JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29uc3QgSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9IG51bGxwdHIpOwogCiAg
ICAgYm9vbCBsaXN0QmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheWVy
TGlzdCYsIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0ZVNjcm9s
bERpbWVuc2lvbnMoKTsKLSAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCk7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAg
IGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OwotCi0gICAgYm9vbCBzaG93c092ZXJm
bG93Q29udHJvbHMoKSBjb25zdDsKIAogICAgIGJvb2wgc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXll
cigpIGNvbnN0OwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCi0gICAgYm9vbCBp
c1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwot
ICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFs
OwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgp
IGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgY29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3Qg
ZmluYWw7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmlu
YWw7Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOwot
Ci0gICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7Ci0gICAgSW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOwotICAgIGJv
b2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxh
YmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZv
cmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNv
bnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgYm9vbCBpc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0jZW5kaWYKLSAgICBib29sIHVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmlt
YXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7Ci0KLSNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpOwotI2VuZGlmCi0KLSAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KLSAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7Ci0gICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0KLSAgICBJbnRTaXplIHNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOwotICAgIAogICAgIGJvb2wgYWxs
b3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0OwogCiAgICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5W
aXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwpAQCAtMTE5NiwxNCArMTAxMyw2IEBAIHByaXZhdGU6
CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFic29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNv
b3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50CiAgICAgTGF5b3V0UG9pbnQgYWJz
b2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2
b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAg
ICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7Ci0KICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRp
b24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGJvb2wgYikgIHsg
bV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBiOyB9CkBAIC0xMjE3LDIwICsxMDI2LDcgQEAg
cHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OwogICAgIExheW91
dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OwogCi0gICAgc3RydWN0IE92ZXJmbG93Q29udHJv
bFJlY3RzIHsKLSAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOwotICAgICAgICBJ
bnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwotICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsK
LSAgICAgICAgSW50UmVjdCByZXNpemVyOwotICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9y
UmVzaXplclJlY3QoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9s
bENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOwotICAgICAgICB9Ci0g
ICAgfTsKLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdDsKLQotICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50
UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKLQorICAgIExheWVyVHlwZSBtX2xheWVyVHlwZTsKICAg
ICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBj
b25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0NCwxMCArMTA0MCw2IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX25vcm1hbEZsb3dMaXN0RGlydHk6IDE7CiAgICAgYm9vbCBt
X2hhZE5lZ2F0aXZlWk9yZGVyTGlzdCA6IDE7CiAKLSAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0
aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2Ug
cmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCi0gICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7
Ci0KLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNT
ZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcg
ZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBh
aW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjU5LDE0ICsxMDUxLDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGlu
ZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3Bh
aW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3
ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1Jl
bGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50
U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAg
Ym9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRh
bnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsK
LSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNG
aXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQg
OiAxOwogCkBAIC0xMjg3LDE3ICsxMDc3LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2lu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gOiA0OyAvLyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
CiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6
IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlm
Ci0gICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYK
LQotICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwot
ICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAg
IGJvb2wgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM4LDI1
ICsxMTE3LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAg
ICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3Np
dGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgot
ICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJm
bG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7CiAgICAgCi0gICAgSW50UG9p
bnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgTWFya2FibGU8U2Nyb2xs
aW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOwotICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1h
cmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNl
ZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMg
Zm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFs
dWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRV
bml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjYsMTAgKzExMjgsNiBAQCBwcml2YXRl
OgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdp
dGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4g
bV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3Jv
bGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0
PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9y
ZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRo
YXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2lu
YXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXll
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAppbmRleCA1MTlkMzYxMDc4MDhlMzYyZjdjMDQwZjQyNzhjODgzYTJmMzkwNjFlLi5jZGY5YTlh
NmRkNGI1NTBhY2MyMWQ1MjZhNDAyYTg4NTFjZWE1YjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAj
aW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmll
d0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJF
bWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2Fu
dmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJF
bWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCkBAIC0yNjksNyArMjcwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OndpbGxCZURlc3Ryb3llZCgpCiAjZW5kaWYKIAogICAgIEFTU0VSVChtX293bmluZ0xheWVy
LmJhY2tpbmcoKSA9PSB0aGlzKTsKLSAgICBjb21wb3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENv
b3JkaW5hdGVkTGF5ZXJzKG1fb3duaW5nTGF5ZXIpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBjb21wb3Np
dG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKCpzY3JvbGxhYmxlTGF5ZXIp
OwogCiAgICAgY2xlYXJCYWNraW5nU2hhcmluZ0xheWVycygpOwogfQpAQCAtNDIxLDExICs0MjMs
MTEgQEAgc3RhdGljIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxvd1Rp
bGVkQmFja2luZ0NvdmVyYWdlKGNvbnN0IFJlbmQKIAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNv
dmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJl
YTsKICAgICBib29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcu
aW5MaXZlUmVzaXplKCk7Ci0gICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXpl
KSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkp
CisgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplICYmIGxheWVyLnNjcm9s
bGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdl
IHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAg
ICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBp
ZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
KCkpCiAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZv
clZlcnRpY2FsU2Nyb2xsaW5nOwogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVyYWdlOwpAQCAt
MTIzMiw4ICsxMjM0LDEwIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRl
UGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgaWYgKGNvbXBv
c2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAg
ICAgIExheW91dFJlY3QgYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzID0gYW5jZXN0b3JCYWNraW5n
LT5jb21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsQ29udGFpbmVy
Qm94ID0gc2Nyb2xsQ29udGFpbmVyTGF5ZXJCb3goYW5jZXN0b3JSZW5kZXJCb3gpOwotICAgICAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxP
ZmZzZXQoKTsKLSAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChz
Y3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBv
c2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNj
cm9sbENvbnRhaW5lckJveC5zaXplKCkpOworICAgICAgICBMYXlvdXRTaXplIHNjcm9sbE9mZnNl
dDsKKyAgICAgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSB0b0xheW91dFNpemUoY29tcG9zaXRlZEFuY2VzdG9y
LT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkpOworICAgICAgICBwYXJlbnRHcmFw
aGljc0xheWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigp
IC0gdG9MYXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlvbigpKSAtIHNj
cm9sbE9mZnNldCksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIAogICAgIHJl
dHVybiBwYXJlbnRHcmFwaGljc0xheWVyUmVjdDsKQEAgLTEyODUsNyArMTI4OSw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29t
cG9zaXRlZEFuY2VzdG9yKQogICAgICAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0U2l6
ZShzbmFwcGVkQ2xpcHBpbmdMYXllclJlY3Quc2l6ZSgpKTsKIAogICAgICAgICAgICAgaWYgKGVu
dHJ5LmNsaXBEYXRhLmlzT3ZlcmZsb3dTY3JvbGwpIHsKLSAgICAgICAgICAgICAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xs
T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5n
TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICAgICAgZW50cnkuY2xpcHBpbmdM
YXllci0+c2V0Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbGFz
dENsaXBMYXllclJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMTM5MCw3ICsxMzk1LDkg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxh
eWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIt
PnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSBw
YXJlbnRMYXllckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVy
TGF5ZXItPnNldFNpemUocm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShzY3JvbGxDb250YWluZXJC
b3gud2lkdGgoKSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdodCgpKSkpOwogCi0gICAgICAgIFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpOwor
ICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAg
ICAgICAgIHVwZGF0ZVNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0
U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9m
ZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTQwNCw3ICsxNDExLDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5j
ZXN0b3IpCiAKICAgICAgICAgYm9vbCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9s
bGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5k
ZXJlcigpOwogCi0gICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9s
bFdpZHRoKCksIG1fb3duaW5nTGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXpl
IHNjcm9sbFNpemUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAg
ICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAt
MTQ4OSwxNCArMTQ5NiwxOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25P
ZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3Jv
bGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKSA9
PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5p
bmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9y
aWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0TG9j
YXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0
aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhlIGNvbnRlbnRzIG9mZnNl
dCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwgcmF0aGVyIHRoYW4gYSBwb3Np
dGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRl
bnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0KTsKLSAg
ICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKG1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyLT5wb3NpdGlvbigpLmlzWmVybygpKTsKQEAgLTE5MTEsMTIgKzE5MjIs
MTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJl
cXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpOworICAgIGlmICghbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSk7CiB9CiAK
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIo
KSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5n
TGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKCFtX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVz
TGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Nj
cm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAgLTE5MjQsMTIgKzE5MzksMTYgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlm
ICghaXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgIGlm
ICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGNv
cm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICBpZiAoY29ybmVyUmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBtX293
bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0
aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogbV9vd25pbmdMYXllci5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVM
YXllci0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2Fs
U2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250
YWxTY3JvbGxiYXIoKTsKICAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihzY3Jv
bGxiYXIpOwogfQogCkBAIC0xOTY1LDEwICsxOTg0LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Ny
b2xsCiAgICAgbGF5ZXJzQ2hhbmdlZCB8PSBjcmVhdGVPckRlc3Ryb3lMYXllcihtX2xheWVyRm9y
U2Nyb2xsQ29ybmVyLCBuZWVkc1Njcm9sbENvcm5lckxheWVyLCB0cnVlLCAic2Nyb2xsIGNvcm5l
ciIpOwogCiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9vd25pbmdMYXll
ci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBBU1NFUlQobV9vd25p
bmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisKICAgICAgICAgaWYgKGhvcml6b250YWxTY3Jv
bGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Ny
b2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxh
YmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9s
bGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgVmVydGljYWxT
Y3JvbGxiYXIpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCksIFZlcnRpY2FsU2Nyb2xsYmFyKTsKICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdl
ZDsKQEAgLTE5NzYsNyArMTk5Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVP
dmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAKIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogewot
ICAgIGlmICghbV9vd25pbmdMYXllci5oYXNTY3JvbGxiYXJzKCkpCisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoIXNj
cm9sbGFibGVMYXllciB8fCAhc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBw
aW5nLgpAQCAtMTk5OCwxNiArMjAyMCwxNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVj
dHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBt
X293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpOworICAgIGF1dG8gcmVjdHMgPSBz
Y3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwogCiAgICAgaWYgKGF1dG8q
IGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRp
b25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRp
bmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXll
ci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAg
ICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9v
d25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5
ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAg
fQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAt
MjE2NSw3ICsyMTg3LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGlu
Z0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgICAgICBtX3Njcm9sbGVkQ29u
dGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoeyB9KTsKICAgICAgICAgbV9zY3JvbGxDb250YWlu
ZXJMYXllci0+YWRkQ2hpbGQoKm1fc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tp
bmcobV9vd25pbmdMYXllciwgKnRoaXMpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIGNvbXBvc2l0b3IoKS53aWxsUmVtb3ZlU2Nyb2xs
aW5nTGF5ZXJXaXRoQmFja2luZygqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgKnRo
aXMpOwogCiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxDb250YWluZXJMYXllci5n
ZXQoKSk7CiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIu
Z2V0KCkpOwpAQCAtMjE3NCw5ICsyMTk3LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAg
R3JhcGhpY3NMYXllcjo6dW5wYXJlbnRBbmRDbGVhcihtX3Njcm9sbGVkQ29udGVudHNMYXllcik7
CiAgICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpCi0gICAgICAgIGNvbXBv
c2l0b3IoKS5kaWRBZGRTY3JvbGxpbmdMYXllcihtX293bmluZ0xheWVyKTsKLSAgICAKKyAgICBp
ZiAobV9zY3JvbGxDb250YWluZXJMYXllcikgeworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIGNvbXBvc2l0b3IoKS5kaWRBZGRTY3JvbGxp
bmdMYXllcigqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgfQorCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTI5ODUsOCArMzAxMCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIs
IEdyYXBoCiAgICAgfQogCiAgICAgaWYgKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyICYmIG1fc2Ny
b2xsZWRDb250ZW50c0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgeworICAgICAgICBBU1NFUlQobV9v
d25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CiAgICAgICAgIEZsb2F0UmVjdCBsYXllckRp
cnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0
eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigp
ICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhl
bE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Ny
b2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZSht
X293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBp
eGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVjdCwgc2hvdWxkQ2xpcCk7CiAgICAg
fQogfQpAQCAtMzAzMiw4ICszMDU4LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWlu
dEludG9MYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAg
ICAgIGlmICgmbGF5ZXIgPT0gJm1fb3duaW5nTGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVyLnBh
aW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCi0g
ICAgICAgICAgICBpZiAobGF5ZXIuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYg
IWV2ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29u
dGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKyAgICAgICAgICAgIGlm
IChsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKS0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2
ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNv
bnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQ
YWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZlY3Rz
KGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKQEAgLTMzMjMsMTcgKzMzNTEs
MjIgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgICAgIHBhaW50RGVidWdPdmVy
bGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NM
YXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWludFNj
cm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGly
dHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNl
IGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAg
ICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAg
ICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewot
ICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNS
ZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNT
RVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xs
YWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJS
ZWN0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250
ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLWNvcm5lclJlY3QubG9jYXRpb24oKSk7
CiAgICAgICAgIExheW91dFJlY3QgdHJhbnNmb3JtZWRDbGlwID0gTGF5b3V0UmVjdChjbGlwKTsK
ICAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVCeShjb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwot
ICAgICAgICBtX293bmluZ0xheWVyLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50
KCksIHNuYXBwZWRJbnRSZWN0KHRyYW5zZm9ybWVkQ2xpcCkpOwotICAgICAgICBtX293bmluZ0xh
eWVyLnBhaW50UmVzaXplcihjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwor
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBv
aW50KCksIHNuYXBwZWRJbnRSZWN0KHRyYW5zZm9ybWVkQ2xpcCkpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnBhaW50UmVzaXplcihjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENs
aXApOwogICAgIH0KICNpZm5kZWYgTkRFQlVHCiAgICAgcmVuZGVyZXIoKS5wYWdlKCkuc2V0SXNQ
YWludGluZyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGEyYjU4ZTY2NjkwNjg1ZmNlNmIxYTg4MzQ5YzdmZjNj
ZTY4NTIyNmEuLjc1ZjBiZGVlNDliN2U1YzI4ZmM4ZjZkNGU3NjY3ZGFmZjAxZDViNTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CkBAIC0zMTUzLDcgKzMxNTMsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogCiBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgUmVxdWlyZXNDb21wb3NpdGluZ0RhdGEmIHF1
ZXJ5RGF0YSkgY29uc3QKIHsKLSAgICBpZiAoIWxheWVyLmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVMYXllcigpIHx8ICFsYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBpZiAocXVlcnlEYXRhLmxheW91dFVwVG9EYXRlID09IExheW91dFVwVG9E
YXRlOjpObykgewpAQCAtMzI5Myw3ICszMjkzLDkgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGwK
IAogc3RhdGljIGJvb2wgaXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXllcihjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBvdmVyZmxvd1Njcm9sbExheWVyKQog
ewotICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJmbG93U2Nyb2xs
TGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVChsYXllci5zY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgQVNTRVJUKG92ZXJmbG93U2Nyb2xsTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+Ym94U2Nyb2xsaW5n
U2NvcGUoKSA9PSBvdmVyZmxvd1Njcm9sbExheWVyLnNjcm9sbGFibGVMYXllcigpLT5jb250ZW50
c1Njcm9sbGluZ1Njb3BlKCk7CiB9CiAKIHN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29t
cG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVu
ZGVyTGF5ZXImIGludGVybWVkaWF0ZUxheWVyLCBib29sJiBzYXdJbnRlcm1lZGlhdGVMYXllcikK
QEAgLTQ1NjcsOCArNDU2OSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVj
dCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMg
bm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3Rv
ckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIu
dmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUoc2Nyb2xsYWJsZUxheWVyLT52
aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQogCiAg
ICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBpZiAoaXM8UmVuZGVyQm94PihsYXll
ci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEgKzQ1OTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJ
RCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91bmRMYXllcigpLCBjbGlwTGF5ZXIo
KSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIGZyYW1lVmlldy5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKTsKKwogICAgICAgICBhdXRvJiBiYWNraW5nID0gKmxheWVyLmJh
Y2tpbmcoKTsKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3Iuc2V0Tm9kZUxheWVycyhub2Rl
SUQsIHsgYmFja2luZy5ncmFwaGljc0xheWVyKCksCiAgICAgICAgICAgICBiYWNraW5nLnNjcm9s
bENvbnRhaW5lckxheWVyKCksIGJhY2tpbmcuc2Nyb2xsZWRDb250ZW50c0xheWVyKCksCiAgICAg
ICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICAgICAgbGF5ZXIubGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGxheWVyLmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSB9KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyLAorICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkgOiBudWxscHRyIH0pOwogICAgIH0KIH0KIApAQCAtNDYzMCw4ICs0NjM4LDEwIEBAIFNjcm9s
bGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JT
Y3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNo
YW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
bmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVl
U3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9t
ZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgKmxheWVy
LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdO
b2RlSUQ7CkBAIC00NzY3LDIwICs0Nzc3LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAgIGF1dG8gcmVs
ZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNv
bnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5y
ZW5kZXJlcigpID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3Jv
bGxpbmdTY29wZSgpOwogICAgICAgICByZXR1cm4gbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29w
ZSgpOwogICAgIH07CiAKLSAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmll
dy5sYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKG1fcmVuZGVy
Vmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBt
X3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
IAogICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqc2xvd1JlcGFpbnRPYmplY3RzKSB7CiAgICAg
ICAgIGF1dG8gbGF5ZXIgPSByZW5kZXJlci5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAo
IWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0g
cmVsZXZhbnRTY3JvbGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyKTsKKyAgICAgICAgYXV0byBz
Y3JvbGxpbmdTY29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpsYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBpZiAoc2Nyb2xsaW5nU2NvcGUgIT0gcm9vdFNj
cm9sbGluZ1Njb3BlKSB7CiAgICAgICAgICAgICBhdXRvIGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJ
RCA9IGFzeW5jU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGVJRChyZW5kZXJlcik7CiAgICAgICAgICAg
ICBBU1NFUlQoZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEKTsKQEAgLTQ4MDQsNyArNDgxNSw3IEBA
IFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9y
U2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAgICAgaWYgKG5vZGVJRCA9PSBtX3JlbmRlclZpZXcu
ZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlEKCkpCiAgICAgICAgIHJldHVybiAmbV9yZW5kZXJW
aWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAu
Z2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAu
Z2V0KG5vZGVJRCkuZ2V0KCktPnNjcm9sbGFibGVMYXllcigpOwogfQogCiB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVy
TGF5ZXImIGxheWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4NWIyNjk2
YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uYmZmMjE5YzRiNzkxMTE2N2I2Yzc1YTFj
ZjBhODY1ODhlMTliNjgxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgogI2luY2x1
ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDJjNTlhNDg0
NmFmODQ0NzU1ZWY3MzEwNGFhZjRhMDgxNTFhOGNiMWQuLjM4NjEzYjIyYTUyNGE2NGNiYjA0MjEy
NTViMzA2YjAzMmM4ZWRlYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTk1LDExICs5NSwxNyBAQCB2b2lkIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OmRlc3Ryb3lMYXllcigpCiB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OmNyZWF0ZUxheWVyKCkKIHsKICAgICBBU1NFUlQoIW1fbGF5ZXIpOwotICAgIG1fbGF5
ZXIgPSBtYWtlVW5pcXVlPFJlbmRlckxheWVyPigqdGhpcyk7CisgICAgLy8gRklYTUU6IEhvb2sg
aW4gb3B0aW1pemF0aW9uIHRvIG9ubHkgY3JlYXRlIFJlbmRlckxheWVyU2Nyb2xsYWJsZSwgaWYg
bmVjZXNzYXJ5LgorICAgIG1fbGF5ZXIgPSBtYWtlVW5pcXVlPFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4oKnRoaXMpOwogICAgIHNldEhhc0xheWVyKHRydWUpOwogICAgIG1fbGF5ZXItPmluc2VydE9u
bHlUaGlzTGF5ZXIoUmVuZGVyTGF5ZXI6OkxheWVyQ2hhbmdlVGltaW5nOjpTdHlsZUNoYW5nZSk7
CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Ny
b2xsYWJsZUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllciA/IG1fbGF5ZXItPnNj
cm9sbGFibGVMYXllcigpIDogbnVsbHB0cjsKK30KKwogYm9vbCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0OjpoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fbGF5ZXIg
JiYgbV9sYXllci0+aXNTZWxmUGFpbnRpbmdMYXllcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggYTNiM2RjYWRjYTZkNTA0
Mzc3MTNkYjcyZWEyMmI2MzFmZmUyZGJhNy4uODU3ODZjMDgyZjlhYjRlMWE2NmUzYmRiYzdlYmQz
ODg3ODMxZmRjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCkBAIC0yOCw2ICsyOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXll
clNjcm9sbGFibGU7CiAKIHN0cnVjdCBSZXBhaW50TGF5b3V0UmVjdHMgewogICAgIExheW91dFJl
Y3QgbV9yZXBhaW50UmVjdDsgLy8gVGhpcyByZWN0IGlzIGNsaXBwZWQgYnkgZW5jbG9zaW5nIG9i
amVjdHMgKGUuZy4sIG92ZXJmbG93OmhpZGRlbikuCkBAIC00Nyw2ICs0OCw4IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIq
IGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQogCisgICAgV0VCQ09SRV9F
WFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdDsKKwog
ICAgIHZvaWQgc3R5bGVXaWxsQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUmIG5ld1N0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhMTBlN2U0ZDEw
ZGRlNGMwZGFlNTM5Y2IzYjYzMjY5YzJiYTU0OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApAQCAtMCwwICsxLDIw
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBD
b21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6Cisg
KiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9u
IDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmll
c2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAq
ICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4u
ZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJz
a3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBm
b3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0
dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBw
bGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9m
IG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAq
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUg
Y2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIFNjcm9sbGluZ1Njb3BlIG5leHRTY3JvbGxpbmdTY29wZSgp
Cit7CisgICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJlbnRTY29wZSA9IDA7CisgICAgcmV0
dXJuICsrY3VycmVudFNjb3BlOworfQorCitERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5
ZXJNb2RlbE9iamVjdCkKKyAgICA6IFJlbmRlckxheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVj
dCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZSkKKyAgICAsIG1faW5SZXNpemVN
b2RlKGZhbHNlKQorICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1f
aW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEoZmFsc2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKKyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxz
ZSkKKyAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCit7CisgICAgbV9pc1Nl
bGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgaWYg
KGlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKKworICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKKyAgICAgICAgLy8gV2Ug
c2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9s
bCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVs
ZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOworICAgICAgICBpZiAoIW1fc2Nyb2xs
UG9zaXRpb24uaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJl
bnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworICAgIH0KK30KKworUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKCkKK3sKKyAgICBpZiAoaW5SZXNpemVN
b2RlKCkpCisgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVM
YXllckRlc3Ryb3llZCgpOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEo
dGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICBkZXN0cm95U2Nyb2xs
YmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVy
ZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJT
Y3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKworSW50U2l6ZSBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OworCisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCBy
b3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUo
c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIElu
dFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNl
dFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRo
KCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAg
ICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCks
IHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9
CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQocmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkK
KyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKS0+Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVy
biBtX3Njcm9sbFNpemUud2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94KCkpOworICAgIGlm
IChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29s
dXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRh
KQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8v
IGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dp
ZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsK
KworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7
CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3Rh
dGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFk
anVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAg
ICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNx
cnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1
cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Ny
b2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRq
dXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0
YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xs
RnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKK3sKKyAgICBJbnRQb2ludCBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigp
Lmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNr
IGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBX
aGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29o
ZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGlm
IChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlv
bi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFz
dEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9
IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0
aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNldFdpZHRoKDApOworICAgIGlm
IChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQor
ICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhl
IHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFi
bGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAg
ICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1w
ID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisK
KyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxP
ZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQp
OworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9
IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdl
IGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIElu
dFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zm
c2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJl
bmRlcmVyKCkucGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNj
cm9sbGFibGUgZnJhbWVzLgorICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRB
cmVhKTsKKworICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVw
ZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBj
YW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAgICAgICAgLy8g
aGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQg
bm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAg
ICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsK
KworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBk
byB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Cisg
ICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqc3RhdGlj
X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKSA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBT
Y3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1w
ZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNs
YW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNs
YW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsK
KyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Ny
b2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNl
dFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlv
bik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9u
KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3Vy
cmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsK
KworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Cisg
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxP
ZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlv
dXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRv
WFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBw
b3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24o
cG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0
ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCks
IHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGlu
ZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkK
K3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlv
biksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zm
c2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1w
aW5nKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQorewor
ICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBXVEY6Om51bGxvcHQ7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0
Cit7CisgICAgUmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlIHJlbmRlclRyZWVNdXRh
dGlvbkRpc2FsbG93ZWRTY29wZTsKKworICAgIGF1dG8gaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSA9
IFtdKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAgICAgICByZXR1cm4gaXM8UmVuZGVy
Qm94PihsYXllci5yZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGxheWVyLnJlbmRl
cmVyKCkpLmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOworICAgIH07CisKKyAg
ICBpZiAoaW5jbHVkZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYgJiYgaXND
b25zaWRlcmVkU2Nyb2xsYWJsZSgqdGhpcykpCisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJl
bmRlckxheWVyU2Nyb2xsYWJsZSo+KHRoaXMpOworCisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIg
PSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNj
cm9sbGFibGUoKm5leHRMYXllcikpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0TGF5ZXItPnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQo
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6
OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgaWYgKHJlYXNvbiA9
PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgeworICAgICAg
ICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0
cnVlKTsKKyAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Cit7Cisg
ICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3Zl
cmZsb3coKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3Zl
cmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNj
cm9sbHNPdmVyZmxvd1koKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Nj
cm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUu
CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBp
ZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3Jv
bGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1f
dkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1
YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6
IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8v
IERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBj
b3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3Jv
bGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hh
bmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIo
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAg
ICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxi
YXI+IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAg
ICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIGFj
dHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGJv
b2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVy
KSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVk
b1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJT
dHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3Jv
bGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRl
cmVyKS5lbGVtZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6
OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplOjpSZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwg
b3JpZW50YXRpb24pOworICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRz
KCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRv
cihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0
LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0
cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJl
ZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gbV9oQmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAg
ICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKwor
ICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxw
dHI7Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVu
QnlTdHlsZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQor
CitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKwor
ICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAg
ICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0Nv
bnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7
IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5leHRMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkgJiYgbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBl
YXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0
ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1l
bnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJl
YSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94
LCBib3gtPnN0eWxlKCkpOworfQorI2VuZGlmCisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNj
ZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUg
b2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQoreworICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpkaWRVcGRh
dGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3Jv
bGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgcGFn
ZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9
CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJl
cigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3Jl
aWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZM
T1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkg
fHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3Jv
bGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAg
ICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAg
ICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIo
KS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2Nh
bFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3Rz
LnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENv
cm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFy
ICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Cisg
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
CisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisg
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
KyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRv
IGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KKyAgICBpZiAocGFp
bnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAgIGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBNb3Zl
IHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuIFdlIG5vcm1hbGx5IG1vdmUgYW5k
IHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKKyAgICAvLyB3aWRn
ZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdoZW4g
eW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBjb250YWlucyBmaXhlZCBwb3NpdGlv
bmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXplKGFk
anVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNj
cm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KKyAgICBpZiAobV9o
QmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV9oQmFyLT5w
YWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAobV92QmFyICYmICFsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdl
UmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhh
dmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKKyAg
ICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRq
dXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisgICAgCisgICAgLy8gUGFpbnQgb3VyIHJl
c2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisg
ICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3Qp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29y
bmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIWFi
c1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Nj
cm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250
ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBz
Y3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0
LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBS
ZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0
cy5yZXNpemVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAg
aWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAg
ICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChj
b250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNS
ZWN0KTsKKworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5
IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBw
aW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1l
LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OworICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRS
ZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIu
c2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29y
bmVyLmhlaWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNS
R0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VUaGlja25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVj
dChsYXJnZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5
b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zmc2V0IG9y
aWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucygpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhN
RTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3Jh
bW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKwor
ICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQg
c2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAgICAvLyB0byBwdWxs
IG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0
aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFt
cFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9k
ZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMu
CisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRo
ZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0
IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dl
ZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRh
aWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisj
ZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkp
CisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNj
cm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgc2V0
TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldE5lZWRzQ29tcG9z
aXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdV
cGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplKCkgY29uc3QK
K3sKKyAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRo
ZXkgbmV2ZXIgaGF2ZQorICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRv
ICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbworICAgIC8vIHdlIHdhbnQgdG8g
YWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgorICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExh
eW91dFNpemUmIG9sZE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcG9z
c2libGUgb24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5vdCByaWdodCBub3cuCisgICAgaWYg
KCFpblJlc2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwgIXJlbmRlcmVyKCkuZWxlbWVudCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSBy
ZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9IHJlbmRlcmVyIGlzIHdpdGggY29udGlu
dWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KKyAgICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxk
IHN0aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhlbSBleHBsaWNpdGx5LgorICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9
IGRvd25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVyZXIoKSk7CisKKyAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQuZnJh
bWUoKS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZsb2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7
CisKKyAgICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1bWVudC52aWV3KCktPndpbmRvd1RvQ29u
dGVudHMoZXZ0LnBvc2l0aW9uKCkpOworICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQ
b2ludChhYnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQb2ludCkpOworCisgICAgTGF5b3V0U2l6
ZSBuZXdPZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOworICAgIG5l
d09mZnNldC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAgIG5l
d09mZnNldC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAg
CisgICAgTGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExheW91dFNpemUocmVuZGVyZXItPndpZHRo
KCkgLyB6b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKKyAgICBM
YXlvdXRTaXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+bWluaW11bVNpemVGb3JSZXNpemluZygp
LnNocnVua1RvKGN1cnJlbnRTaXplKTsKKyAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJl
c2l6aW5nKG1pbmltdW1TaXplKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zm
c2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNl
dC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdP
ZmZzZXQud2lkdGgoKSk7CisgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1
c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKKyAgICB9CisgICAgCisgICAgTGF5b3V0U2l6ZSBkaWZm
ZXJlbmNlID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4
cGFuZGVkVG8obWluaW11bVNpemUpIC0gY3VycmVudFNpemU7CisKKyAgICBTdHlsZWRFbGVtZW50
KiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCk7CisgICAg
Ym9vbCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5zdHlsZSgpLmJveFNpemluZygpID09
IEJveFNpemluZzo6Qm9yZGVyQm94OworCisgICAgUmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5z
dHlsZSgpLnJlc2l6ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpWZXJ0aWNhbCAmJiBk
aWZmZXJlbmNlLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZy
b20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5kZXJlci0+bWFyZ2luTGVmdCgp
IC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJl
bmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lk
dGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAv
IHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndp
ZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9CisKKyAgICBpZiAocmVzaXplICE9
IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CisgICAgICAgIGlm
IChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8v
IE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9w
LCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQg
YmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBf
bHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAg
ICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9J
bnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BY
KTsKKyAgICB9CisKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKKworICAgIC8vIEZJWE1F
IChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFz
IG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
T3ZlcmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVz
ZVRyYW5zZm9ybXMpOworICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkp
CisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51
bGxwdHIpOworCisgICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFu
Y2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUg
SGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCBmbGFncz8KKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQorewor
ICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOworCisgICAgTE9H
KFNjcm9sbGluZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1h
cChVc2VUcmFuc2Zvcm1zKTsKKyAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZn
ZW9tZXRyeU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphZGRCbG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQoreworICAgIG1fYmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMo
UmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5
ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlDbGVhckJs
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKQoreworICAgIG1f
YmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgpOworICAgIHJlY3Vyc2l2ZWx5Q2xl
YXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vy
c2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJMYXllciogbGF5ZXIpCit7Cisg
ICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gY2hpbGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhjaGlsZCk7Cisg
ICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2NrU2VsZWN0
aW9uR2FwcygpCit7CisgICAgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKHRo
aXMpOworICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzOworICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBpZiAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkK
KyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5v
dmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lv
bnMgbm90IGFjY291bnRlZCBmb3IuCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQorICAg
ICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBS
ZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291
bnRlZCBmb3IuCisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmVuZGVyZXIoKS5y
ZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5ZXJQ
YWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVj
dCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7CisgICAg
cGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGlu
Z092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzID0gZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNr
aW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7
Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2lu
Zy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSA6IG51bGxwdHI7Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIg
d2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBi
YWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9u
bHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcG9zaXRv
cigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdAoreworICAgIHJldHVybiBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigp
OworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBv
dmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxi
YXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYm
ICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9
CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZs
b3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29s
IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92
ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92ZXJmbG93
IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Cisg
ICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhh
bmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBk
by4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92
ZXJmbG93WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxv
d1koKTsKKworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0
aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxi
YXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigp
ICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9y
aXpvbnRhbFNjcm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJv
eC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxl
RGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xs
YmFyKSk7CisgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIpOworICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxi
YXIpOworCisgICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJh
cnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBz
d2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2Vl
IGJ1ZyAxMTk4NSkuCisgICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIg
JiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwg
JiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5h
YmxlZCh0cnVlKTsKKworICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAm
JiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFi
bGVkKHRydWUpOworCisgICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlz
dCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExp
c3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVy
ZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGlj
YWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92
ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUg
b3IgZGlzYWJsZS4KKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVu
ZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV9oQmFyLT5z
ZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgaWYgKG1fdkJhciAmJiBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIp
KQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAg
ICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFn
YWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCisgICAgYm9vbCBhdXRvSG9y
aXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJv
eC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICBpZiAoYXV0b0hvcml6
b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsK
KyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3Io
KSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92
ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0Jl
aGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKKworICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAg
ICAgIHJlbmRlcmVyKCkucmVwYWludCgpOworCisgICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxl
KCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7CisgICAgICAgICAgICBpZiAoIW1faW5PdmVy
Zmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlU
aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFy
c0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3Jv
bGxCYXJDaGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1
ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVy
KCkubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50ICYm
IHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKKyAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5T
aXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIHJh
bmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1faEJhcikgeworICAgICAg
ICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAg
ICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOworICAg
ICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Ny
b2xsU2l6ZS53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQg
Y2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAg
aW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAg
ICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0
ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9s
bFNpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckxheWVyKiBsYXllciwgUmVuZGVyR2VvbWV0cnlNYXAqIGdl
b21ldHJ5TWFwLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgZm9yIChSZW5kZXJMYXllciog
Y2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gY2hpbGQtPnNj
cm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChj
aGlsZCwgZ2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5
TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxGbGFnPiBmbGFncykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVk
LCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCisgICAgLy8gdGhlc2UgZmxh
Z3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cgaXMgdmFs
aWQuCisgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CisKKyAgICAvLyBJZiB3
ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50cywgdGhl
cmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKKyAgICAvLyBvdXIgcmVjdGFuZ2xlcyBhcyB0aGV5
IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBleHBlY3Rl
ZCB0bworICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCisgICAgaWYg
KCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVyUG9zaXRp
b24oKTsKKyAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQorICAgICAgICBmbGFncy5hZGQoSGFzQ2hh
bmdlZEFuY2VzdG9yKTsKKworICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0NoYW5nZWRB
bmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVyZmxvd1Nj
cm9sbCB9KSkKKyAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKKworICAgIGlmIChyZW5kZXJlcigp
LnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCisgICAgICAgIGZsYWdz
LmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKKworICAgIGlmIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2VlbkFuY2Vz
dG9yV2l0aE92ZXJmbG93Q2xpcCk7CisgICAgCisgICAgYm9vbCBzaG91bGRDb21wdXRlUmVwYWlu
dFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0
b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2VlbkFuY2Vz
dG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOworICAgIGJv
b2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOworICAgIGJvb2wgc2hv
dWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21wdXRlUmVw
YWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7CisgICAgaWYg
KHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBw
aW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOworCisgICAgaWYgKHNob3VsZENvbXB1dGVS
ZXBhaW50UmVjdHMpIHsKKyAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0IGNvbXB1
dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KKyAgICAgICAg
aWYgKGlzVmlzdWFsbHlFbXB0eSkKKyAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3RzKCk7Cisg
ICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNvbnRhaW5l
ciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCisgICAgICAgICAgICBjb21wdXRlUmVwYWludFJl
Y3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7CisgICAg
fSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1XaWRnZXQo
KSkgeworICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNvbnRlbnRz
IGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFpbnQgYXJl
YSB0cmFuc2l0aW9ucyBmcm9tCisgICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3ZlcmZsb3cu
IFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUgaW52YWxp
ZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTg4MTIx
KS4KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3JyZWN0Lgor
ICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVu
ZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRlcmVyKCku
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBh
aW50KCkpKTsKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0
cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94ID09IHJl
bmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJGb3JS
ZXBhaW50KCkpKTsKKyAgICB9CisKKyAgICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwodGhpcywgZ2VvbWV0cnlNYXAsIGZsYWdzKTsgICAgCisKKyAgICAvLyBXZSBk
b24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24g
d2hpY2ggZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKKyAgICAvLyBvZiBhbiBvYmplY3QsIHRo
dXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRo
ZSBsYXllciBwb3NpdGlvbiB3YXMKKyAgICAvLyB1cGRhdGVkIGFib3ZlLgorCisgICAgaWYgKG1f
bWFycXVlZSkgeworICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlv
biA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Cisg
ICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3Np
dGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQorICAgICAg
ICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKKworICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2Vy
cygpOworfQorCitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGFtcFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8pCit7CisgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6
IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2xpcFRvUmVjdChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Cisg
ICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9M
YXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9j
YXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAgICAgICAg
ICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsK
KyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50
KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRU
b0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4g
dGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5
ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAgIGlmIChsYXllckZyYWdtZW50
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYm9yZGVyQm94
UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9y
ZGVyQm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
CisKKyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZy
YWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAo
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAg
ICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNv
cm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVy
biBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21C
b3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJS
ZWN0LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRv
bVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4
WE1heFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5t
YXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6
ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxh
eWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExh
eWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1
dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZElu
dFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYg
KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiBy
ZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2lu
dCgpKSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRU
ZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NF
UlQoYm94KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisKKyAgICBt
X3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxv
d0xlZnQoKSkpOworICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxv
d0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOworCisgICAgaW50IHNjcm9sbGFibGVMZWZ0T3Zl
cmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwor
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAg
ICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwor
ICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkg
LSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9s
bGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKKyAgICAKKyAgICBj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8
IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxS
ZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUs
IHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Cisg
ICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgcmVu
ZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSkgeworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBt
X3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9yZXNpemVy
KQorICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBh
Z2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
cmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0Vt
cHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xs
Q29ybmVyOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25z
dCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHNj
cm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsK
KworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJl
bmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Cit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3Qp
IGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAg
IHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIEludFBvaW50
IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNv
bnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Cit9
CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2lu
dCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigm
cmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNl
dChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7
CisgICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitT
Y3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxpbmdOb2RlSUQoKSBj
b25zdAoreworICAgIGlmICghaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGlu
YXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNT
Y3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJz
KQorICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworICAgIAor
ICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7
IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNj
cm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAt
IHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JT
dWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsK
KworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9s
bE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KKyAgICBTY3Jv
bGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAgICBzdHJldGNo
LnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXpl
LmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQu
eSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKKworICAg
IGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3Jv
bGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Ny
b2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQor
ICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6
ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJldGNoOworI2Vs
c2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFBvaW50IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzSGFuZGxp
bmdXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2
ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zKCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3Jt
cyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChh
dXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
YXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAg
IHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2VuZGlm
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpm
b3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBj
b25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxp
bmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9s
bEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdz
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
Y29uc3QKK3sKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllclNjcm9s
bGFibGU6ICIgKyBtZXNzYWdlKTsKK30KKworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCBtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigq
cmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgaWYg
KCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAg
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCit7Cisg
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwg
bV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xs
VHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlv
biBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkp
IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRl
ZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAg
ICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9s
bERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNl
ZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNl
dCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAg
ICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0
LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRX
aWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAg
ICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Ny
b2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09m
ZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
fQorICAgIAorICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJl
bnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFu
aW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBh
IHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVz
ZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5
IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisg
ICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAg
ICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsK
KworICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKKworICAgIC8vIFVw
ZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5
IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8vIFdl
IGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBh
IGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICghdmll
dy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewor
ICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1
cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFtZVZp
ZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlmICghbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcg
Y29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5
IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVy
IHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVy
cywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcg
dGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCisg
ICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYgKHVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nR2VvbWV0cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlv
biBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hp
Y2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0
cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHBhaW50LW9yZGVyIHBhcmVudC4KKyAg
ICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBwYWludE9yZGVyUGFyZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRh
dGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xp
cCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCku
aW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdl
T3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOworICAgIH0KKworICAgIEZy
YW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7
CisgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Ny
b2xsaW5nCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsK
KyAgICAKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBh
aW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBh
aW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWlu
dENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9
IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCisg
ICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZyYW1lLmV2
ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsK
KyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBzZXROZWVkc0Nv
bXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBk
YXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFp
bnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0K
KworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAg
ICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hl
ZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQt
PmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAg
IGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFu
Z2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50
c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhp
cyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21w
b3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMg
Z3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVl
ZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJz
IGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3Rv
ciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKKyAg
ICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAg
IGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5
cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5
IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcu
CisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVk
VXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAgIGNv
bXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6
Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGJhck9m
ZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlv
bigpKTsKKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9Owor
fQorCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNl
dChib29sIGhhc092ZXJmbG93KQoreworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9
IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAg
ICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVu
ZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUg
PSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVt
b3ZlZCA9IGZhbHNlOworICAgIAorICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisgICAgCisgICAg
aWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7
CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVkT3JS
ZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywg
c28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNl
bHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYm
ICFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZW5kZXJCb3goKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOworCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMudmVydGljYWxTY3JvbGxiYXIpOworICAgIH0KKyAgICAKKyAgICBpZiAobV9oQmFyKSB7Cisg
ICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Cisg
ICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwor
ICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikK
KyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7Cisg
ICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihy
ZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpT
Y3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBt
X3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRl
cmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBB
IHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Ny
b2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Njcm9sbENvcm5l
ci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsK
KyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVh
bFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byBy
ZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5n
ZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRl
cmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAg
Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVz
aXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAg
ICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEK
KyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Jl
c2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXIt
PnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIg
PSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1BsYXRmb3Jt
UmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYg
cmVzaXplckNvcm5lclJlY3QpCit7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFn
ZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Cisg
ICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAg
ICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigp
KTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwor
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Cisg
ICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
cmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXpl
ckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNp
emVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAs
IDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250
ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBp
eGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3Ju
ZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5l
ckltYWdlLCBpbWFnZVJlY3QpOworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGU6Ok92ZXJmbG93
Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAg
YXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAv
LyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxv
d0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRp
bmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKwor
ICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBi
b29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxi
YXIobV92QmFyLmdldCgpKTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9v
bCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5v
bmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jp
em9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8ICho
YXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVO
b25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsK
KyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25l
IHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29y
bmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAg
ICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAg
T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAg
ICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAg
ICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAg
ICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAg
ICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3Ju
ZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250
YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAg
ICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAg
ICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJS
ZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAg
ICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAg
ICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0
byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21M
ZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5l
cigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgp
LCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNp
emUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNp
emUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAg
cmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAo
aGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAg
ICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1l
Ojp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6
ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3Mg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3Qg
SW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMu
dmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3Qp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2Vj
dHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkKK3sKKyAg
ICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBT
ZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgICAg
IGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAg
bV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVk
KCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5z
dHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5k
ZXJlcigpLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgICAgICBt
X21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOworICAgICAgICBtX21h
cnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQor
ICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMoTGF5b3V0
UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9s
bCBvZmZzZXQuCisgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CisgICAgaWYgKHJl
bmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBl
bmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigp
KSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlID0gcG9z
aXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIC8vIEZvciBw
b3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25l
ZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCisgICAgICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVu
dFNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAg
ICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUt
PnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5s
aW5lPihwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4ocG9zaXRp
b25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bvc2l0aW9u
ZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgICAgICAgICAg
ICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBB
U1NFUlQocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KSk7CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAoYXV0byog
cGFyZW50TGF5ZXJTY3JvbGxhYmxlID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7
CisgICAgICAgICAgICBpZiAocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXpl
KHBhcmVudExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAgICAgICAg
IEFTU0VSVChwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7
CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXJTY3JvbGxhYmxl
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBjb25zdCBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXIgPSBwYXJlbnRMYXllci0+cGFyZW50
KCk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIGVuY2xvc2luZ0xh
eWVyU2Nyb2xsYWJsZSA9IG51bGxwdHI7CisgICAgICAgICAgICB3aGlsZSAoZW5jbG9zaW5nTGF5
ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVu
Y2xvc2luZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyID0gZW5jbG9zaW5nTGF5ZXItPnBh
cmVudCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXJT
Y3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ0xheWVyU2Nyb2xs
YWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgICAgICBtX2JveFNj
cm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmICghbV9jb250ZW50
c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9s
bGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNj
cm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
IHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAg
ICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2JveFNjcm9sbGluZ1Njb3BlOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKQorewor
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZl
IHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBt
X2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+
c3R5bGVDaGFuZ2VkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmM3NmJiMmIzMjc5YmFkYjA2ZWQ2
ZDc3MTgwNzA3NDAwNDZkMjE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNj
YXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9y
czoKKyAqICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQg
QmFyb24gPGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIg
PGNiaWVzaW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29t
PgorICogICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2ll
c3Nlbi5kZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMg
WmJhcnNreSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVy
bmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhl
IHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAx
LjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikg
b3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQg
YXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwg
aW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisg
KiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxv
dyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVy
bXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkg
YW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGlu
Z3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFu
ZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFz
IHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25z
IGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxl
IHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNjcm9sbGlu
Z1Njb3BlID0gdWludDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBmaW5hbAor
ICAgIDogcHVibGljIFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxh
eWVyU2Nyb2xsYWJsZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOwor
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNpdCBSZW5k
ZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZpcnR1YWwg
flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2aXNpYmxl
U2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmlu
YWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFs
OworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgp
IGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
KworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRo
ZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXpl
JiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAg
IGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwg
U2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxU
b09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBT
Y3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xs
VG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAg
ICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Ny
b2xsOjpObyk7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlv
biYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFy
ZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkg
eyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAg
IHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVz
dCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1FOiBUaGlz
IGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkg
d2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6
ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIHNj
cm9sbHNPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIg
fHwgbV92QmFyOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwor
ICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8U2Nyb2xs
YmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVz
dHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhhc0hvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0K
KyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxT
Y3JvbGxiYXIoKTsgfQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKKyAgICBT
Y3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Ny
b2xsUG9zaXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KKyAgICBT
Y3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKKwor
ICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wg
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisgICAg
Ym9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNp
bGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
PSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRT
dGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAg
dm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0
cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3Qg
bG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisg
ICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBpbnQgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0
OworICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBj
b25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXpl
Q29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZvaWQgcGFp
bnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZh
bHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJl
c2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0Owor
ICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNp
emUmKTsKKyAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVN
b2RlOyB9CisgICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2Rl
ID0gYjsgfQorCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgp
OworCisgICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVj
dCYpOworICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB2b2lk
IHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Ny
b2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9
IG51bGxwdHIpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0K
KyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsK
KworICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxl
ZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xs
aW5nLgorICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxTY3JvbGxp
bmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3Jv
dW5kKCkgY29uc3Q7CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAg
dm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJh
cnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7
IH0KKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0KCk7CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnIHsKKyAgICAgICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAwLAorICAgICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAg
PSAxIDw8IDEsCisgICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAg
ICA9IDEgPDwgMiwKKyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAg
ICAgID0gMSA8PCAzLAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxP
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZs
b3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hvcml6b250
YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAgIGJvb2wg
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisg
ICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGlu
dGVyZmFjZQorICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2Rl
SUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNv
bnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwor
ICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVk
ID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNz
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFs
OworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9URTogVGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0
IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3Np
dGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOyAg
CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsK
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisK
KyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3Ju
ZXIoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIHZvaWQgY2xlYXJSZXNp
emVyKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7CisKKyAgICBzdHJ1Y3Qg
T3ZlcmZsb3dDb250cm9sUmVjdHMgeworICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXI7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyOworICAgICAgICBJbnRSZWN0IHJlc2l6ZXI7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7
CisgICAgICAgIH0KKyAgICB9OworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisjaWYgMAorcHJpdmF0ZToK
KyAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRh
dGVMYXllclBvc2l0aW9uc0ZsYWc+KiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0
ZUxheWVyUG9zaXRpb25zRmxhZz4pOworCisgICAgdm9pZCBwYWludEJhY2tncm91bmRGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0Nv
bnRleHQmIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29u
c3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKworICAgIHZvaWQg
cGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhp
Y3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisg
ICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29s
IGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYs
IE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JS
ZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwor
ICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zvcm0oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0
ID0gTGF5b3V0U2l6ZSgpKTsKKworICAgIGJvb2wgc2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRp
b24oR3JhcGhpY3NDb250ZXh0JiwgYm9vbCYgZGlkUXVhbnRpemVGb250cyk7CisjZW5kaWYKKwor
ICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAgIHZvaWQgY3JlYXRlT3JEZWxldGVNYXJxdWVl
SWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0
aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6
aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworICAg
IGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93
UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
KyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDog
MTsKKyNlbmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAx
OworI2VuZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
KyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Nyb2xsUG9z
aXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91
ciBzY3JvbGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAgLy8gRm9y
IGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAg
IFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7
CisKKyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICBN
YXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdT
Y29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2Nv
cGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9t
YXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9s
ZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJl
bmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5cGUoKSA9
PSBXZWJDb3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0OGUyNC4u
ZTQ1NmM2YzhhNTU4MzIwNGY2M2FlZmI2OGU4YmMwMzBiNmQ3NjFiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1
ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWlu
dEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5LDEwICs4
NzksOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxp
c3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRvKiBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8
ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBi
b29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQpAQCAtODky
LDcgKzg5MSwxMCBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKQogCiBib29sIFJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKQogewotICAgIHJldHVybiBlbmNsb3NpbmdMYXllcigpICYmIGVuY2xvc2lu
Z0xheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKyAgICBh
dXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGxh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2ZTZiZmJlNDBhNjQ0MTE2NDQ1OWFhNjc4MGQ4Yi4uMWJh
NWE2MDIxZThkMjEzYWJkNDI0ZTdlZWY1MjM4NGJmNDAxOTBjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAtNDksMTQgKzQ5LDE0IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1hcnF1ZWVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotUmVuZGVyTWFycXVl
ZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCitSZW5kZXJNYXJxdWVlOjpSZW5k
ZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxh
eWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAppbmRleCAxYzc4ODQ5NWUw
ZTg4NTc1ZTgwYmY5MzA4YTJmNDk0ZmI0YTYyOGQ1Li4wODRhZDMzNzc0ODZkZjljZTgzMjU2NjY2
ODU0NTJjNDdiOTgyMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVl
LmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJl
bmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiAvLyBUaGlzIGNsYXNz
IGhhbmRsZXMgdGhlIGF1dG8tc2Nyb2xsaW5nIGZvciA8bWFycXVlZT4KIGNsYXNzIFJlbmRlck1h
cnF1ZWUgZmluYWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlck1hcnF1ZWUpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJNYXJx
dWVlKFJlbmRlckxheWVyKik7CisgICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJMYXll
clNjcm9sbGFibGUqKTsKICAgICB+UmVuZGVyTWFycXVlZSgpOwogCiAgICAgYm9vbCBpc0hvcml6
b250YWwoKSBjb25zdDsKQEAgLTgwLDcgKzgwLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdGlt
ZXJGaXJlZCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fbGF5ZXI7CisgICAgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKiBtX2xheWVyOwogICAgIFRpbWVyIG1fdGltZXI7CiAgICAgaW50IG1fY3VycmVu
dExvb3AgeyAwIH07CiAgICAgaW50IG1fdG90YWxMb29wcyB7IDAgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3MTEzZjVjMzI5MDBlZDc2NGIzNmU0NDc5Yjk2
MDdmMDc3OWIxMmY4Li45NTc1NDFhNmJlODFmMWMwYzZjY2Q3Y2E0NmY1Y2JmMWMzYjZkOWRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiArMTAwLDcg
QEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2tG
bG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogcHVi
bGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBh
cyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8v
IG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApp
bmRleCA2MjYwYTgxNTc5ZjU4NGY1OGNjNDBmN2NlMDkwNzViOWIwODY1YWY4Li5lZTJhZTY2NTJh
MjIyYmJkMzg1YzhiNmQzYzg5NmQ2MmQyNGMwNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtMzMs
NyArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTQwMCwxNyArNDAwLDIyIEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsCiAg
ICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYg
KGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwgc3Rh
cnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBF
bGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJU
ZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXll
ci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIFJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9w
RWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZhM2Q1NjgyZDc5MzU2OTVjMjNmNjBjLi5j
YmM4OWNkMzgyYmNiOWEzZTJmN2IyZjM2NzViZWZmMTE5YzZiMjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC00Nyw4ICs0Nyw4IEBACiAj
aW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC01OTks
MTUgKzU5OSwxNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgdHMgPDwg
IiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAgICB9CiAKLSAgICBpZiAobGF5ZXIucmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwot
ICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAgICAgICBp
ZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAgdHMgPDwg
IiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAobGF5ZXIu
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkg
eworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQorICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNl
dCgpLngoKTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS55KCkp
CisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueSgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLnNj
cm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xs
YWJsZUxheWVyLnNjcm9sbFdpZHRoKCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAm
JiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xs
YWJsZUxheWVyLnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWln
aHQgIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKTsKICAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYm
IGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZmN2YwMDZmMjA4NWZh
OWFiNDI2Yy4uMzQ3MDZkNjZlZTAwMzM1MzAxZWEwNmQxMDI1NDIxNTc3MzY2OGViYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4LDggKzI4LDggQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMjksOCArMzI5LDgg
QEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJl
c2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQo
KSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7
CisgICAgaWYgKGhhc0xheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxh
eWVyKCktPmNhblJlc2l6ZSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRSZXNp
emVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0KSwgcGFpbnRJbmZvLnJlY3QpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3Zlcmxh
cFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggYzA1M2E0ZGRhMjAwOGVmZDdhNjY4OGQzNDQ4ZmZiZjNiZmNiZTFmNS4uODJi
OWJlNGE3MGFlOTdkODVmNmM5MWQyNDEzY2U2YmJmNzgwZTc5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTU1LDYgKzE1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTkwNiw3ICsxOTA3LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfQog
ICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAxLDcgKzI5MDIsNyBAQCBFeGNl
cHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2Rl
KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJC
b3gpKQogICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJv
eD4ocmVuZGVyQm94KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEg
PSByZW5kZXJCb3gubGF5ZXIoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
Qm94LnNjcm9sbGFibGVMYXllcigpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcAppbmRleCBiZjY4YTcxNDVkYTg5OGVkNGU3Y2U3NGU2MTU3ZjAwYmQ3MGY3YTYzLi5hNGU3
NjNiNDU4OTJiOTkwYjMzYzY2MzhkOWQwMmY2OTIwYjhmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1
cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjAzNSwxMCArMjAzNSwx
MiBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkK
ICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwogICAgICAg
ICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0
YVkgKiBzY2FsZUZhY3Rvcik7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHNjcm9sbGFibGVMYXll
ciA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxh
eWVyID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUgJiYgbV9nZXN0
dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5v
ZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
bGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olll
cyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXNjcm9sbGFibGVM
YXllcikgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406578</attachid>
            <date>2020-08-14 00:59:48 -0700</date>
            <delta_ts>2020-08-14 03:18:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200814095945.patch</filename>
            <type>text/plain</type>
            <size>332915</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NjUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2MxZmIwYTQ4NTAyNjZi
Yjg4MjliNzA5M2Q3YWVjZjNlZTNiMjVkZS4uOTUyMWE2NTc4MmU2OWNiYjgxZGMxNGEwYzdjODBk
MWRkODVhZjZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OSBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5j
aHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNj
cm9sbGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxX
aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJv
bVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
QnlSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRV
cGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNP
dmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50
T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlv
bkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjps
YXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2
ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0
aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpyZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0
aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENv
cm5lclZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFu
Z0Ftb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxB
bmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dy
ZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9y
Y2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFw
SW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9s
bENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNsZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
TWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0
ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxi
YXJTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVy
TWFycXVlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlT
aW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIw
LTA4LTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBSRUdSRVNTSU9OKHIyNTQ1MDYpOiBbRnJlZXR5cGVdIFNwZWt0cmEgdmFyaWFibGUgZm9u
dCBkb2VzIG5vdCB3b3JrIHByb3Blcmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXgg
Yjk4YjdhYjNlN2I4MGQxY2Y3NGYyZTNlOGFiZTlmYzk4YzU1MDYyMy4uMWE4MmYzNjFlNDhiOTg0
NjY3ZGViZWZjNGUyZTA1ODc4NzQ5ZDIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTA4LTE0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVy
bWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBv
ZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3Ojpn
ZXN0dXJlKToKKwogMjAyMC0wOC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIFJhbmdlOjpjcmVhdGUgYW5kIG1hbnkgbW9yZSB1c2VzIG9mIGxpdmUg
cmFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBhNmNhNTQxMGM0MWFmZmViMWJiNWVkMTA2YTZh
ZDE5M2IzYmFmMzc4Li5jMmY3M2JiMmM5ZGQ3ZTJjNzE5OWM0NTUwNDEwNTQzZThmYjUzMTljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKQEAgLTEzOTEsNiArMTM5MSw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5kZXJpbmcvUmVu
ZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCA5ZGVmMTZmZTNiNDUxNjU0YTkxODY1NTJiODQyNzAzMjMwMGE2ZjU2Li5jNTI0ZDI4MWYxODlh
N2IzZDY2YjViYzk2ZWEwOTkwZDVhYmU5YzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEyNyw2ICsy
MTI3LDcgQEAgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAorcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAogcmVuZGVyaW5nL1Jl
bmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDhmNDAzMzY0OGE3MTgzMjNmYjVlMGYxNWM3Y2E2MjEwODEyNzNmM2IuLmMzN2YzODkxMTc1OGNh
MWI2MTljNTVhNDEwZTYyYzg0Y2JiNDkxM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwOCw2ICszMDgsNyBAQAogCQkwRjU4
MEIwRTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBCMEIwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjU4MENGOTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFE
Njg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGNTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4
MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkExMTQ5NjkzOTEwMEZC
NUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovOyB9OwogCQkwRjU4MEZBRjE0OTgwMEQ0
MDBGQjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0
aW9uVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCN0E1
MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTkyMyw2ICs1OTI0LDggQEAK
IAkJMEY1ODBDRkEwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MENGQjBGMTJERTlCMDA1
MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjU4MENGQzBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQTExNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYlRpbGVkQmFja2luZ0xheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNTgwRkEyMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlRpbGVkQmFja2luZ0xh
eWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBRTE0OTgwMEQ0MDBG
QjVCRDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFuaW1hdGlvblV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjg3NjksNiArMjg3NzIsOCBAQAogCQkJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllckZpbHRlcnMuaCAqLywKIAkJCQkzQzI0NEZFNUEzNzVBQzYzM0Y4OEJFNkYgLyog
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJM0MyNDRGRTRBMzc1QUM2MzNGODhC
RTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCAqLywKKwkJCQkwRjU4MENGQzBGMTNBQjlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCAqLywKKwkJCQkwRjU4MENGQjBG
MTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8sCiAJCQkJMkQ5MDY2
MDQwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkw
NjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMz
RkIxQTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApAQCAtMzMx
MjMsNiArMzMxMjgsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJM
YXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4
OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTNDMjQ0RkVB
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVy
TGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0
NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlckxpbmVCcmVhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAppbmRleCAwZDgzOGQ1NzQ4MWZiNDdiZDlmZTI5ZDk3YTVkYzA5YWIxZDhjYWI2
Li41MmI0M2EwODI2ZjZiMmFmMGIzOTNkNDAxMDA3MGY3ZDBiMzJjNDVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKQEAgLTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MTYsNyArMzkxNiw4IEBAIFNjcm9s
bGFibGVBcmVhKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxlQXJlYUlm
U2Nyb2xsYWJsZSgpIGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9s
bGFibGVBcmVhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGJveC5s
YXllcigpOworICAgIEFTU0VSVChib3guc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiBi
b3guc2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMw
LDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBw
b2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZs
b3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQo
Ym94LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBib3guc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggODgwMmVkMDRlYTMzMzBlOTU3ZGJhMDFjMTcxNjI0NDUxZWM0NDRjZC4uODgw
NGExNmJlYzE0Y2QwMmYwN2FlZmE2OWJmOWIxMjA2ZDI2ZDMxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcApAQCAtODksOSArODksOSBAQAogI2luY2x1ZGUgIlBzZXVkb0NsYXNzQ2hhbmdlSW52YWxp
ZGF0aW9uLmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRl
ZEZsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBA
IC0xMzA4LDggKzEzMDgsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xl
ZnQpCiAgICAgICAgIGludCBjbGFtcGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiBy
ZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhp
cykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICBy
ZW5kZXJlci0+c2V0U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRj
aGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC0xMzMyLDggKzEzMzIsOCBAQCB2b2lkIEVs
ZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9
IGNsYW1wVG9JbnRlZ2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5n
KFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmlt
YXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRv
cCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5p
bWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5
ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxh
dGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJl
bmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5N2U2NmY4ZjhhZjA1
ZmEwMjc3NmEwMDg1MGY1ZjU1YWU4NjFmM2YuLjY4ODY1NzMzNjYzOWU4ZDM2MzFjMTBlZTg2YjVk
Y2JmZGY2YjU4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC0yNDEyLDkgKzI0MTIsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0
aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAg
ICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNp
ZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAg
ICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBh
Z2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1l
bnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVl
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3Bw
CmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNmMDNhMWJkM2E3M2MyNzEyNzUuLjA0OGYwNTBm
ODFhODYxYzE0NDcxMDQ5Y2Q2MjU1M2RhMDBlOTgxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3ICsxNzUsOCBAQCBSZW5kZXJNYXJx
dWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBjb25zdAogewogICAgIGlm
ICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPm1h
cnF1ZWUoKTsKKyAgICBBU1NFUlQocmVuZGVyQm94TW9kZWxPYmplY3QoKS0+c2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5
ZXIoKS0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggMmRlNDNkYWQ1YTlmYjZkOGM1
OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uNzIyMjRmOTUxMGE5NjlmN2Q0YWRhYTQxYzY4Yjk1Nzgx
ZWNiOTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApA
QCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjQ5LDcgKzI0OSw3
IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1cigpCiAgICAgaWYgKCFp
bm5lclRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogaW5uZXJMYXll
ciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpOworICAgIGF1dG8qIGlubmVyTGF5ZXIgPSBp
bm5lclRleHRSZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKCFpbm5lckxheWVy
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRl
eCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBlMGU1MWZmNzYxMzkyLi5iNTAyZWRhYWE5ZGE0
NzhjOWQwNzcxOGY2ODEzNmE2NjUzMDg4YWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQzLDEyICszNDMsMTQgQEAgc3Rh
dGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSog
c3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGlsZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+
bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51
bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNI
YW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxv
Y2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRh
LmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdX
YXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRp
ZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAg
ICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGF1
dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGJveExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9j
aXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEu
aGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxp
bmdXYXNIYW5kbGVkID0gYm94TGF5ZXJTY3JvbGxhYmxlLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGll
ZEV2ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyU2Ny
b2xsYWJsZSwgd2hlZWxFdmVudCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChz
Y3JvbGxpbmdXYXNIYW5kbGVkKSB7CiAgICAgICAgICAgICAgICAgc3RvcEVsZW1lbnQgPSBjdXJy
ZW50RW5jbG9zaW5nQm94LT5lbGVtZW50KCk7CkBAIC0xNTY4LDcgKzE1NzAsNyBAQCBPcHRpb25h
bDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgYm9vbCBzaAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAg
ICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwgdGhlIHJlbmRlcmVyIGhl
cmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRzIHNob3dpbmcgdGhlIHJl
c2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCi0gICAgICAgICAgICBpZiAoYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVy
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVy
TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCkpIHsKICAgICAgICAgICAg
ICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50
UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0
aEVhc3RSZXNpemVDdXJzb3IoKTsKQEAgLTE4MTIsMTIgKzE4MTQsMTQgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBs
YXRmb3JtTW91c2UKIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fY2xpY2tOb2RlLT5yZW5k
ZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkgOiBudWxs
cHRyOwogICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChtb3VzZUV2ZW50Lmhp
dFRlc3RSZXN1bHQoKS5sb2NhbFBvaW50KCkpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+aXNQ
b2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgewotICAgICAgICBsYXllci0+c2V0SW5S
ZXNpemVNb2RlKHRydWUpOwotICAgICAgICBtX3Jlc2l6ZUxheWVyID0gbGF5ZXI7Ci0gICAgICAg
IG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IGxheWVyLT5vZmZzZXRGcm9tUmVzaXplQ29ybmVy
KGxvY2FsUG9pbnQpOwotICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNj
cm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
LT5pc1BvaW50SW5SZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcmVzaXpl
TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgICAgICBtX29mZnNldEZyb21SZXNpemVD
b3JuZXIgPSBzY3JvbGxhYmxlTGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2lu
dCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwpAQCAtMTkxOCwxMCArMTkyMiwxMCBAQCBTY3JvbGxh
YmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYShOb2RlKiBub2Rl
KQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5n
TGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5
ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObykpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CiAgICAgICAgICAg
ICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUwYzFkNGVlYjgzNDhlNzllYWJiMmEx
Li44NzE5YmEwMzY1NmJhNzg3ODk0YjM1NWUxZTUwMzQ0NWEwOWUyMmQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKQEAgLTgzLDcgKzgzLDcgQEAgY2xhc3MgUGxhdGZvcm1Ub3VjaEV2
ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3Mg
UmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBTY3JvbGxiYXI7CkBAIC01NTAsNyArNTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9z
dmdQYW4geyBmYWxzZSB9OwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fcmVzaXplTGF5ZXIgeyBudWxs
cHRyIH07CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBtX3Jlc2l6ZUxheWVyIHsgbnVsbHB0
ciB9OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fY2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50
OwogICAgIGJvb2wgbV9ldmVudEhhbmRsZXJXaWxsUmVzZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0Vs
ZW1lbnQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGY5YjFhNWQ3
MTViNzU0NzI5NDI4NTg5YWU1ODFlNjljNWI3ZGUxMWMuLjJlYTBmMjg1YmRkZWJlZTY5NmM5Mzc3
ODc1MjAwNWFmZmM2NmQzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTc3LDkg
Kzc3LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU2Miw3ICsyNTYyLDggQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlm
ICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRo
aXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5zY3Jv
bGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIo
KS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zODQwLDEwICszODQxLDEwIEBAIFNjcm9sbGFibGVBcmVhKiBGcmFtZVZp
ZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvKiBsYXllciA9IG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7
Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAgLTQzMTgsOCArNDMxOSwxMCBA
QCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5w
YXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCBMYXlv
dXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsgfSwgc2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gPyBSZW5k
ZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luIDogUmVuZGVyTGF5
ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2libGVPcmlnaW5Pbmx5LCBldmVu
dFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgIHJvb3RMYXllci0+
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlv
ciwgcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByb290TGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwg
ZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQ
YWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2Iw
ZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLmRiMWE0ZWJkZWQyZmFkZDFmZmYwYjViZGIyYTk4
MDA0MWRmYWY4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRp
cmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShk
eCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRl
ckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIp
OworCisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3Np
bmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBlbmNsb3NpbmdMYXllclNj
cm9sbGFibGUtPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4
IDliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNjZjIxNTQwYWZmNDMuLmQxNjI2ZWMzYzI3YjFm
YjYzZWZiNTNhODBmMDJlNmM4NjgwNmVjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tCkBAIC04MTksMTQgKzgxOSwxNiBAQCB2b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0
aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+
KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1
cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2Vy
U2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0g
ICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBs
YXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNj
cm9sbFR5cGUgPSBsYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBsYXllci0+c2V0Q3Vy
cmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYyk7CisgICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9s
bFR5cGUpOwogCi0gICAgbGF5ZXIuZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2Ug
YWx3YXlzIGNhbGwgdGhpcz8KKyAgICBsYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBT
aG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9s
b2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tCmluZGV4IGMwOTMwYjYzNDk1ZTcxODE1OTkxYTQwNmE0ZDY2NWEyN2JhNzcxNGIuLmY4
NDNlOWUzZmM3ZjVjM2NhYTE4NjRlNWVlZmM3ODU1ZWNkYTE0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTUyLDcgKzUyLDcgQEAKICNpbXBvcnQg
IlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisjaW1wb3J0ICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RCb3guaCIKICNpbXBvcnQg
IlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtNzgyLDcgKzc4Miw3
IEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94
JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsK
KyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogICAgIAogc3RhdGljIENvbnRh
aW5lck5vZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUq
IG5vZGUsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIw
MDM3NzgzYTNlMjlhZmQ3ZmRkZTQzLi5hZWU1MGIwOWE5MzBkYzM5NTUzMDZmZWMxNDUwY2I3N2Fk
YzcwMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBA
IC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6
c2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJs
b2NrCiAKIHZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVu
ZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJU
KG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgbV9yZW5kZXJWaWV3LnNjcm9s
bGFibGVMYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CiAgICAgc2V0U2VsZWN0
aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKIH0KIApA
QCAtMzE5LDggKzMyMCwxMCBAQCB2b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5U2VsZWN0aW9uKGNv
bnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlCiAgICAgICAgIGN1cnJl
bnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlOjpJbnNpZGUpOwogICAgIH0KIAotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9
IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xl
YXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAh
PSBSZXBhaW50TW9kZTo6Tm90aGluZykgeworICAgICAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigp
LT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworICAgIH0KIAogICAgIC8vIE5vdyB0
aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmpl
Y3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCiAgICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmpl
Y3RzIGxpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA2
YjUzY2JhODVjOGU5ZGM1OTcxNWI2MzhjYWU1NzVmODBlNDhmOTU0Li5hNjdjYjIyYzIzZDMzZjMz
OGM4YTBhNjY0ZmViNTkyZTBmOTA2YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTU4LDcgKzU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVk
Rmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUzLDcg
KzU1Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NU
b1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKTsKLSAg
ICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAg
ICAgICBpZiAoYmxvY2stPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgYmxvY2stPnNj
cm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAg
YmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBAIC01ODQsOCArNTg1LDgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5ZXIoKSkKLSAgICAg
ICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgaWYgKHNjcm9s
bGFibGVMYXllcigpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTA5
LDEyICsxMTEwLDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgaWYgKHB1c2hlZENsaXAp
CiAgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8sIHBoYXNlLCBhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKIAorICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVs
bCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRl
eC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRo
YXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9i
b3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwg
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93
Q2xpcCgpICYmIGxheWVyKCkKICAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlz
KSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVy
KCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0
KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFp
bnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBz
bmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpw
YWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDczLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
CiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMoKnRo
aXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0Umln
aHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3NpbmdM
YXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9z
aW5nTGF5ZXIoKSA/IGVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0
cikgewogICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeSgtcGFpbnRPZmZzZXQp
OwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgICAg
ICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxC
b3VuZHMpLCAmbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0g
bG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyU2Nyb2xs
YWJsZS0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5pc0JveCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVyU2Nyb2xsYWJsZS0+cmVu
ZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGdhcFJlY3RzQm91bmRz
KTsKKyAgICAgICAgICAgICAgICBsYXllclNjcm9sbGFibGUtPmFkZEJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMDAxLDcgKzIwMDUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZs
b3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBpZiAo
IXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
bGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQo
bG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3Vs
dCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNj
dW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVz
dCgpIGNvbnN0CkBAIC0yNDk4LDkgKzI1MDUsMTEgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4K
ICAgICAgICAgLy8gKHRoZSBjb250ZW50IGluc2lkZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hl
cyBXaW5JRSBhcyB3ZWxsLCB3aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KICAgICAgICAg
Ly8gV2UgYWxzbyBnaXZlIHVwIG9uIGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVy
dGljYWwgc2Nyb2xsYmFyLCBvciBpZiB3ZSBhcmUgc2Nyb2xsZWQKICAgICAgICAgLy8gdmVydGlj
YWxseSAoZS5nLiwgYW4gb3ZlcmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxU
b3AgbW92ZWQpLgotICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGxheWVyKCkgJiYgKGxh
eWVyKCktPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gKGxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpICE9
IDApCi0gICAgICAgICAgICA6IChsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5
ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDApKSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgp
ICYmICFpc1J1YnlSdW4oKSk7Ci0gICAgICAgIAorICAgICAgICBib29sIGhhc01hcnF1ZWUgPSBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgOiBudWxscHRy
OworICAgICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkg
PyAoc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCkt
Pmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpKSA6IGZhbHNlOworICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGhhc01hcnF1
ZWUgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
IDogaGFzSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFp
c1J1YnlSdW4oKSk7CisKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9y
ZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rp
b24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZTIx
M2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uYzUxYzUwY2U1N2JkYWUwMDM1
NGFkZDI5NDJkMWNjZTc0OGRjMzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4
aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zNDks
NyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5h
dXRvV3JhcCgpICYmIGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFs
IG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAg
ICAgIGlmIChsYXllcigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVl
KCktPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgp
LT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDYxMjM3NmJhYWQ2
MWJkNjJmYTNjZWRhOGRkYTJhYTI2NDNiNzk5ZGIuLmQxMjhkMTRhNjhmMjQ3MGY5YTg2OTYxYmZk
OTUyNWU3MjlmMThiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC01OCw4ICs1OCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRl
cklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgpAQCAtMzE5LDExICszMTksMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAog
ICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBz
Y3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAg
IC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9
IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3Jv
bGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgaWYgKGhhc092ZXJm
bG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIFNj
cm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBv
c2l0aW9uKCk7CiAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVj
dGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgICAgIHNjcm9sbFBv
c2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIHNjcm9sbGFibGVM
YXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAg
IH0KIAogICAgIC8vIE91ciBvcGFxdWVuZXNzIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aXRob3V0IHRy
aWdnZXJpbmcgbGF5b3V0LgpAQCAtNTQyLDggKzU0Miw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94
OjpjbGllbnRIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJl
dHVybiBsYXllcigpLT5zY3JvbGxXaWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAm
JiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxXaWR0aCgpOwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywg
dGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3
cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
ewpAQCAtNTU1LDggKzU1NSw4IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhl
aWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKICAgICAv
LyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAg
ICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgpAQCAtNTY1LDEyICs1NjUsMTIgQEAgaW50IFJlbmRlckJveDo6
c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCku
eCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwog
fQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVk
ZWQoKQpAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWln
aHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMF9sdSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxh
eWVyKQorc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9s
bGFibGUmIGxheWVyKQogewogICAgIFBhZ2UmIHBhZ2UgPSBsYXllci5yZW5kZXJlcigpLnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKQEAgLTU4OSwyNiAr
NTg5LDI2IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXIm
IGxheWVyKQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxh
eWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBh
bmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3Jv
bGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Ny
b2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Ny
b2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25p
dG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRv
cigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1lQ
b3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZv
aWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVy
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBv
c2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRl
ckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MDgsMjQgKzgwOCwzMCBAQCBib29s
IFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFt
ZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Ny
b2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxh
eWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0
eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFz
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwg
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogYm9vbCBSZW5kZXJC
b3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNj
cm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WCgp
ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
QXV0bzsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNh
bFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6
b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dp
Y2FsV2lkdGgoKSBjb25zdApAQCAtODM0LDEyICs4NDAsMTIgQEAgaW50IFJlbmRlckJveDo6aW50
cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewot
ICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigp
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKTsKICAgICB9CiAKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
JiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3Zl
cmxheVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogICAg
ICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgIH0KIApAQCAtODQ4
LDE1ICs4NTQsMTQgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdp
ZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVy
ID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIgJiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewotICAgICAgICBpZiAoc3RvcEVsZW1lbnQp
Ci0gICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8qIGJveExheWVyID0g
c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFib3hMYXllcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdG9wRWxlbWVudCkK
KyAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOworICAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3Rv
cEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRCb3gsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50
QWJzb2x1dGVQb2ludCkKQEAgLTg3OCwxNSArODgzLDE0IEBAIGJvb2wgUmVuZGVyQm94OjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKICAgICBib29sIHNjcm9sbGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwotICAgIGlmIChsKSB7CisgICAg
YXV0byogbGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAobGF5ZXIpIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGlu
ZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwg
aGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURv
Y3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1l
bnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQgPSBsYXllci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBT
Y3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgICAgICBpZiAobGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChk
aXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAg
IHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAt
ODk5LDkgKzkwMyw5IEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0CiAgICAgaWYgKHN0b3BFbGVt
ZW50ICYmICpzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgPT0gZWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+bG9n
aWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVu
dCk7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYg
KGJsb2NrICYmICFibG9jay0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBibG9jay0+
bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxl
bWVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05MzIsNyArOTM2LDcgQEAgYm9vbCBS
ZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJl
bmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVM
YXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
CkBAIC05OTEsOCArOTk1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xs
YWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xs
KGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxh
eWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3Vy
Y2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25z
dApAQCAtMTAxNywxMSArMTAyMSw5IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZlcnJlZFdp
ZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICBy
ZXR1cm4geyAwLCAwIH07Ci0KLSAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZv
ck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTY5LDcgKzE1NzEsNyBAQCBib29sIFJlbmRlckJv
eDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dyb3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZz
ZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhh
c0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsaW5nTWF5
UmV2ZWFsQmFja2dyb3VuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
Zm9yZWdyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3Jv
dW5kT2JzY3VyYXRpb25UZXN0TWF4RGVwdGgpOwpAQCAtMTg4OCwxMCArMTg5MCwxMCBAQCBMYXlv
dXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgp
IC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSAr
IGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3
ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKICAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0
Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKLSAg
ICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChy
ZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkp
OworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNj
cm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxh
YmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNWRkZmMzMTE4NDdiYWZkOTNmMzM5NDhjMTEy
NWJlZWU4YzI4Mzk4Ny4uYzBkYTdlYTExMzRmOTY2MDM1OGM5OTIxM2RkMzNhODZmZTVhNTYwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpA
QCAtNDkwLDggKzQ5MCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlj
a3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0
UG9pbnQgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250
YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAg
ICAgICAgRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlw
cGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7
Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQot
ICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Ig
Kz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgm
ZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgY29udGFpbmVyTG9jYXRp
b25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9u
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0
Q29udGFpbmluZ0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yKTsKQEAgLTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlm
IChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRp
dmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5i
b3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAg
ICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9
IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgp
OworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAm
JiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAg
IHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICB9CiAg
ICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3Jt
ZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9u
KHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0OCwxMSAr
NTQ4LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVj
dEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWlu
aW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0
UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQ
b2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVy
LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgICAgIHNjcm9sbE9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVM
YXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQg
PSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNs
b3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5s
YXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9z
aW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3gu
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICAgICAg
c2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAg
ICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChzY3JvbGxPZmZz
ZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQueSgpKSk7CiAgICAgICAgIHJl
dHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQ0LDggKzg0NiwxMCBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjbwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBwYWludCByZWN0IHRv
IHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMu
CiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtdGhpc0JveC5zY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigp
LT5zY3JvbGxXaWR0aCgpICsgYlJpZ2h0KTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0
SGVpZ2h0KGJvcmRlclRvcCgpICsgbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0
b20oKSk7CisgICAgICAgIGF1dG8gc2Nyb2xsV2lkdGggPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWlu
dFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBzY3JvbGxXaWR0aCArIGJSaWdodCk7CisgICAgICAgIGF1
dG8gc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsSGVpZ2h0KCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQo
Ym9yZGVyVG9wKCkgKyBzY3JvbGxIZWlnaHQgKyBib3JkZXJCb3R0b20oKSk7CiAgICAgfQogICAg
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVy
KGNvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IDk5ZTgyNGQxMzU3MDYzOWUzZTRkNDQzYzk2NWYxNDRlOWQ0OGY0NDYuLmRhNzQ3OTM3
YWNjMzA2ZWQwYjRhNDIxMjViNDY2ZTQ0NDU0NzIyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjg3LDE2ICsyODcsMTEgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBSZWN0cyYgY2xpcFJlY3Rz
KQogCiAjZW5kaWYKIAotc3RhdGljIFNjcm9sbGluZ1Njb3BlIG5leHRTY3JvbGxpbmdTY29wZSgp
Ci17Ci0gICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJlbnRTY29wZSA9IDA7Ci0gICAgcmV0
dXJuICsrY3VycmVudFNjb3BlOwotfQotCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKLSAgICA6IG1faXNSZW5k
ZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzUmVuZGVyVmlldygpKQorUmVu
ZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5
ZXJNb2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCisgICAgOiBt
X2xheWVyVHlwZShsYXllclR5cGUpCisgICAgLCBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVy
TGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKICAgICAsIG1fZm9yY2VkU3RhY2tpbmdD
b250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9y
bWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBtX2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQpA
QCAtMzA0LDE5ICsyOTksMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fek9yZGVyTGlz
dHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwg
bV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCi0gICAgLCBtX2luUmVzaXplTW9kZShmYWxz
ZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2Up
CiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVy
Zmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVw
YWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9o
YXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNE
aXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2Vj
dGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAs
IG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQpAQCAtMzMwLDE1ICsz
MjEsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0
KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3Bv
cnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkK
LSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNl
KQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
LCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTMsNTMgKzMz
NSwyMiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxk
QmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRC
ZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKIAotICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNo
b3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigp
KQotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
ID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgLy8gbV9pc1NlbGZQYWludGluZ0xheWVyIGlz
IGluaXRpYWxpemVkIGluIFJlbmRlckxheWVyU1ZHL0hUTUwsIGV2ZW4gdGhvdWdoCisgICAgLy8g
aXQgYmVsb25ncyB0byBSZW5kZXJMYXllciAtLSB3ZSBjYW5ub3QgY2FsbAorICAgIC8vICJtX2lz
U2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7IgorICAgIC8v
IGhlcmUsIGluIHRoZSBjb25zdHJ1Y3RvciAtLSBzaW5jZSB0aGUgUmVuZGVyTGF5ZXJTVkcvSFRN
TCBjbGFzc2VzIGFyZW4ndCBpbml0aWFsaXplZCB5ZXQuCiAKICAgICBpZiAoIXJlbmRlcmVyKCku
Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZh
bHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2
ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2
YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1l
bnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBpZiAoIW1fc2Nyb2xsUG9z
aXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcigpCiB7Ci0gICAgaWYgKGluUmVzaXplTW9kZSgpKQotICAgICAgICByZW5kZXJl
cigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKLQotICAg
IEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9s
bFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3Jv
bGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1v
dmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVz
aXplcigpOwotCiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRv
UHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxOCw2ICszNjksMjAgQEAgUmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcigpCiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFmaXJzdENoaWxkKCkp
OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5
ZXIoKQoreworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXll
cjo6c2Nyb2xsYWJsZUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6
OmFkZENoaWxkKFJlbmRlckxheWVyJiBjaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkKQog
ewogICAgIFJlbmRlckxheWVyKiBwcmV2U2libGluZyA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hp
bGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CkBAIC05MzUsNyArOTAwLDEwIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBp
c1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZs
YWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmFwcGx5UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAg
ICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkp
OwpAQCAtOTQzLDcgKzkxMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xl
YXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMo
KTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmZsb3dDb250cm9scygpKSB7CiAgICAg
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlmIChnZW9tZXRyeU1hcCkK
ICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9t
ZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBAIC05NTIsNyArOTIwLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlN
YXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNl
dEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCiAgICAgICAg
ICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwogICAgICAg
ICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZz
ZXRGcm9tUm9vdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAyOSwxMyArOTk3LDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdl
b21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25z
KGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9z
aXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmICht
X21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNj
b3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0g
ICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1
ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkpCisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlTWFycXVlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhl
ZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3Rz
Vmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhp
cyk7CkBAIC0xMTE1LDkyICsxMDc4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50
UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQot
ICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChV
c2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9t
ZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAo
VXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwg
bnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUg
YW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRo
ZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JX
aXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4g
ZmxhZ3MpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRo
ZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQotICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBz
dGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgotICAg
IHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBu
byB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5v
IHBvaW50IHJlY29tcHV0aW5nCi0gICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJl
IGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KLSAg
ICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgotICAgIGlmICghbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0g
ICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNl
c3Rvcik7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3Is
IEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkp
Ci0gICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
Lmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQotICAgICAgICBmbGFncy5hZGQoSGFz
U2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXApOwotICAgIAotICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9
IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBm
bGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKLSAgICBib29sIGlzVmlz
dWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKLSAgICBib29sIHNob3VsZFB1c2hB
bmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0
cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOwotICAgIGlmIChzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJl
Y3RzKSB7Ci0gICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFp
bnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCi0gICAgICAgIGlmIChpc1Zp
c3VhbGx5RW1wdHkpCi0gICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOwotICAgICAgICBl
bHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ug
d2FsayBkb3duIHRoZSB0cmVlLgotICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5k
ZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwotICAgIH0gZWxzZSBp
ZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAg
ICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZs
aXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNp
dGlvbnMgZnJvbQotICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRo
aXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRo
ZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCi0gICAg
ICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KLSAgICAgICAg
QVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCku
cmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7
Ci0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCBy
ZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigp
Lm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
KSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKLQot
ICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0
cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQotICAgIC8vIG9mIGFu
IG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJv
cGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwotICAgIC8vIHVwZGF0ZWQgYWJvdmUuCi0K
LSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGlu
Z3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkp
OwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNG
b3JBbGxNYXJrZXJzKCk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogCiB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUoKQpAQCAtMTY5MSwzNCArMTU2OCwxMCBAQCBi
b29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXll
clBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBkb3duY2Fz
dDxSZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRpb25PZmZzZXQoKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xs
IG9mZnNldC4KLSAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVudDsKLSAgICBpZiAocmVu
ZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRpb25lZFBhcmVudCA9IGVu
Y2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkp
KSkgewotICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0
aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgotICAgICAgICBp
ZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9s
bFBvc2l0aW9uKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJl
bmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlv
bmVkUGFyZW50LT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQg
PSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9m
ZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOwotICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0g
cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50
KCktPnNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29u
dGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBh
cmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfQogCi0gICAgaWYgKGhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewotICAgICAgICBpZiAoIW1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3Jv
bGxpbmdTY29wZSkKLSAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRT
Y3JvbGxpbmdTY29wZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAg
ICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAg
ICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMo
bG9jYWxQb2ludCk7CiAKICAgICBib29sIHBvc2l0aW9uT3JPZmZzZXRDaGFuZ2VkID0gZmFsc2U7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTE4NDAsODYg
KzE2OTMsMjggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyKQotewotICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVt
ZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghb3duZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsK
LX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVC
b3VuZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29u
c3QKIHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdM
YXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwog
CiAgICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpO
bykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVS
ZW5kZXJMYXllcihsYXllcik7Ci19Ci0KLVJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAotewotICAgIFJlbmRlclRy
ZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGU7Ci0KLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVy
ZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMp
OwotICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRM
YXllcikpCi0gICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAgIH0KLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5k
aW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0lu
c2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jl
c3MoKTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgYXV0byogb3duZXJSZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW93bmVyUmVuZGVyZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0dXJuIG93bmVyUmVuZGVy
ZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ3LDMzMSArMjI0Miw2IEBA
IExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0
VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1
bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2li
aWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRp
bmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlz
VmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0
KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYg
KHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0j
ZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRm
b3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJh
dGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdl
YktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNo
RXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVt
ZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAg
aWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOwot
ICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0KLS8vIEZJWE1FOiB0aGlz
IGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVy
Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9z
aXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6
IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVy
TGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0
b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGlj
IGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0g
ICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDov
L214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9i
cm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAg
aW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBp
ZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWRE
ZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBh
ZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0
aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1
c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdo
dCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJ
bnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93
biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMg
b3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGlj
IEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQ
b3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAg
ICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBl
bHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRp
b247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJj
ZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUg
aWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdo
dCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0
SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRh
KGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNp
YmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHko
Y29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewot
ICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkK
LSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0
eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9m
ZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBz
Y3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVh
KQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhp
cyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0
IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0
ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJl
bWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVy
ZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdl
cmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3Jv
bGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGlj
aCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4K
LSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwot
ICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
ZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0
IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBv
c2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
WFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBw
b3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24o
cG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAg
ICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAg
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVk
ID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9t
UG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9m
ZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBz
Y3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5l
ZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFt
cGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRp
b24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBz
Y3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNj
cm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNl
dEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZz
ZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQot
ICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwot
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJl
YW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8
IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9s
bFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRp
b24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgp
KSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0
ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAg
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
SXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBz
ZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZz
ZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNl
dC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNj
cm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBuZXdP
ZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAg
IH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQg
YSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1
c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJs
eSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgot
ICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAg
ICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247
Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBV
cGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25s
eSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBX
ZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8g
YSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZp
ZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsK
LSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3Qg
dXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVW
aWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5n
IGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFk
eSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXll
ciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXll
cnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5n
IHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgot
ICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRp
b24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdo
aWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8gc28g
dHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCi0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgp
KQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBk
YXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNs
aXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFn
ZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBG
cmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
OwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNj
cm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7
Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVw
YWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVw
YWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQg
PSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQot
ICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5l
dmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7
Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVw
ZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBh
aW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9
Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0g
ICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2No
ZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50
LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAg
ICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVu
dHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRo
aXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNj
cm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3Ji
aWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODE2LDMwICsyMjg2LDMzIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVS
ZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7
CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5v
KTsKICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCiAgICAgaWYgKGFsbG93
c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlz
LT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisK
ICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0
IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAg
ICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkg
dGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4
cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJz
b2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAg
ICAgICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIg
Ym94LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0
CiAgICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFy
LiBTbyB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUg
cG9zaXRpb24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQ
b2ludCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4
cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJC
b3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgp
KTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVy
Qm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0
aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZElu
dFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9s
bE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMo
KSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAg
IFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNsYW1w
U2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUo
cm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgICAgICBpZiAoY2xh
bXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8IHNj
cm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
b2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAg
ICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAg
ICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVzZVNtb290aFNjcm9sbGlu
ZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgYW5p
bWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAgc2V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7
CiAgICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Ny
b2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwogICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0
Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwogICAgICAgICAgICAgbmV3UmVjdCA9IExh
eW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9j
YWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwpAQCAtMjg1Nyw3
ICsyMzMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBM
YXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVu
dCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2Vk
U2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6
TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGlu
c2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3Qu
bG9jYXRpb24oKSkpOwpAQCAtMjg3Myw4ICsyMzQ2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91
bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3Bh
Z2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVu
Y2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byog
ZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVudCBm
cmFtZSdzIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICBuZXdSZWN0ID0gZnJhbWVWaWV3
LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0ludFJlY3QobmV3UmVj
dCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTog
aWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBwb3Np
dGlvbjpmaXhlZC4KQEAgLTI5MzEsMjQgKzI0MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNp
ZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNp
ZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVu
dENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5l
ciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1h
eSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0Fu
Y2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkg
ewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAg
ICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBk
YXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRv
IG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9s
bGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50
c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAg
ICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRl
VHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBv
c2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9z
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
TGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewog
ICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkgJiYgaW5zaWRlRml4ZWQpIHsKQEAg
LTMwMjYsMTE1NSArMjQ4NCw5NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9F
eHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheQogICAgICAgICAv
LyBJZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCBkb24ndCBib3Ro
ZXIgdHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxpZ25tZW50cyB3aWxsIHdvcmsuCiAgICAgICAg
IHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhhdmlvcihhbGlnblkpOwog
ICAgICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNl
bnRlcikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpO
b1Njcm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCi0gICAgICAgIC8v
IElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVk
IHBhcnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0
UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxZID0gU2Ny
b2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwotICAgIC8vIElmIHdlJ3Jl
IHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3Qg
aXMgZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmln
Z2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCi0g
ICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nl
c3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9z
ZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc2Nyb2xsWSA9
IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwotCi0gICAgLy8gR2l2ZW4g
dGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KLSAgICBMYXlvdXRVbml0
IHk7Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3Jv
bGwpCi0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9
PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4
cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Ny
b2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAg
eSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5o
ZWlnaHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0g
ICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUo
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24g
PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9u
SW5XaW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9j
dW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29u
c3QKLXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNl
IHRoZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5
IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQg
dG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBv
biBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVz
aXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVy
LT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25z
LiBEbyB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwg
YmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNh
c3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1
bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxv
YXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAg
IGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhl
dnQucG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFi
c29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09m
ZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0
LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0
LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBM
YXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpv
b21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNp
emUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5r
VG8oY3VycmVudFNpemUpOwotICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmco
bWluaW11bVNpemUpOwotICAgIAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBM
YXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSkgewotICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53
aWR0aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xk
T2Zmc2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2Ug
PSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRU
byhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxl
ZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlz
Qm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6
aW5nOjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCku
cmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVu
Y2Uud2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUg
dGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29t
RmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXIt
Pm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAg
ICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0g
KGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5k
UGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZh
Y3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSks
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXpl
OjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBp
bXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRl
cmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAg
ICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVp
Z2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJl
bmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VI
ZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNl
SGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAg
IH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFy
IDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNz
YXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0
KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0K
LQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAot
ewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25S
b2xlOjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVu
dFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xs
YmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJ
bnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAm
JiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9s
bGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxl
U2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24o
KSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lk
dGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2Uu
aGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0K
LSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRo
aXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNo
YWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxP
ZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0Lnko
KSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQu
eSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAg
c3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDAp
Ci0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBp
ZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVT
aXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsK
LSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0
IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigp
LmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0K
LQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJS
ZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVj
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmll
dygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9S
ZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxi
YXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJl
bmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QK
LXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUo
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVy
ZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0g
ICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRv
SW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29u
dGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBz
Y3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMt
PmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1Np
emUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQo
c3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7
Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFp
bGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24p
Ci17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFz
b24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3Jv
bGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkp
KQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3Vs
ZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVk
c0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsK
LSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5k
ZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0
aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1
cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xp
ZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25v
d25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVu
dCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIg
Ym94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQot
ICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVp
Z2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1f
dkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtd
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIg
JiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wg
aGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFy
KG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFy
ID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
ID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAg
ICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewot
ICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBp
cyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAg
ICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAg
IGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZ
KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNB
dm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRo
ZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkg
KyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAg
ICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQ
b3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVj
dC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xs
YmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJT
aXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJS
ZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNp
emUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAg
ICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlv
bmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsg
eyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXpl
LmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNv
cm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3Jv
bGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlj
a25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVz
cywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlv
bigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAg
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQo
KSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xs
UmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NF
UlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVl
LCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9s
bFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVs
c2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0Owot
ICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJl
bmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewot
ICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENv
cm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAg
ICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNj
cm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93
Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJB
Z2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJl
cigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVm
PFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAg
QVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1
YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29s
IGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikg
JiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9T
dHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xs
YmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJl
cikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpj
cmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9y
aWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygp
KQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3Io
cGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5y
ZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFy
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxi
YXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9o
QmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92
ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJh
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Nj
cm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAg
ICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkg
PSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAg
IH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3Vy
IHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUg
b3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxi
YXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkg
ZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5y
dWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFz
dGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYK
LSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1
c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0
ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAg
ICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZC
YXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xs
YWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17
Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFy
YW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQg
YmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdF
bGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVy
Qm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRv
d25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxl
KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29u
c3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJl
dHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVn
LCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcs
IHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFj
a2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmls
dGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlm
IChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxk
ZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0g
ICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
dkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1f
dkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0K
LQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgot
ICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUlu
dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQm
IGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNv
cm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQ
b2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3Jv
bGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IElu
dFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAg
ICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+
c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQot
ICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50
IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJv
eCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0K
LQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChy
ZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBj
b25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQg
d2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdo
dCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJm
bG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQot
Ci1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9k
ZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1M
YXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5p
dCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91
dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1Jl
Y3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVy
Zmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWln
aHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAg
aW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0g
Ym94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3Vu
ZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxP
cmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3Zl
cmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0g
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewot
ICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xs
c092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAm
JiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50
KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFz
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBh
eGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3Zl
cmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93
ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpT
Y3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFy
cygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxv
d1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3Jp
ZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxl
Lm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVy
ZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Ny
b2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAo
Ym94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFs
T3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0
aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJh
ciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJh
ciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJl
cigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFi
bGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8g
YmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRl
ZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0g
Ym94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2Fs
T3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBh
dXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6
b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsK
LQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0
bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAg
ICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5w
YXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAm
JiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJs
ZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7
Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0
ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxi
YXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQot
ICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6
cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0K
LSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMg
aXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucyku
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxP
ZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBv
ZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4g
aW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8v
IHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVt
IHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNl
dCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFk
anVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5
IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUg
d2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0
aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBv
dmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBt
b3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0
cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxP
ZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNj
cm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50
UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAg
ICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVl
ZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21w
b3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50
OjpCZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBlbHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAw
KQorICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2Ug
dGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxB
bGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOworICAgIGVsc2UKKyAgICAgICAg
c2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKKyAg
ICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRo
ZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgorICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0
LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0
aGUgYm90dG9tLgorICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6
OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1h
eFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAg
ICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKIAot
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29v
cmRpbmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7CisgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxp
Z25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7
CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGln
bkJvdHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9y
OjpBbGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3Qu
aGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAgIGVsc2UKKyAgICAgICAg
eSA9IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBMYXlv
dXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAordm9pZCBSZW5kZXJM
YXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKIHsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJl
IG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIEludFBvaW50IGN1cnJl
bnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93
VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKKyAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExh
eW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBmYWxz
ZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTaG91
bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBw
YWludGluZ092ZXJsYXlDb250cm9scykKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBv
dmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNz
IHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBv
biB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcg
cGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQg
d2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5
IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNh
dXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAv
LyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBj
YWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBu
ZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAo
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAg
ICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAg
ICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUg
c2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBsb2Nh
bERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgt
cGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZW5kZXJM
YXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAg
ICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVy
KCkudmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mg
c2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlT
Y3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBu
ZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5
b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91
dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0
Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAg
ICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQg
cGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgp
LCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29y
bmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFs
bCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAg
ICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBv
ZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQ
YWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVy
OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJbnRS
ZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJv
bFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIGlmIChtX3Njcm9s
bENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2Rl
Il9zKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2
ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBp
cyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0
KTsKLX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgcmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJ
bWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7
Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAg
ICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1Jl
ZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVz
OwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7
CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3Ry
aW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0
cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2F2
ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBj
b3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVy
Q29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAgICAgIGlmIChyZXNp
emVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3Ju
ZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKLSAg
ICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNv
cm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNp
emVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAg
ICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQorTGF5b3V0VW5pdCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJB
YnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRp
bnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXItPnBh
aW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0
LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNp
emVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4K
LSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMg
b2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJh
ciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAg
ICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAg
bGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFf
bHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qo
c25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogewotICAgIGlmICghY2Fu
UmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJm
bG93TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVz
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRo
ZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAg
ICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkg
ewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJh
ciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAg
aWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAg
ICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiB2b2lk
IFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRp
b25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRS
ZWdpb25Db250ZXh0KQpAQCAtNDE5MiwxNyArMjU5Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQotewot
ICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJ
bnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQ
YWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExh
eWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAgICBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpjbGlw
VG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIGNv
bnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUpCiB7
CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyMjUsNyArMjYxNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0aW9u
IGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJmbG93
IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBibG9jayBjaGFpbiBzbyB3
ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcnVs
ZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5ZXI7
IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlv
ci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50
KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlmIChw
YWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Nj
cm9sbENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVz
KCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CkBA
IC00NDI3LDcgKzI4MTYsOCBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1
YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wmCiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9y
IG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQogICAgIC8v
IHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29sIGNvbnRlbnRzU2Nyb2xs
QnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsK
KyAgICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gIXNjcm9sbGFibGVMYXll
cigpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAg
ICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIoKS5m
cmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCkuY2hy
b21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNjcm9s
bGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29taW5n
KSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOwpAQCAtNDcyMiw4ICszMTEyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJh
cnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAg
aWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50
cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAgICAgICBpZiAoZmls
dGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdt
ZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0
aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODEsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRy
b2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWlu
dGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21l
bnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAgICBzbmFwcGVkSW50
UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RFdmVudFJlZ2lvbkZv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJ
bmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikKIHsKICAgICBBU1NF
UlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAgLTUyMzYsNyArMzYx
NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxh
eW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0
QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9T
RG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVM
YXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRl
c3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU0NjcsOSArMzg0NSwxMSBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExh
eWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNpemUo
KSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9j
YXRpb24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAgICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5o
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24s
IGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9z
IGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuIENoZWNrCkBA
IC01NTQyLDM1ICszOTIyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QK
LXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVu
dCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVz
aXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9
IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29y
bmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVy
UmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAg
ICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAg
fTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5l
clJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVj
dHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhp
dFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFn
bWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3Qm
IGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zm
c2V0KQogewpAQCAtNjAxMSwzNiArNDM2Miw2IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6Omxv
Y2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAgICAgcmV0dXJuIGNs
aXBSZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjphZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3Vu
ZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKLXsKLSAgICBtX2Jsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKLXsKLSAgICBmb3IgKFJl
bmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7
Ci0KLSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3Zl
cmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25z
IG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKLSAgICAg
ICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVj
dChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50
ZWQgZm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlbmRlcmVyKCkucmVw
YWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0Rh
bWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNp
emUmIG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgY2FjaGVkQm91
bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQg
dGhlIHJvb3QuCkBAIC02MzM3LDIxICs0NjU4LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29t
cG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5o
YXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1f
YmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1H
cmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6
OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8g
bV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBS
ZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4g
cGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29t
cG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygpOwpAQCAtNjM4MiwxMSAr
NDY4OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3Mu
Y29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNl
KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCgpKQpAQCAtNjUxMCw4ICs0ODExLDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJl
U2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXNOb3JtYWxGbG93T25seSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycygp
Ci0gICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKQorICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGJvb2wgaGFzT3Zlcmxh
eVNjcm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNj
cm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKworICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycworICAgICAgICB8fCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJvdygp
CiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigp
LmlzVmlkZW8oKQpAQCAtNjYyOCw3ICs0OTMzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3Jh
dGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCk7CisgICAgcmV0dXJu
IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IChzY3JvbGxhYmxlTGF5
ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVz
dCogcmVxdWVzdCkgY29uc3QKQEAgLTY2MzgsNyArNDk0Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0
CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3Bh
Y2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRl
cmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVl
c3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY2MywzOCArNDk2OCw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3Qq
IHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJl
cXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cg
YXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAg
ICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFu
ZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3Zl
cmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93
WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRo
YXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
JiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jp
em9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVE
ZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIp
KSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxi
YXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJh
cik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFy
cyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3
aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUg
YnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAm
JiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFi
bGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYm
IG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYm
IG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJs
ZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
fHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93
T25seSgpKTsKQEAgLTY3MTcsNiArNDk5MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAK
ICAgICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hh
bmdlcyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRpcnR5IGJpdHMuIFRoaXMgbG9naWMgY291bGQK
ICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKG9sZFN0
eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBvbGRTdHlsZS0+dmlzaWJp
bGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7CiAgICAgICAgIGlmIChv
bGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS51c2VkWkluZGV4KCkg
fHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMDAsMTUgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5w
dXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0
eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgc2Nyb2xsYWJsZUxheWVy
KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJl
aGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAgICAgICBpZiAoIW1fbWFy
cXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4o
dGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7Ci0gICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7CisgICAgaWYg
KHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNyZWF0ZU9yRGVs
ZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KIAotICAgIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAvLyBPdmVybGF5IHNjcm9s
bGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAv
LyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQu
CiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAsMTUgKzUwMjEsMTIgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9yZWZs
ZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7CiAgICAgfQotICAgIAot
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZl
IHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBt
X2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+
c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAg
ICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02Nzc5
LDk4ICs1MDQ3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQot
ewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRv
SGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJh
bWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVz
dCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zp
c2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAot
ICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewot
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBh
ZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlm
IChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZv
ciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAg
ICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50
IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJM
RShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCog
YWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAg
ICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNj
cm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVs
bHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkg
OiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MTc4LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJl
bnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRv
KiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAg
IHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5
ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjpp
c1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MjQ4LDExICs1
NDI0LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBzdHJlYW0gPDwgIiAiOwog
Ci0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7Ci0gICAgc3RyZWFtIDw8
ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgewor
ICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5ib3hTY3JvbGxpbmdTY29wZSgpOwor
ICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVy
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBzdHJlYW0gPDwgIiAiOworICAgICAg
ICBzdHJlYW0gPDwgIiAiOworICAgIH0KIAogICAgIG91dHB1dElkZW50KHN0cmVhbSwgZGVwdGgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGQ4MzczYWFlODE5
ZDRlYjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQuLjA0NDFkZGFiNzJkMmFlZWI4NmMyNTQ0ZmUw
MjVjMjA4NTY0OTdlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
UHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQwLDIwICsxMzksMjkgQEAgc3RydWN0IFNjcm9s
bFJlY3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBTY3JvbGxCZWhhdmlvciBiZWhhdmlvciB7IFNj
cm9sbEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2
NF90OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
cik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7Citj
bGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxh
eWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
ckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBm
cmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOworCisgICAgZW51bSBjbGFzcyBMYXll
clR5cGUgeworICAgICAgICBTdGF0aWMsCisgICAgICAgIFNjcm9sbGFibGUKKyAgICB9OwogCiAg
ICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZp
cnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBMYXllclR5cGUgbGF5ZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclR5cGU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVy
U2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdDsKKwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3
aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ry
b3llZCgpOwpAQCAtMjIzLDYgKzIzMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlz
dE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQg
PSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZs
YWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNs
YXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJx
dWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2lu
ZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDIsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkp
OyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6
ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25z
dDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZy
b21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9y
IGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9s
bGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNj
cm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwg
PSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHks
IFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFu
aW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9s
bDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZv
aWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4
LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsg
c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAg
IHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9u
Pik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9s
bGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxh
eWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxh
YmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZh
aWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFs
OwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5h
dGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRp
b25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBj
b25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9v
bCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7
Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jp
em9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxl
QXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQot
ICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBm
aW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNl
bmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0j
ZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3Vj
aCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNj
cm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAg
ICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Owot
ICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIo
Y29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwot
ICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQot
ICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsK
IAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVz
aXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVu
ZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAg
IGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0
YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAg
LTU1NSw5ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlv
dXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29s
IGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAg
ICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUg
bW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJD
bGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0g
QWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBl
IHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2Fw
cygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwg
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJv
b2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50
OyB9CkBAIC02MzcsNiArNTQwLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0Owor
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1l
Qm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlw
cGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIq
IGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjAzLDYgQEAgcHVi
bGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBP
cHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRl
eHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQ
YWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAg
ICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENs
aXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0g
UmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg4LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRp
Y0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9z
aXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3Np
dGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNl
bmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
Lmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0
aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwy
MCArNzU3LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2lu
ZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZh
bHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5l
cigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0K
ICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGlu
Z1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNl
ZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hT
Y3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KLSAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAgICAgYm9vbCBwYWludHNX
aXRoVHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50KCkgfHwgaGFzQmxlbmRN
b2RlKCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50RWxl
bWVudFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yOjpGbGF0
dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEgKzc3
Myw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBj
b29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0K
LSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Ny
b2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xs
YmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wg
cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE4LDggKzgw
MSw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxv
d0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgdm9pZCBzaW11bGF0
ZUZyZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50
RnJlcXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25z
dCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsg
fQogCkBAIC05MzAsNyArODExLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdp
b25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5v
bkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50
UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9u
KCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAog
cHJpdmF0ZToKIApAQCAtMTAxMCw5ICs4OTEsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRh
dGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwg
MSwKQEAgLTEwMzAsMTYgKzkwOCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxh
ZyB7Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0g
MSA8PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAg
PSAxIDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVy
LCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5k
ZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkg
PyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2lu
dCgpOyB9CkBAIC0xMDcyLDcgKzk0MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ks
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKLSAg
ICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CiAgICAg
dm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBw
YWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAg
IHZvaWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwpA
QCAtMTA5OSw2NCArOTY2LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29u
dGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIp
IGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21l
bnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJh
Z21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxs
cHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wg
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZEJlU2VsZlBh
aW50aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQot
ICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJl
Y3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENv
cm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJs
ZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlv
cikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFs
OwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJl
Y3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0
cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJv
b2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9v
bCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2Nr
U2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwot
ICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50
U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAg
ICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNl
c3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwMTMsNiBA
QCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50
byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91
dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVy
KCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXpl
cigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRh
dGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChi
b29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxNywyMCAr
MTAyNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsK
LSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCBzY3Jv
bGxDb3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAgICAgSW50UmVjdCBzY3Jv
bGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVyIDogcmVzaXplcjsKLSAg
ICAgICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBMYXllclR5cGUgbV9sYXll
clR5cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRz
OwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDQsMTAg
KzEwNDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93TGlzdERpcnR5OiAxOwog
ICAgIGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0gICAgLy8gS2VlcHMgdHJh
Y2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMg
Y2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAgIGJvb2wgbV9pblJlc2l6
ZU1vZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAg
Ym9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxm
LXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVu
IGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTA1MSwxMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQg
dXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUg
bmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgogICAg
IGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJh
Y2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2lu
T3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsg
Ly8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkg
OiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2li
bGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2Vu
ZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAg
Ym9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2
ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3Nyw2IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDog
MTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAx
OwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
LSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpA
QCAtMTMzOCwyNSArMTExNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgv
aGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1f
c2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xs
ZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMg
d2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAg
c3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAot
ICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIE1hcmth
YmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3Bl
LCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwg
SW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNTY3Jv
bGxpbmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1
ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZs
b3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxl
ZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAg
ICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEwICsxMTI4LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJl
cGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRl
clJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBj
dXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Ny
b2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJh
clBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5k
ZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJl
IG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYx
ZS4uY2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUzLDEzICs1
MywxNCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUg
IlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVu
ZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAKICAgICBBU1NFUlQobV9v
d25pbmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9zaXRvcigpLnJlbW92ZUZy
b21TY3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycygqc2Nyb2xs
YWJsZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXllcnMoKTsKIH0KQEAgLTQy
MSwxMSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRl
T3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAKICAgICBUaWxlZEJhY2tp
bmc6OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9y
VmlzaWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0g
ZnJhbWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5n
TGl2ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAmJiBs
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRp
bGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGlu
ZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkK
KyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3Zl
cmFnZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2lu
Zzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAg
IGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2Vz
dG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9s
bENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94
KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rv
ci0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5
b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5j
ZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9m
ZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBz
Y3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGNvbXBvc2l0
ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKTsKKyAgICAgICAg
cGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gu
bG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRp
b24oKSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAgICB9
CiAKICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBAIC0xMjg1LDcgKzEyODks
OCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5
ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7CiAKICAgICAgICAg
ICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICAg
ICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5
ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS5jbGlwRGF0
YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgICAgIGVudHJ5
LmNsaXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEzOTAs
NyArMTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25z
dCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2Nh
dGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9s
bENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xs
Q29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAot
ICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxP
ZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisgICAg
ICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAg
ICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyArMTQxMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29t
cG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQg
PSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZz
ZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdM
YXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAg
ICAgSW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5n
ZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNl
dExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAog
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcg
aXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVy
IGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAg
ICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250
ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0
aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Ny
b2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246
OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VS
VChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTEx
LDEyICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9y
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAg
IHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9s
bGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9s
bGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJh
cihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmICghbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29u
c3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXll
ci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xs
YmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xs
YmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIg
PSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwxMiBAQCBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIo
bV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNj
cm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
b3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAgICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXll
ciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgICAgIGlmICh2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIs
IFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxh
eWVyc0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9s
bAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5
ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFy
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1w
aXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8v
IFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRv
IHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRv
IHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAogICAg
IGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAg
ICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1f
b3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRz
TGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
ICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXND
b250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFi
bGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVy
KCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Ny
b2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJl
bW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsQ29udGFp
bmVyTGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMp
CiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIobV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKQotICAg
ICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9vd25pbmdMYXllcik7Ci0g
ICAgCisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkuZGlk
QWRkU2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAg
IH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMwMTAsOSBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlv
dXRSZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXll
ciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBGbG9hdFJl
Y3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAg
IGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9t
UmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKSAt
IG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBsYXllckRpcnR5UmVjdC5t
b3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xh
eW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkp
IC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENs
aXApOwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
R3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAg
ICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFp
bnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAg
ICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLnBh
aW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5k
ZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJX
aXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCkBAIC0zMzIz
LDE3ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWlu
dERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAg
ICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwog
ICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9s
bGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5
UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVj
dCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
T3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0Lmxv
Y2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJl
Y3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2Nh
dGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAg
bV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3Jt
ZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJh
bnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFn
ZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4
ODM0OWM3ZmYzY2U2ODUyMjZhLi43NWYwYmRlZTQ5YjdlNWMyOGZjOGY2ZDRlNzY2N2RhZmYwMWQ1
YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMK
IAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVy
Zmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRp
bmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAhbGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBM
YXlvdXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBAIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgb3ZlcmZsb3dTY3Jv
bGxMYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKSA9PSBvdmVy
Zmxvd1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxvd1Njcm9sbExheWVyLnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmJv
eFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIo
KS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRp
YXRlTGF5ZXIpCkBAIC00NTY3LDggKzQ1NjksMTEgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQK
IExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFi
bGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8g
YmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlm
ICghYW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRT
aXplKGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigp
KQorICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKHNjcm9sbGFi
bGVMYXllci0+dmlzaWJsZVNpemUoKSkpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwor
ICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRl
ckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00NTg4LDExICs0NTkzLDE0IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05v
ZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwg
Y2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcu
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9
ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVM
YXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFj
a2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXll
cigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAg
IGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxh
YmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0ciwKKyAgICAg
ICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAgLTQ2MzAsOCArNDYzOCwx
MCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxp
bmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9s
bGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdO
b2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAg
ICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0
cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQs
IGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6
OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkgeworICAgICAgICAgICAg
QVNTRVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2Rl
SUQsICpsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBy
ZXR1cm4gbmV3Tm9kZUlEOwpAQCAtNDc2NywyMCArNDc3NywyMSBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2RlcygpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAg
ICBhdXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKSB7CiAgICAgICAgIGlm
ICgmbGF5ZXIucmVuZGVyZXIoKSA9PSAmcmVuZGVyZXIpCiAgICAgICAgICAgICByZXR1cm4gbGF5
ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKTsKICAgICAgICAgcmV0dXJuIGxheWVyLmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKTsKICAgICB9OwogCi0gICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBt
X3JlbmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VS
VChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIGF1dG8gcm9vdFNjcm9sbGlu
Z1Njb3BlID0gbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVyIDogKnNsb3dSZXBhaW50T2JqZWN0
cykgewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKTsKLSAg
ICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBzY3JvbGxp
bmdTY29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpsYXllcik7CisgICAg
ICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Njb3BlKHJlbmRlcmVy
LCAqbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKTsKICAgICAgICAgaWYgKHNjcm9sbGluZ1Njb3Bl
ICE9IHJvb3RTY3JvbGxpbmdTY29wZSkgewogICAgICAgICAgICAgYXV0byBlbmNsb3NpbmdTY3Jv
bGxpbmdOb2RlSUQgPSBhc3luY1Njcm9sbGFibGVDb250YWluZXJOb2RlSUQocmVuZGVyZXIpOwog
ICAgICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJRCk7CkBAIC00ODA0LDcg
KzQ4MTUsNyBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxh
YmxlQXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9y
ZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4g
Jm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVU
b0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpOworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVU
b0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAogdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNr
aW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4
IDdhODViMjY5NmM2OGFhNDBkNDI4MWYzYmMyMmM2YmNkNmI4ODAwNWEuLmJmZjIxOWM0Yjc5MTEx
NjdiNmM3NWExY2YwYTg2NTg4ZTE5YjY4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIu
aCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRl
eCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRhYWY0YTA4MTUxYThjYjFkLi5iY2M5MzFlMTc0YWE0
NWVhZjQ1ZTIxN2M0NzNlZTI3Yjg2ZmVmMDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAg
dm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcigpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsK
LSAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJ
WE1FOiBIb29rIGluIG9wdGltaXphdGlvbiB0byBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9s
bGFibGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXll
clNjcm9sbGFibGU+KCp0aGlzKTsKICAgICBzZXRIYXNMYXllcih0cnVlKTsKICAgICBtX2xheWVy
LT5pbnNlcnRPbmx5VGhpc0xheWVyKFJlbmRlckxheWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5
bGVDaGFuZ2UpOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBt
X2xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTIwOCw5ICsy
MTQsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAo
b2xkU3R5bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRh
dGUoKm9sZFN0eWxlLCBuZXdTdHlsZSkpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciA9IGxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFw
T2Zmc2V0cygpOwotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0
ZSgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gc2Nyb2xsYWJsZUxheWVy
KCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsK
KyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXco
KTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVTbmFwT2Zmc2V0cygpOwpAQCAtMjIzLDgg
KzIyOSwxMCBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25h
cEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYg
KHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVz
czo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0
ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlz
Qm9keSgpIHx8IHNjcm9sbFNuYXBCb3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5oCmluZGV4IGEzYjNkY2FkY2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2
YzA4MmY5YWI0ZTFhNjZlM2JkYmM3ZWJkMzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRl
ckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExh
eW91dFJlY3RzIHsKICAgICBMYXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBp
cyBjbGlwcGVkIGJ5IGVuY2xvc2luZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpA
QCAtNDcsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigp
IGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIu
Z2V0KCk7IH0KIAorICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Ny
b2xsYWJsZUxheWVyKCkgY29uc3Q7CisKICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYTEwZTdlNGQxMGRkZTRjMGRhZTUzOWNiM2I2MzI2OWMyYmE1NDllCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Ny
b2xsYWJsZS5jcHAKQEAgLTAsMCArMSwyMDAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5
cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgor
ICogT3RoZXIgY29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5j
bXUuZWR1PgorICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAg
Q2hyaXN0aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVz
dXAgPHJqZXN1cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGlu
Zm9ybWF0aWsubWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0Bt
YWMuY29tPgorICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0
bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBN
UEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4g
IElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAo
dGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgor
ICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVj
aXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBk
ZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICog
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRo
ZSBHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdT
Y29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBj
dXJyZW50U2NvcGUgPSAwOworICAgIHJldHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5F
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOwor
CitSZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXll
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9s
bGFibGUpCisgICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAs
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uKGZhbHNlKQoreworICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBh
aW50aW5nTGF5ZXIoKTsKKworICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBt
X2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9s
bGluZ1Njb3BlKCk7CisKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxl
bWVudCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xs
T2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAg
ICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24o
KTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsK
KyAgICB9Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJs
ZSgpCit7CisgICAgaWYgKGluUmVzaXplTW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVCht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVt
b3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
KyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRp
ZgorCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAg
ICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24pOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBk
ZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVB
cmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVy
KCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSgpIGNv
bnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkK
KyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9J
bnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb250ZW50c1NpemUoKSBjb25z
dAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsK
K30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRl
bnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkp
CisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lk
dGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjpt
aW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAg
ICByZXR1cm4gY29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAo
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0
ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Cit9CisKK2lu
dCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50
U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9z
Y3JvbGxTaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9s
bERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBt
YXRjaGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gv
c291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25z
dCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lu
bmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAg
ICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNx
cnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlm
IChhZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVk
RGVsdGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQor
eworICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSks
IGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNl
UG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisgICAg
CisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlv
biBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5k
b3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZp
b3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAw
IHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91
c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHBy
ZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRT
aXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAg
aWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykg
Ly8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBk
ZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxW
aWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisg
ICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisK
Ky8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxv
dy4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0
IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBp
ZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdHJpY3Rl
ZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCisgICAg
ICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgp
LmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQg
bmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xs
VG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAg
ICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5
ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4g
c2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5l
d1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Nj
cm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQorICAg
ICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5p
bmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAgICAgIHJlbmRlcmVyKCku
ZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNh
bGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQs
IGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVh
bnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAg
ICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAg
ICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4n
dCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUg
ZnJhbWVzIG93bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYg
cG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcp
Cit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Ny
b2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVyKj4odGhpcykgPDwgIiBy
ZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7CisKKyAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBpZiAoY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZl
QW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsK
KworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDog
c2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlw
ZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xs
VHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5n
KSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxP
ZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhh
dmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
cHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRv
IHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVu
dFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zm
c2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9m
ZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3Jv
bGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVh
OjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNl
dEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Cit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkp
OworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9z
aXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0
aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3Np
dGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBw
b3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVk
U2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAg
ZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9z
aXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRp
b24+IHBvc2l0aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRp
b247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBseVBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OworfQorCitSZW5kZXJMYXll
clNjcm9sbGFibGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNy
b3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAoreworICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2Fs
bG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGU7CisKKyAgICBhdXRv
IGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsK
KyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNh
c3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICB9OworCisgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxm
T3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQorICAg
ICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKTsKKwor
ICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIo
Y3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7Cisg
ICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIpKSB7CisgICAgICAg
ICAgICBBU1NFUlQobmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXZh
aWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29u
KQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVh
c29uKTsKKworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Ny
b2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigp
KSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91
bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVl
ZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigp
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNP
dmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVy
ZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Ny
b2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAg
IG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9
IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5n
Rm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21h
dGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxz
ZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAg
fQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIg
c2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhh
c1Njcm9sbGJhcikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsRWxh
c3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNj
cm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAg
U2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsK
KyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIg
Y2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikK
KyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
KQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Cisg
ICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1No
YWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFk
b3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290
LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJl
bmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJl
bmRlcmVyKCkpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9s
bGJhcihyZW5kZXJlcigpKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxS
ZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAg
ICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFk
ZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKHBhZ2Uo
KS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KTsKKyAgICB9CisgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndp
ZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3Jp
ZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBp
ZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlz
Q3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFy
LmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJl
dHVybiBzY3JvbGxhYmxlTGF5ZXI7CisKKyAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRv
KiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAg
ICAgIGlmIChuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigpICYmIG5leHRMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0
cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMu
CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9z
aW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVy
Qm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNu
YXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4o
ZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5zdHlsZSgpKTsKK30KKyNlbmRpZgorCisK
KyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
K3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3Jv
bGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyOjpkaWRTdGFy
dFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZs
b3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMg
bm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNl
bGVjdGlvbiB1cGRhdGVkLgorICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQo
Q2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBib29sIGlz
VmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3Jv
bGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4g
aXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNl
VG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNV
c2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisg
ICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZCYXIt
PndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25z
dAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMo
KQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5
ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lw
YXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9o
QmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc092ZXJm
bG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1f
c2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5v
bmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1BvaW50SW5SZXNpemVDb250
cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFjYW5SZXNpemUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZC
YXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRy
b2xSZWN0OworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRo
ZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJh
ci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2Fs
UG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7CisgICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAgIGlmICghcmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93
c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBz
Y3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBz
byB0aGF0IHRoZXkgd2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2Uu
IElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250
cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSBy
b290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQg
bmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91
Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Ny
b2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRo
ZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRl
clRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3Jv
bGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3Nh
cnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5
ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsK
KyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlm
ICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBlbmNs
b3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAg
ICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsKKworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
VGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9s
bGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xs
YmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNz
YXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBi
dXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1
cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAg
Ly8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBO
b3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2Us
IHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAg
aWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZC
YXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBj
b3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4g
YWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwor
ICAgIAorICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9w
IG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIElu
dFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50
cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNv
cm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8v
IHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNv
bnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChyZW5kZXJl
cigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBMYXlvdXRS
ZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKKyAgICByZXNpemVyQWJzUmVjdC5t
b3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhk
YW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBt
X3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNS
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJ
bWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJv
dW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJh
cnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBi
b3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJB
YnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVj
dDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIu
d2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7
CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRl
eHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCisv
LyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3Np
dGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAo
IWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0
cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNl
dCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKworI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28g
dXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKKyAgICB1cGRhdGVT
bmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYm
ICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVz
ZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdl
IG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUg
bWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBj
bGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdy
b25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0
aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVk
IHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3
YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVs
ZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxl
bS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xs
T2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xh
bXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBz
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQor
CisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxT
Y3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKGlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgp
OworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAg
IH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHNldE5l
ZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCBhIHNwZWNpYWwgY2Fz
ZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhhdmUKKyAgICAvLyBoYXNPdmVyZmxv
d0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRseSIgY2xpcCB0aGVpciBjb250ZW50
cywgc28KKyAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6aW5nIHRoZW0gYWxzby4KKyAgICBy
ZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS5pc1JlbmRl
cklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZzZXQpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50IGJ1dCBp
cyBub3QgcmlnaHQgbm93LgorICAgIGlmICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJlc2l6ZSgp
IHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSAh
PSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhlcmU/Cisg
ICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRo
ZW0gZXhwbGljaXRseS4KKyAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1lbnQtPnJl
bmRlcmVyKCkpOworCisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3Nl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVuZGVyZXIt
PnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworCisgICAgYXV0byBhYnNvbHV0ZVBvaW50ID0gZG9j
dW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKKyAgICBhdXRv
IGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFic29sdXRl
UG9pbnQpKTsKKworICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJlc2l6ZUNv
cm5lcihsb2NhbFBvaW50KTsKKyAgICBuZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0LndpZHRo
KCkgLyB6b29tRmFjdG9yKTsKKyAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNldC5oZWln
aHQoKSAvIHpvb21GYWN0b3IpOworICAgIAorICAgIExheW91dFNpemUgY3VycmVudFNpemUgPSBM
YXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXItPmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVsZW1lbnQt
Pm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7CisgICAgZWxl
bWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7CisgICAgCisgICAg
TGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRo
KCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKKyAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAg
IG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOworICAgICAgICBhZGp1c3Rl
ZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CisgICAgfQor
ICAgIAorICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5ld09mZnNl
dCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1cnJlbnRT
aXplOworCisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxl
ZEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJl
ci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveDsKKworICAgIFJl
c2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKKyAgICBpZiAocmVzaXpl
ICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7CisgICAgICAgIGlm
IChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8v
IE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBz
dHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVm
dCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQg
YmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1
IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAg
ICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQo
YmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Cisg
ICAgfQorCisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5j
ZS5oZWlnaHQoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUg
dGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZh
Y3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+
bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkg
LSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5k
UGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29t
RmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdo
dCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgZG9jdW1lbnQudXBkYXRl
TGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNv
IGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5k
ZXIgdGhlIGN1cnNvciBpbiB2aWV3LgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJH
ZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAodGhpcyAhPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGlu
Z3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMg
aXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0
bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0
b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZp
ZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOworCisgICAgUmVu
ZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJl
Y3QmIGJvdW5kcykKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNs
b3NpbmdJbnRSZWN0KGJvdW5kcykpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseUNsZWFy
QmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBmb3Ig
KFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY2hpbGQpOwor
ICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCkKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJl
Y3QoKTsKKyAgICByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKHRoaXMp
OworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMo
UmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5
ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVwYWludEJsb2NrU2VsZWN0aW9u
R2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRCbG9j
a1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5UmVw
YWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmIChy
ZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8v
IEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRS
b290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisgICAg
ICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBl
bmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCks
IHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZv
LCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6
IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2Jh
Y2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOwor
fQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJz
LgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zvckxh
eWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3co
KSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVy
TGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5
bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZl
cyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJh
bmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92
ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxv
d1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBh
IHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAg
YW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJv
b2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAo
KGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5l
ZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVy
dGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5z
dHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkg
b3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJl
IGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5l
ZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYg
bmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYm
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwp
CisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBB
U1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFy
cyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZs
b3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92
ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhl
biB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAmJiBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9s
bGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cp
OworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0
eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhh
c1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZp
b3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciBy
ZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0
aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZs
b3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVy
dGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxT
Y3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRlU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKworICAg
ICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRv
IHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewor
ICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigp
LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFy
Q2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAgICAgIG1f
aW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQo
KTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5k
ZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4o
cGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7CisgICAg
fQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBh
Z2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAgIGlm
IChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5j
bGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0
ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0
aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
fHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJl
Y3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciogbGF5
ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQor
eworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1h
cCwgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoY2hpbGQsIGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNl
cyB3aGVyZQorICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRo
YXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgorICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRl
bnRGbGFncygpOworCisgICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5v
IHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCisgICAg
Ly8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0
eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KKyAgICAvLyByZWNvbXB1dGUgYWxsIG91ciBw
b3NpdGlvbnMgYW55d2F5LgorICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiAhbV9o
YXNWaXNpYmxlQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBwb3NpdGlvbkNo
YW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7CisgICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkK
KyAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7CisKKyAgICBpZiAoZmxhZ3Mu
Y29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFp
bmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCisgICAgICAgIGNsZWFyQ2xpcFJlY3Rz
KCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQ
b3NpdGlvbigpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRB
bmNlc3Rvcik7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAg
ICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApOworICAgIAorICAg
IGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250YWlucyhIYXNTZWVu
Vmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7IElzT3Zl
cmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYmIGlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5
Tm9uRW1wdHkoKTsKKyAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5
TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8
fCBmaXJzdENoaWxkKCkpOworICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAg
ICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsK
KworICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7CisgICAgICAgIC8vIFdoZW4g
c2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5v
bi1lbXB0eSBsYXllcnMuCisgICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkpCisgICAgICAgICAg
ICBjbGVhclJlcGFpbnRSZWN0cygpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0
cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgorICAg
ICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFp
bnQoKSwgZ2VvbWV0cnlNYXApOworICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3
J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBiYWNraW5n
IGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQorICAgICAgICAvLyB2
aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2FjaGVkIHJl
cGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNvbXB1dGVk
IChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIGNh
Y2hlZCByZWN0cyBhcmUgY29ycmVjdC4KKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1Jl
cGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9y
ZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJl
bmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgICAgIEFTU0VSVCghcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRS
ZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JSZXBhaW50
KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgfQorCisgICAgcmVjdXJz
aXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKHRoaXMsIGdlb21ldHJ5TWFwLCBm
bGFncyk7ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNj
cm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgp
CisgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBh
aW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCisgICAgLy8gdXBk
YXRlZCBhYm92ZS4KKworICAgIGlmIChtX21hcnF1ZWUpIHsKKyAgICAgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOworICAgICAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKHNob3VsZFB1
c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSk7CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmlu
dmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJl
dHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZv
ciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgeworICAgICAgICBpZiAo
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29u
dGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJw
aXhlbE9mZnNldCkpLAorICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBz
Y3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVy
biBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9s
cygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRo
ZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QK
K3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7CisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVu
dCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVz
aXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9
IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29y
bmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVy
UmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQorICAgICAg
ICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAg
fTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5l
clJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVj
dHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhp
dFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50SW5GcmFn
bWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQo
b3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBtX3Njcm9sbFNpemUuc2V0
SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKKwor
ICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQo
KSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0U2Ny
b2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRv
cE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHll
dCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisg
ICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIExheW91dFJlY3QgcmVw
YWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01v
ZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50
UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUo
cmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsQ29ybmVyVmlzaWJs
ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50UmVjdCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QK
K3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
KCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Jl
bmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUoLXNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2lu
dCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBv
aW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmll
dygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
IHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIElu
dFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21D
b250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBw
b2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJv
bU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzQ29tcG9zaXRlZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05v
ZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZp
c2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZp
c2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFy
U3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1
c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3Jv
bGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlz
aWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAs
IHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgo
MCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9Owor
fQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQoKSBjb25z
dAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXJlbmRlcmVyKCkuc2V0
dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAgICAv
LyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8g
U2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNoYWJsZVNp
emUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4g
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCisgICAg
ICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBpZiAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndp
ZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7CisK
KyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsKKyNlbmRp
ZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVu
dCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCitJbnRSZWN0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0lu
c2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29u
c3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFk
Rm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6
OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2FnZSk7Cit9CisKKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVu
ZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5kZXJlcigpLmRvY3VtZW50
KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgIW1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47
CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJl
bmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xs
UG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyAiIDw8
IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBz
Y3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAi
KSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBp
ZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBk
aW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZs
b3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkK
KyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMg
dHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4K
KyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9
IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQg
c2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9m
ZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxY
T2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngo
KSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdp
ZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAg
ICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAobV9zY3JvbGxQb3NpdGlv
biA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3Jv
bGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IE5v
dGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBv
c2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAgICAgIC8vIFRoZSBTY3Jv
bGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVh
ZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9t
ZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njcm9s
bFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVy
ZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQg
bGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVk
IGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJz
LCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGlu
ZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlz
SW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRs
ZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmlu
aXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgp
OworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlv
bnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9u
IHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgorICAgICAgICAgICAgLy8g
cG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsg
b2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAgICAgLy8gaW4gdGhpcyBj
YXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRl
cy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7CisgICAgICAg
ICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBj
b21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciks
CisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRo
ZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFy
ZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVu
dC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Ny
b2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAg
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdp
b25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5m
cmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
KCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRv
IGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVw
YWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJl
cGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAg
IGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50
ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNl
TW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1v
dmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29s
IHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwo
KTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNv
bXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCBy
ZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAg
cmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZv
clJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0
ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxl
bWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVu
dFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZy
YW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCku
cmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKGNv
bXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBP
dXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3Vy
IGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28g
dXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdM
YXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0
aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdl
cmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5j
ZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJz
YWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXll
cnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFNpemUgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIp
IGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisg
ICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRT
aXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworCisgICAg
Ym9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3Rpbmco
KTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFt
ZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXIt
PnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsK
KworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRU
ZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYg
KCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92
ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0g
ZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxh
YmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVy
YXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8g
YWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4K
KyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJl
bW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVj
dHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAg
ICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAg
IG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFy
Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIp
CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVy
KTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0
KHJlY3RzLnJlc2l6ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3JuZXIpIHsKKyAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9sbENvcm5lcigpCit7Cisg
ICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsQ29y
bmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlUmVzaXplclN0eWxlKCkKK3sK
KyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFy
KHJlbmRlcmVyKCkpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lk
OjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAg
aWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBX
VEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBi
ZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZy
ZW5kZXJlcigpKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIoKQoreworICAgIGlm
ICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQo
bnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIFJlZlB0
cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJT
aXplOworICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+
PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5l
ckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVD
b3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6
ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29y
bmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVz
aXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJl
YVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7Cisg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJl
c2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJS
ZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOworICAgICAgICBjb250
ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgaWYgKHJlc2l6ZUNvcm5l
ckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdl
LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOworICAgICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdl
UmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVj
dC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXpl
KSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGNvbnRl
eHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKworUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFi
bGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3Jk
ZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsK
KworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+
aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/
IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9
IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJv
b2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xs
YmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisK
KyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikg
eworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5l
ciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAor
ICAgICAgICB9OworICAgIH0KKworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKwor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5t
YXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54
KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisK
KyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3Ju
ZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBi
YXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5l
clNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsK
KyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJT
aXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVy
KCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0
KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5z
Y3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJU
aGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNr
bmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMu
aG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9j
YWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29y
bmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6dXBkYXRlTWFycXVlZSgpCit7CisgICAgaWYgKG1fbWFycXVlZSkgeworICAgICAgICAvLyBG
SVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3Jr
IHdpdGggYml0ZmllbGRzLgorICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVh
dGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1M
TWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJx
dWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICgh
bV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJx
dWVlPih0aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAg
ICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBk
YXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1
YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3Np
dGlvbmVkUGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
ICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5k
ZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChhdXRvKiBwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbGFibGVMYXllcigp
KSB7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91
dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgorICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAg
ICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzSW5GbG93UG9z
aXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUt
PnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3du
Y2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
KS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdT
Y29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExheWVyU2Nyb2xsYWJsZSA9IHBhcmVudExh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudExheWVyU2Ny
b2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgICAgICBs
b2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXllclNjcm9sbGFibGUtPnNjcm9sbFBv
c2l0aW9uKCkpOworCisgICAgICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29w
ZSA9IHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xh
eWVyID0gcGFyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBudWxscHRyOworICAgICAg
ICAgICAgd2hpbGUgKGVuY2xvc2luZ0xheWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKChlbmNs
b3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmNsb3NpbmdM
YXllciA9IGVuY2xvc2luZ0xheWVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7
CisgICAgICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IGVuY2xvc2luZ0xheWVyU2Ny
b2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkg
eworICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgICAgIG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIH0gZWxzZSBpZiAo
IW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0g
bV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0g
bV9ib3hTY3JvbGxpbmdTY29wZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVw
ZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBz
d2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCisg
ICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAo
bV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVkNmQ3NzE4MDcwNzQwMDQ2ZDIxNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaApA
QCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJl
IENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4K
KyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2Mr
QGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1Pgor
ICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFs
bCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFp
bnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVs
ZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBm
aWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxh
IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3pp
bGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9n
cGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFi
b3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vu
c2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5
b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91
ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFj
ZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQg
YnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8g
bm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3Vy
CisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwg
b3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9s
bGFibGUpOworCit1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OworCitjbGFzcyBSZW5k
ZXJMYXllclNjcm9sbGFibGUgZmluYWwKKyAgICA6IHB1YmxpYyBSZW5kZXJMYXllcgorICAgICwg
cHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworcHVibGljOgorICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNr
aW5nOworCisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGUoKTsKKworICAg
IFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7
IH0KKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXpl
IGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0
OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Nyb2xsRnJv
bVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3Ig
bGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5
UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xs
ZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09m
ZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9
IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwg
U2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5p
bWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xs
OjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9p
ZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgs
IHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBz
Y3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAg
dm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+
KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKwor
ICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xs
YWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5
ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFi
bGVBcmVhLgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKworICAg
IHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFz
b24pIGZpbmFsOworCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29s
IGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQorICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKworICAgIGJvb2wgaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgLy8gU2Nyb2xs
YWJsZUFyZWEgb3ZlcnJpZGVzCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7
IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7
CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
KCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Cisj
ZW5kaWYKKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3Vj
aCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0OworCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Cisg
ICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRy
b2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dD
b250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAg
IEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2lu
dCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5l
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICB2b2lkIHVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworCisgICAg
Ym9vbCBjYW5SZXNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgYm9vbCBpblJlc2l6ZU1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQorICAgIHZvaWQgc2V0SW5SZXNpemVNb2Rl
KGJvb2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0KKworICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAgIHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKCk7CisgICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisK
KyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBT
Y3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xs
ZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29w
ZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3Bl
OyB9CisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KKworICAgIGJvb2wg
c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAgYm9vbCBjb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigp
LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQorCisgICAgU3Ry
aW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgZW51bSBVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7CisgICAgICAgIElzT3ZlcmZsb3dTY3JvbGwg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNTZWVuQW5jZXN0
b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8IDIsCisgICAgICAgIEhhc0NoYW5nZWRB
bmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICB9OworICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOworCisgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYp
OworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhh
c1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3Q7CisKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9p
bnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKKyAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisK
KyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKKyAgICBib29sIGlzUmVuZGVyTGF5ZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBp
c0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7
CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAgICBTY3Jv
bGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRSZWN0
IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Ny
b2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOworICAgIElu
dFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hhbmRsaW5n
V2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFu
aW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Cisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jl
c3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRv
cigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShj
b25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwor
ICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisj
ZW5kaWYKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBv
dmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAgIHZvaWQg
c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsgIAorCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQo
Y29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsK
KyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNv
cm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKKyAgICAgICAg
SW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Ny
b2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKKyAgICAgICAgSW50UmVjdCBy
ZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkg
PyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9CisgICAgfTsKKyAgICBPdmVyZmxv
d0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wg
b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBj
b25zdDsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgYm9vbCB1cGRhdGVMYXllclBvc2l0aW9uKE9w
dGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogPSBudWxscHRy
KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0
aW9uU2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKKworICAgIHZv
aWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQs
CisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBi
b29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5m
byYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RG
b3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJh
bnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3Bh
cmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBSZW5kZXJM
YXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRl
ck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworCisgICAgdm9pZCBwYWludExheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRp
b25TZXQ8UGFpbnRMYXllckZsYWc+KTsKKyAgICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJh
bnNmb3JtKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5n
SW5mbyYsIE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlv
dXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSk7CisKKyAgICBib29sIHNl
dHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wmIGRpZFF1
YW50aXplRm9udHMpOworI2VuZGlmCisKKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWUoKTsKKyAgICB2
b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgdm9pZCBzdWJ0cmFjdFNj
cm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3BlcyhMYXlvdXRQb2ludCYgbG9jYWxQb2lu
dCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworCitwcml2YXRlOgorICAgIC8v
IEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywg
c28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KKyAgICBib29s
IG1faW5SZXNpemVNb2RlIDogMTsKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDog
MTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorCisgICAgYm9vbCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uIDogMTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgT3B0
aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAg
Ly8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBJbnRTaXplIG1f
c2Nyb2xsU2l6ZTsKKworICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBh
IHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5
U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFs
TWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwor
ICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9s
bGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+Lgor
CisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCBy
ZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5l
cjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOworCisgICAg
SW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKK307CisKK30KKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGUpCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyJiBsYXllcikgeyBy
ZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkgPT0gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkxheWVyVHlw
ZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDdlOWYzODMyZDM2ZWZkMTkx
M2NmNzM5NzAxMWViYjNkMjE5NDhlMjQuLmU0NTZjNmM4YTU1ODMyMDRmNjNhZWZiNjhlOGJjMDMw
YjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHQuaCIKQEAgLTg3OSwxMCArODc5LDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpmb3Jj
ZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb24K
IFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgp
IGNvbnN0CiB7CiAgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwotICAgIGlmICgh
bGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94
Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpo
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5j
bG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwor
ICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5NmU2YmZiZTQw
YTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFiYTVhNjAyMWU4ZDIxM2FiZDQyNGU3ZWVmNTIzODRiZjQw
MTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAg
LTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxN
YXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxh
eWVyKQorUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllclNjcm9sbGFibGUq
IGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5k
ZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmgKaW5kZXggMWM3ODg0OTVlMGU4ODU3NWU4MGJmOTMwOGEyZjQ5NGZiNGE2MjhkNS4u
MDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2Njg1NDUyYzQ3Yjk4MjMzOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCkBAIC00OSwxMyArNDksMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTsKIAogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGluZyBmb3Ig
PG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJNYXJxdWVlIGZpbmFsIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShSZW5kZXJNYXJxdWVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJMYXllciopOworICAgIGV4cGxpY2l0
IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKik7CiAgICAgflJlbmRlck1hcnF1
ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CkBAIC04MCw3ICs4MCw3IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKIAotICAgIFJlbmRlckxheWVyKiBt
X2xheWVyOworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9sYXllcjsKICAgICBUaW1lciBt
X3RpbWVyOwogICAgIGludCBtX2N1cnJlbnRMb29wIHsgMCB9OwogICAgIGludCBtX3RvdGFsTG9v
cHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNzEx
M2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3NzliMTJmOC4uOTU3NTQxYTZiZTgxZjFjMGM2
Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1YmxpYyBD
YWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlck9iamVjCiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyRWxl
bWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBz
aG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVu
IGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25z
dHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNjI2MGE4MTU3OWY1ODRmNThjYzQwZjdjZTA5
MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUyYTIyMmJiZDM4NWM4YjZkM2M4OTZkNjJkMjRjMDZlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MDAsMTcgKzQwMCwyMiBAQCBi
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bAogICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayog
cmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJl
bmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICBy
ZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7
CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNj
cm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJl
bmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIo
KTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJlbmRlcmVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVu
ZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
ICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZTA1NjBkN2E1MmE5NTI2NGQ2
YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4uMWY2ZDMxZjBkNDhhYzA2N2UxNWIzOWQwY2I1NDRlNjlk
ZDQzN2ExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5LDIwICs1OTksMjEgQEAgc3RhdGljIHZvaWQgd3JpdGVM
YXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlv
dXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CiAg
ICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkKLSAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgaWYgKGxheWVy
LnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGxh
eWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYm
IHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IGxheWVyLnNj
cm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgbGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBsYXllci5zY3JvbGxIZWln
aHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbGF5ZXIuc2Nyb2xs
SGVpZ2h0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCk7CisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpLngoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKS55KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJv
eCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xs
V2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCk7CisgICAgICAgIGlmIChs
YXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRI
ZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQo
KTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJU
aGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgICAgICBpZiAoIXNjcm9sbGJhclRo
ZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAg
ICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVy
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZU1h
YyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFy
VGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCps
YXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xh
eW91dERpcmVjdGlvblJUTCgqc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSkK
ICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7
CiAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAppbmRleCAxNzI0OGNkYTM0YWE2YjZhNzE5NmY3ZjAwNmYyMDg1ZmE5YWI0MjZjLi4zNDcw
NmQ2NmVlMDAzMzUzMDFlYTA2ZDEwMjU0MjE1NzczNjY4ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMyOSw4ICszMjksOCBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChzbmFwcGVk
SW50UmVjdChzZWxlY3Rpb25SZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAg
ICAgfQogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpCi0gICAg
ICAgIGxheWVyKCktPnBhaW50UmVzaXplcihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBpZiAoaGFz
TGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+Y2FuUmVz
aXplKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZv
LmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludElu
Zm8ucmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRPdmVybGFwVGVzdFJlc3VsdChi
b29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBj
MDUzYTRkZGEyMDA4ZWZkN2E2Njg4ZDM0NDhmZmJmM2JmY2JlMWY1Li44MmI5YmU0YTcwYWU5N2Q4
NWY2YzkxZDI0MTNjZTZiYmY3ODBlNzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCkBAIC0xNTUsNiArMTU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
Q29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xOTA2LDcgKzE5MDcsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVu
dCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICB9CiAgICAgCiAgICAgaWYg
KCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI5MDEsNyArMjkwMiw3IEBAIEV4Y2VwdGlvbk9yPFNjcm9s
bGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkg
Y29uc3QKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCkpCiAgICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5s
YXllcigpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3guc2Nyb2xsYWJs
ZUxheWVyKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
Tm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGJm
NjhhNzE0NWRhODk4ZWQ0ZTdjZTc0ZTYxNTdmMDBiZDcwZjdhNjMuLmE0ZTc2M2I0NTg5MmI5OTBi
MzNjNjYzOGQ5ZDAyZjY5MjBiOGY3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CkBAIC0xNDUsNyArMTQ1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVz
c1RyYWNrZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
clRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDM1LDEwICsyMDM1LDEyIEBAIGJvb2wgV2Vi
Vmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBmbG9h
dCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgICAgIEludFNpemUgbG9n
aWNhbFNjcm9sbERlbHRhKC1kZWx0YVggKiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNjYWxlRmFj
dG9yKTsKIAotICAgICAgICBSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gbnVsbHB0cjsK
KyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRy
OwogICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9kZSAmJiBtX2dlc3R1cmVUYXJnZXROb2Rl
LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dlc3R1cmVU
YXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAg
ICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9IGxheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKSB7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNjE5Yjg2ZWFhNTc4MWQyMzQ5YmE0NWRlMDU1YTMxZmQwYWU0ZDI1Ny4uMjIyODE0ZjU2YzVk
MTcwNzVmNjg2ODY4NDY0NzVlZGZkZTExYTIwNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIw
LTA4LTE0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCB1cCBSZW5kZXJM
YXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisgICAgICAg
IFJlbW92ZSB0d28gd3JvbmcgZXhwZWN0YXRpb25zLCB0aGF0IHdpbGwgbGVhZCB0byBsYXlvdXQg
dGVzdCBmYWlsdXJlcworICAgICAgICAodW5yZWxhdGVkIHRvIHRoaXMgcGF0Y2gpLgorCisgICAg
ICAgICogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9y
bS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4
cGVjdGVkLnR4dDogUmVtb3ZlZC4KKwogMjAyMC0wOC0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ3Jhc2ggaW4gV2ViQ29yZTo6U3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZl
bnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmlt
YXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDkzNmJlZDI1YzI3MTdmNTIxZGM1
NmQ1MzI2MzA5ZGI4Njk0YTI2MTUuLjlhMzQ2NzVkMWY0NjI3NDcwMGJkNDdmMmJkZmVjNTI3Y2Nj
MWI2OWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmlt
YXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Ny
b2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC0xLDE0
ICsxLDE0IEBACiBDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRDb250
ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkVmVydGlj
YWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3Vz
ZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFi
bGU6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCiBDT05TT0xFIE1FU1NBR0U6IE1haW5G
cmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllcjogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6
IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlzRG93bkluVmVydGljYWxT
Y3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlz
VXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9sbGJhcgogQ09OU09MRSBNRVNTQUdFOiBNYWlu
RnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5k
ZXJMYXllcjogbW91c2VFeGl0ZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEKIFRoaXMgaXMgYSBzY3JvbGxh
YmxlIGRpdi4KIAogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5k
ZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Fu
aW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViMmEzOGNhMjczYzZkNzAwNjg3ODZlMzM5
ZGY3NDFlNjRjYTRlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3Jt
LXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAs
MCBAQAotUEFTUyBjb3VudCBpcyAwCi1QQVNTIGNvdW50IDwgNiBpcyB0cnVlCi1QQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmlu
Zy11cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9hbmltYXRp
b25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YjJhMzhjYTI3M2M2ZDcwMDY4Nzg2ZTMzOWRmNzQx
ZTY0Y2E0ZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRl
cmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAot
UEFTUyBjb3VudCBpcyAwCi1QQVNTIGNvdW50IDwgNiBpcyB0cnVlCi1QQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406581</attachid>
            <date>2020-08-14 03:18:11 -0700</date>
            <delta_ts>2020-08-14 12:23:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200814121808.patch</filename>
            <type>text/plain</type>
            <size>333097</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTBkNzc1MDhiODQwMTIy
NmRjZWVlMmI3YTIzODI3NDBiOTVjNWQzZi4uMTY1NDIzZmY3ZjcwYTg4ZTUzZmM3ODNiZmY3YmQ3
Y2ZmYjFmOWVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OSBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5j
aHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNj
cm9sbGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxX
aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJv
bVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
QnlSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRV
cGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNP
dmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50
T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y2FuUmVzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OnJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlv
bkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjps
YXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2
ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0
aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpyZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0
aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENv
cm5lclZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21D
b250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFu
Z0Ftb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxB
bmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dy
ZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9y
Y2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFw
SW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9s
bENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNsZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
TWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0
ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxi
YXJTdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBB
ZGRlZC4KKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVy
TWFycXVlZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rp
bmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlT
aW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIw
LTA4LTEzICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtXZWJYUl0gSW1wbGVtZW50IFdlYlhSU2Vzc2lvbjo6dXBkYXRlUmVuZGVyU3RhdGUoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNmNzRmMmUzZThh
YmU5ZmM5OGM1NTA2MjMuLjFhODJmMzYxZTQ4Yjk4NDY2N2RlYmVmYzRlMmUwNTg3ODc0OWQyMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0x
NCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIg
aW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisKIDIwMjAtMDgtMDEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3Jl
YXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggYTZjYTU0MTBjNDFhZmZlYjFiYjVlZDEwNmE2YWQxOTNiM2JhZjM3OC4uYzJmNzNiYjJjOWRk
N2UyYzcxOTljNDU1MDQxMDU0M2U4ZmI1MzE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzkx
LDYgKzEzOTEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorICAg
IHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaAogICAgIHJlbmRlcmluZy9SZW5kZXJM
aW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggOWRlZjE2ZmUzYjQ1MTY1NGE5MTg2NTUy
Yjg0MjcwMzIzMDBhNmY1Ni4uYzUyNGQyODFmMTg5YTdiM2Q2NmI1YmM5NmVhMDk5MGQ1YWJlOWM5
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTIxMjcsNiArMjEyNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAK
K3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZjQwMzM2NDhhNzE4MzIzZmI1ZTBmMTVj
N2NhNjIxMDgxMjczZjNiLi5jMzdmMzg5MTE3NThjYTFiNjE5YzU1YTQxMGU2MmM4NGNiYjQ5MTNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zMDgsNiArMzA4LDcgQEAKIAkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdy
YXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1
ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRjkwRjEyREU5QjAw
NTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU4
MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTNBQjlCMDA1
MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5
ZXIuaCAqLzsgfTsKIAkJMEY1ODBGQUYxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI3QTU1MTBGNjVEN0Ew
MDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRl
ckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTU5MjMsNiArNTkyNCw4IEBACiAJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4
OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5
IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVC
RDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGll
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzY5LDYgKzI4NzcyLDggQEAKIAkJ
CQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJ
CQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3Bw
ICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmggKi8sCisJCQkJMEY1ODBDRkMwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZS5jcHAgKi8sCisJCQkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5k
ZXJMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJl
bmRlckxheW91dFN0YXRlLmggKi8sCiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJl
bmRlckxpbmVCb3hMaXN0LmNwcCAqLywKQEAgLTMzMTIzLDYgKzMzMTI4LDcgQEAKIAkJCQkwRjU4
MENGRjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1ODBDRkYwRjEzQUI5QjAw
NTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5
MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5l
QnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMGQ4MzhkNTc0
ODFmYjQ3YmQ5ZmUyOWQ5N2E1ZGMwOWFiMWQ4Y2FiNi4uNTJiNDNhMDgyNmY2YjJhZjBiMzkzZDQw
MTAwNzBmN2QwYjMyYzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC03OSw3ICs3OSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFr
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCkBAIC0zOTE2LDcgKzM5MTYsOCBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlm
ICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBBU1NFUlQoYm94LnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKQEAgLTM5MjksNyArMzkzMCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Ny
b2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3Jv
bGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7Cisg
ICAgYm94LnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNp
ZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMw
ZTk1N2RiYTAxYzE3MTYyNDQ1MWVjNDQ0Y2QuLjg4MDRhMTZiZWMxNGNkMDJmMDdhZWZhNjliZjli
MTIwNmQyNmQzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNp
bmNsdWRlICJQc2V1ZG9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJr
cy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBF
bGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExl
ZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3Jv
bGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6
IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xh
bXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
ZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxk
Q2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0K
IApAQCAtMTMzMiw4ICsxMzMyLDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiBy
ZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhp
cykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICBy
ZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRUb3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxh
YmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hl
ZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAppbmRleCBkOTdlNjZmOGY4YWYwNWZhMDI3NzZhMDA4NTBmNWY1NWFlODYxZjNm
Li4wODZmNjkzMWMxOGJlMTA5MDJmOWIxNWRkZWI3YzNiOWE5NzYxODg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0yNDEyLDkgKzI0MTIsMTIgQEAgdm9pZCBG
cmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFs
TW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+
ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNz
Q291bnQpIHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9k
b2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlv
bkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNm
MDNhMWJkM2E3M2MyNzEyNzUuLjA0OGYwNTBmODFhODYxYzE0NDcxMDQ5Y2Q2MjU1M2RhMDBlOTgx
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI4
LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAg
LTE3NSw3ICsxNzUsOCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRl
ck1hcnF1ZWUoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+
aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJv
eE1vZGVsT2JqZWN0KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBBU1NFUlQocmVuZGVyQm94
TW9kZWxPYmplY3QoKS0+c2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiByZW5kZXJCb3hN
b2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAKaW5kZXggMmRlNDNkYWQ1YTlmYjZkOGM1OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uNzIyMjRm
OTUxMGE5NjlmN2Q0YWRhYTQxYzY4Yjk1NzgxZWNiOTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjpl
bGVtZW50RGlkQmx1cigpCiAgICAgaWYgKCFpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigp
OworICAgIGF1dG8qIGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+c2Nyb2xsYWJsZUxh
eWVyKCk7CiAgICAgaWYgKCFpbm5lckxheWVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBl
MGU1MWZmNzYxMzkyLi5iNTAyZWRhYWE5ZGE0NzhjOWQwNzcxOGY2ODEzNmE2NjUzMDg4YWVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtMzQzLDEyICszNDMsMTQgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBw
cm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGls
ZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExh
eWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAg
ICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRm
b3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1F
dmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lk
dGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdo
ZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExh
eWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGJveExh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2
ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0
aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOwor
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXJTY3JvbGxh
YmxlLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGllZEV2ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbElu
U2Nyb2xsYWJsZUFyZWEoKmJveExheWVyU2Nyb2xsYWJsZSwgd2hlZWxFdmVudCk7CisgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChzY3JvbGxpbmdXYXNIYW5kbGVkKSB7CiAgICAgICAg
ICAgICAgICAgc3RvcEVsZW1lbnQgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5lbGVtZW50KCk7CkBA
IC0xNTY4LDcgKzE1NzAsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0
Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICBib29s
IGluUmVzaXplciA9IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhh
c0xheWVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4
dCBpbiBhIGJveCwgdGhlIHJlbmRlcmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdo
aWNoIHByZXZlbnRzIHNob3dpbmcgdGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5
MzUuCi0gICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBs
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikuc2Nyb2xs
YWJsZUxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2lu
dEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwog
ICAgICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291
dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKQEAgLTE4MTIs
MTIgKzE4MTQsMTQgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKIAogICAgIFJlbmRlckxheWVy
KiBsYXllciA9IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCkgOiBudWxscHRyOwogICAgIGF1dG8gbG9jYWxQb2ludCA9IHJv
dW5kZWRJbnRQb2ludChtb3VzZUV2ZW50LmhpdFRlc3RSZXN1bHQoKS5sb2NhbFBvaW50KCkpOwot
ICAgIGlmIChsYXllciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50
KSkgewotICAgICAgICBsYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOwotICAgICAgICBtX3Jl
c2l6ZUxheWVyID0gbGF5ZXI7Ci0gICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IGxh
eWVyLT5vZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwotICAgICAgICBpbnZhbGlk
YXRlQ2xpY2soKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgewor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKGxvY2Fs
UG9pbnQpKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEluUmVzaXplTW9kZSh0
cnVlKTsKKyAgICAgICAgICAgIG1fcmVzaXplTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXI7CisgICAg
ICAgICAgICBtX29mZnNldEZyb21SZXNpemVDb3JuZXIgPSBzY3JvbGxhYmxlTGF5ZXItPm9mZnNl
dEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2xp
Y2soKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwpAQCAt
MTkxOCwxMCArMTkyMiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3Np
bmdTY3JvbGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byog
bGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikK
KyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5j
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6Tm8pKSB7CiAgICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5k
ZXJWaWV3TGF5ZXIoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRk
ZjBkMWUwYzFkNGVlYjgzNDhlNzllYWJiMmExLi44NzE5YmEwMzY1NmJhNzg3ODk0YjM1NWUxZTUw
MzQ0NWEwOWUyMmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTgzLDcgKzgz
LDcgQEAgY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50
OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlckxh
eWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogY2xhc3MgUmVuZGVyV2lkZ2V0Owog
Y2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CkBAIC01NTAsNyArNTUwLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zdmdQYW4geyBmYWxzZSB9OwogCi0gICAgUmVuZGVy
TGF5ZXIqIG1fcmVzaXplTGF5ZXIgeyBudWxscHRyIH07CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlKiBtX3Jlc2l6ZUxheWVyIHsgbnVsbHB0ciB9OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1f
Y2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50OwogICAgIGJvb2wgbV9ldmVudEhhbmRsZXJXaWxs
UmVzZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGY5YjFhNWQ3MTViNzU0NzI5NDI4NTg5YWU1ODFlNjljNWI3ZGUx
MWMuLjJlYTBmMjg1YmRkZWJlZTY5NmM5Mzc3ODc1MjAwNWFmZmM2NmQzZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTc3LDkgKzc3LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxs
U2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5o
IgpAQCAtMjU2Miw3ICsyNTYyLDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlmICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVz
dGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAo
UmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAg
ICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXll
cigpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChyZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICBy
ZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zODQwLDEwICszODQxLDEw
IEBAIFNjcm9sbGFibGVBcmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvKiBsYXllciA9IG93bmVy
UmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxh
eWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0
dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwog
fQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikg
Y29uc3QKQEAgLTQzMTgsOCArNDMxOSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAg
ICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFp
bnQoY29udGV4dCwgZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVu
ZGVyZXIsIHsgfSwgc2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBh
aW50UG9saWN5OjpBbnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeTo6QW55T3JpZ2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6
OkFjY2Vzc2libGVPcmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290
TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNv
bnRleHQpCi0gICAgICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0
LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJl
bmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVj
dCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLmRi
MWE0ZWJkZWQyZmFkZDFmZmYwYjViZGIyYTk4MDA0MWRmYWY4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3
ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9z
aW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAg
ICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChhdXRvKiBlbmNsb3Np
bmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPnNjcm9sbEJ5UmVjdXJzaXZlbHko
SW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNj
ZjIxNTQwYWZmNDMuLmQxNjI2ZWMzYzI3YjFmYjYzZWZiNTNhODBmMDJlNmM4NjgwNmVjNDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNiBAQCB2b2lk
IEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNM
YXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93
bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRv
KiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9s
bGFibGVMYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIu
c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRT
Y3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci0+Y3VycmVudFNjcm9s
bFR5cGUoKTsKKyAgICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8g
U2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgbGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNl
dEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOwogCi0gICAgbGF5ZXIuZGlkRW5kU2Ny
b2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KKyAgICBsYXllci0+
ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0K
IAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGMwOTMwYjYzNDk1ZTcxODE1
OTkxYTQwNmE0ZDY2NWEyN2JhNzcxNGIuLmY4NDNlOWUzZmM3ZjVjM2NhYTE4NjRlNWVlZmM3ODU1
ZWNkYTE0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxl
ck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0K
QEAgLTUyLDcgKzUyLDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJl
bmRlckxheWVyLmgiCisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbXBvcnQg
IlJlbmRlckxpc3RCb3guaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRl
cldpZGdldC5oIgpAQCAtNzgyLDcgKzc4Miw3IEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KGJveCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsK
IAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXll
cigpOwogfQogICAgIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxh
YmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdo
bGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNw
cAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlhZmQ3ZmRkZTQzLi5hZWU1MGIw
OWE5MzBkYzM5NTUzMDZmZWMxNDUwY2I3N2FkYzcwMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjA5LDcgKzIw
OSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdl
JiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xl
YXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIo
KSk7CisgICAgbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5yZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKCk7CiAgICAgc2V0U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWlu
dE1vZGU6Ok5ld01pbnVzT2xkKTsKIH0KIApAQCAtMzE5LDggKzMyMCwxMCBAQCB2b2lkIEhpZ2hs
aWdodERhdGE6OmFwcGx5U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24s
IFJlcGFpbnRNb2RlCiAgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJ
Zk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpOwogICAgIH0KIAot
ICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQotICAgICAg
ICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsK
KyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykgeworICAg
ICAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgbV9y
ZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cygpOworICAgIH0KIAogICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJl
ZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCiAgICAg
Ly8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA2YjUzY2JhODVjOGU5ZGM1OTcxNWI2MzhjYWU1NzVm
ODBlNDhmOTU0Li5hNjdjYjIyYzIzZDMzZjMzOGM4YTBhNjY0ZmViNTkyZTBmOTA2YzU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU4LDcgKzU4LDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUzLDcgKzU1Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVu
ZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAg
IGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NUb1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxv
Y2stPmhhc092ZXJmbG93Q2xpcCgpKTsKLSAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpOworICAgICAgICBpZiAoYmxvY2stPnNjcm9sbGFibGVMYXll
cigpKQorICAgICAgICAgICAgYmxvY2stPnNjcm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsK
ICAgICB9CiB9CkBAIC01ODQsOCArNTg1LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0KCk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBzY3JvbGxh
YmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTA5LDEyICsxMTEwLDE1IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiAgICAgaWYgKHB1c2hlZENsaXApCiAgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWlu
dEluZm8sIHBoYXNlLCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAorICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0
cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBw
cm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0
aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8v
IHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWlu
dFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9j
a0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKICAgICAgICAgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tn
cm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWlu
dEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNu
YXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigp
LT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBv
aW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkp
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDczLDE2
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0
c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMoKnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCks
IGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAg
ICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5k
ZXJMYXllciogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byogbGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9zaW5nTGF5ZXIoKSA/IGVuY2xvc2luZ0xheWVyKCkt
PnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgewogICAgICAgICAgICAgICAgIGdhcFJlY3Rz
Qm91bmRzLm1vdmVCeSgtcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5
ZXIoKSkgewogICAgICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJl
Y3RzQm91bmRzKTsKICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2Fs
Qm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXItPnJlbmRlcmVyKCkpLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVu
ZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMu
bW92ZUJ5KGxheWVyLT5yZW5kZXJCb3goKS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAg
ICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0
KGxvY2FsQm91bmRzKSwgJmxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU2Nyb2xsYWJsZS0+cmVu
ZGVyZXIoKS5pc0JveCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMu
bW92ZUJ5KGxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rp
b25HYXBzQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKKyAgICAgICAgICAgICAgICBsYXllclNjcm9s
bGFibGUtPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDAxLDcgKzIwMDUsMTAgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgTGF5b3V0UG8KICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPmhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5D
b250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIE5vZGUq
IFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNDk4LDkgKzI1MDUsMTEg
QEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGlu
ZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8gKHRoZSBjb250ZW50IGluc2lk
ZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxsLCB3aGljaCBqdXN0IGJv
dHRvbS1hbGlnbnMgdGhlbS4KICAgICAgICAgLy8gV2UgYWxzbyBnaXZlIHVwIG9uIGZpbmRpbmcg
YSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBvciBpZiB3ZSBhcmUg
c2Nyb2xsZWQKICAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4gb3ZlcmZsb3c6aGlkZGVu
IGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAgICAgICBib29sIGlnbm9y
ZUJhc2VsaW5lID0gKGxheWVyKCkgJiYgKGxheWVyKCktPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9u
ID09IEhvcml6b250YWxMaW5lID8gKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5
ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpICE9IDApCi0gICAgICAgICAgICA6IChsYXllcigpLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDAp
KSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7Ci0gICAgICAgIAor
ICAgICAgICBib29sIGhhc01hcnF1ZWUgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVM
YXllcigpLT5tYXJxdWVlKCkgOiBudWxscHRyOworICAgICAgICBib29sIGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSkgOiBm
YWxzZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxh
eWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpKSA6IGZhbHNlOworICAgICAgICBib29s
IGlnbm9yZUJhc2VsaW5lID0gKGhhc01hcnF1ZWUgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFs
TGluZSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogaGFzSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8
IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7CisKICAgICAgICAgT3B0aW9u
YWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDog
aW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlz
RGVwcmVjYXRlZEZsZXhpYmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4
YjA2Y2E5MC4uYzUxYzUwY2U1N2JkYWUwMDM1NGFkZDI5NDJkMWNjZTc0OGRjMzgyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5hdXRvV3JhcCgpICYmIGNoaWxkcmVuSW5saW5lKCkp
IHsKICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4g
aGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAgICAgIGlmIChsYXllcigpICYmIGxheWVyKCktPm1h
cnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAg
IG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCmluZGV4IDYxMjM3NmJhYWQ2MWJkNjJmYTNjZWRhOGRkYTJhYTI2NDNiNzk5ZGIu
LmQxMjhkMTRhNjhmMjQ3MGY5YTg2OTYxYmZkOTUyNWU3MjlmMThiYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC01OCw4ICs1OCw4IEBACiAjaW5jbHVkZSAiUmVu
ZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMzE5LDExICszMTksMTEgQEAg
dm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFu
Z2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1
c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFj
ZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBv
bGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewot
ICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBv
c2l0aW9uKCk7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigp
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZm
ZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0g
c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgIGZsb2F0IHpvb21T
Y2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7CiAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7
Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbik7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgIH0KIAogICAgIC8vIE91ciBvcGFxdWVuZXNzIG1p
Z2h0IGhhdmUgY2hhbmdlZCB3aXRob3V0IHRyaWdnZXJpbmcgbGF5b3V0LgpAQCAtNTQyLDggKzU0
Miw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25zdAogCiBpbnQg
UmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xp
cCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxXaWR0aCgpOwor
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpOwogICAgIC8vIEZvciBvYmpl
Y3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewpAQCAtNTU1LDggKzU1NSw4IEBAIGludCBSZW5k
ZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0
KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhlaWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXll
cigpLT5zY3JvbGxIZWlnaHQoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3Zl
cmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0
IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgpAQCAtNTY1LDEy
ICs1NjUsMTIgQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIAogaW50IFJl
bmRlckJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xp
cCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAg
cmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJs
ZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6
c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dp
Y2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQg
UmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCiAgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQoMF9sdSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwV2hlZWxF
dmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxheWVyKQorc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2
ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIFBhZ2UmIHBh
Z2UgPSBsYXllci5yZW5kZXJlcigpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UuaXNNb25pdG9yaW5n
V2hlZWxFdmVudHMoKSkKQEAgLTU4OSwyNiArNTg5LDI2IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hl
ZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxheWVyKQogCiB2b2lkIFJlbmRlckJveDo6c2V0
U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8
ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVu
dE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xl
ZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3Jv
bGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5z
Y3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNs
YW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3Np
dGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxh
eWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0
CkBAIC04MDgsMjQgKzgwOCwzMCBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091
dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJl
bmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6
OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBp
ZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6QXV0bzsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFy
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkg
JiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCku
b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09
IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogaW50IFJlbmRlckJveDo6dmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNh
bFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7
CisgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxl
TGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAw
OwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigp
LT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlSG9y
aXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVM
YXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM0LDEyICs4
NDAsMTIgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5V
c2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXll
cigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVM
YXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAg
ICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICB9CiAKICAgICBpZiAo
IWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAg
QVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAg
ICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpOwogICAgIH0KIApAQCAtODQ4LDE1ICs4NTQsMTQgQEAgaW50IFJlbmRlckJveDo6
aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6
OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7
Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIg
JiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkg
ewotICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCi0gICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBl
bGVtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8qIGJveExheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFi
b3hMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYm94TGF5ZXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChzdG9wRWxlbWVudCkKKyAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVu
dCgpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9s
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRCb3gs
IGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCkKQEAgLTg3OCwxNSArODgz
LDE0IEBAIGJvb2wgUmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNj
cm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsK
ICAgICBib29sIHNjcm9sbGVkID0gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyTGF5ZXIqIGwgPSBs
YXllcigpOwotICAgIGlmIChsKSB7CisgICAgYXV0byogbGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICBpZiAobGF5ZXIpIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24g
TWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2lu
ZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQg
PSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dh
cmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAg
c2Nyb2xsZWQgPSBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURp
cmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsK
ICNlbmRpZgotICAgICAgICBpZiAobC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlv
biwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICBpZiAobGF5ZXIt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAtODk5LDkgKzkwMyw5IEBAIGJvb2wgUmVuZGVyQm94
Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0CiAgICAgaWYgKHN0b3BFbGVtZW50ICYmICpzdG9wRWxlbWVudCAmJiAqc3RvcEVs
ZW1lbnQgPT0gZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlbmRlckJs
b2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmll
dygpKQotICAgICAgICByZXR1cm4gYi0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0g
Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYgKGJsb2NrICYmICFibG9jay0+aXNSZW5kZXJWaWV3
KCkpCisgICAgICAgIHJldHVybiBibG9jay0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkBAIC05MzIsNyArOTM2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5
U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigp
ICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgcmV0dXJuIGhhc092
ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT51
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9s
bChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCkBAIC05OTEsOCArOTk1LDggQEAgUmVuZGVyQm94
KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQog
CiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0g
ICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3Vy
Y2UpOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
KCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2Fu
VXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMTAxNywxMSArMTAyMSw5IEBAIGJvb2wg
UmVuZGVyQm94OjpuZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBT
Y3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBp
ZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNj
cm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4geyAwLCAwIH07Ci0KLSAgICBBU1NFUlQo
aGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAg
cmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRT
aXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTY5
LDcgKzE1NzEsNyBAQCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9C
ZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dy
b3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5n
TWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gZm9yZWdyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5S
ZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3JvdW5kT2JzY3VyYXRpb25UZXN0TWF4RGVwdGgpOwpA
QCAtMTg4OCwxMCArMTg5MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlw
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBS
ZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBi
b3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBT
dWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkp
IHsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVy
KCkpIHsKICAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aChyZWxldmFuY3kpLCAwKTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIo
KS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShz
Y3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Cisg
ICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXgg
NWRkZmMzMTE4NDdiYWZkOTNmMzM5NDhjMTEyNWJlZWU4YzI4Mzk4Ny4uYzBkYTdlYTExMzRmOTY2
MDM1OGM5OTIxM2RkMzNhODZmZTVhNTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVk
ZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtNDkwLDggKzQ5MCw4IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBv
c2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBw
aW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCks
CiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBp
bmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25S
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFp
bmluZ0Jsb2NrICYmIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQor
ICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Ig
Kz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNl
dCgpOwogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLnNl
dExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsK
ICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmluZ0Jsb2NrUmVjdChjb250YWluZXJS
ZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTUwOCw4ICs1MDgsOCBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhT
dGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAg
ICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0
U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9y
ZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBp
ZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAg
IHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBw
aW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigp
LT5zY3JvbGxPZmZzZXQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0
aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Nj
cm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yKTsKQEAgLTU0OCwxMSArNTQ4LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAog
ICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94
LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5k
aW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgRmxv
YXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAg
ICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xp
cHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBw
aW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVy
KCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKQorICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xp
cHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3Jv
bGxPZmZzZXQueSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQ0
LDggKzg0NiwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4
dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgICAgICAKICAgICAgICAg
Ly8gQWRqdXN0IHRoZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJv
eCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1v
dmVCeSgtdGhpc0JveC5zY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJl
Y3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigpLT5zY3JvbGxXaWR0aCgpICsgYlJpZ2h0KTsKLSAg
ICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgbGF5ZXIoKS0+
c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKSk7CisgICAgICAgIGF1dG8gc2Nyb2xsV2lk
dGggPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgp
IDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBzY3JvbGxX
aWR0aCArIGJSaWdodCk7CisgICAgICAgIGF1dG8gc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxh
eWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgOiAwOworICAgICAgICBz
Y3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9yZGVyVG9wKCkgKyBzY3JvbGxIZWlnaHQgKyBi
b3JkZXJCb3R0b20oKSk7CiAgICAgfQogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVyKGNvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDk5ZTgyNGQxMzU3MDYzOWUzZTRkNDQz
Yzk2NWYxNDRlOWQ0OGY0NDYuLmRhNzQ3OTM3YWNjMzA2ZWQwYjRhNDIxMjViNDY2ZTQ0NDU0NzIy
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjg3LDE2
ICsyODcsMTEgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENsaXBSZWN0cyYgY2xpcFJlY3RzKQogCiAjZW5kaWYKIAotc3RhdGljIFNjcm9sbGlu
Z1Njb3BlIG5leHRTY3JvbGxpbmdTY29wZSgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGluZ1Njb3Bl
IGN1cnJlbnRTY29wZSA9IDA7Ci0gICAgcmV0dXJuICsrY3VycmVudFNjb3BlOwotfQotCiBERUZJ
TkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdCkKLSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0LmlzUmVuZGVyVmlldygpKQorUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6Okxh
eWVyVHlwZSBsYXllclR5cGUpCisgICAgOiBtX2xheWVyVHlwZShsYXllclR5cGUpCisgICAgLCBt
X2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXco
KSkKICAgICAsIG1fZm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVj
dC5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBtX2lz
Q1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQpAQCAtMzA0LDE5ICsyOTksMTUgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdCkKICAgICAsIG1fek9yZGVyTGlzdHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbm9ybWFs
Rmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2Up
Ci0gICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkK
ICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAg
LCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVj
dGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9y
ZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAs
IG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJs
ZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxz
ZSkKICAgICAsIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9i
ZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0
dXNEaXJ0eSh0cnVlKQpAQCAtMzMwLDE1ICszMjEsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5
ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAg
ICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNl
KQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0
cnVlKQogI2VuZGlmCkBAIC0zNTMsNTMgKzMzNSwyMiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5
ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAg
IHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJ
c0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKIAotICAg
IG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQot
ICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3Bl
ID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAg
Ly8gbV9pc1NlbGZQYWludGluZ0xheWVyIGlzIGluaXRpYWxpemVkIGluIFJlbmRlckxheWVyU1ZH
L0hUTUwsIGV2ZW4gdGhvdWdoCisgICAgLy8gaXQgYmVsb25ncyB0byBSZW5kZXJMYXllciAtLSB3
ZSBjYW5ub3QgY2FsbAorICAgIC8vICJtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNl
bGZQYWludGluZ0xheWVyKCk7IgorICAgIC8vIGhlcmUsIGluIHRoZSBjb25zdHJ1Y3RvciAtLSBz
aW5jZSB0aGUgUmVuZGVyTGF5ZXJTVkcvSFRNTCBjbGFzc2VzIGFyZW4ndCBpbml0aWFsaXplZCB5
ZXQuCiAKICAgICBpZiAoIXJlbmRlcmVyKCkuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG1fdmlz
aWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250
ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlOwogICAgIH0KLQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVt
ZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxP
ZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAg
ICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigp
OwotICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICBz
Y3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLSAg
ICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwot
ICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiB7Ci0gICAgaWYgKGluUmVz
aXplTW9kZSgpKQotICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVz
aXplTGF5ZXJEZXN0cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVB
cmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAg
ICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVk
TGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNh
bFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5k
ZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAo
bV9yZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNj
cm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigpOwotCiAgICAgY2xlYXJMYXllckZpbHRl
cnMoKTsKIAogICAgIGlmIChwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxOCw2
ICszNjksMjAgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgUkVMRUFTRV9BU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rl
c3Ryb3llZCgpIHx8ICFmaXJzdENoaWxkKCkpOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUq
IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIoKQoreworICAgIGlmIChpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KHRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29uc3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyKCkgY29uc3QKK3sK
KyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OmFkZENoaWxkKFJlbmRlckxheWVyJiBjaGlsZCwg
UmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkKQogewogICAgIFJlbmRlckxheWVyKiBwcmV2U2libGlu
ZyA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENo
aWxkKCk7CkBAIC05MzUsNyArOTAwLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewog
ICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlz
LT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsK
IAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5n
c1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTQzLDcgKzkxMSw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRy
eU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3Jt
YXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRy
b2xzKCkpIHsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFz
T3ZlcmZsb3dDb250cm9scygpKSB7CiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7
CiAgICAgICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0g
TGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBv
aW50KCkpKSk7CkBAIC05NTIsNyArOTIwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAg
ICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3Ig
YW4gYW5jZXN0b3IgbGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZy
b21BbmNlc3Rvcihyb290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRG
cm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygp
OwpAQCAtMTAyOSwxMyArOTk3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAv
LyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVl
ZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6
IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRo
IGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwot
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgfQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVy
LT5tYXJxdWVlKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTWFycXVlZSgpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
IHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRM
YXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTE1LDkyICsxMDc4LDYgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJS
ZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5k
ZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVu
ZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMg
IT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1h
cHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5
IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3Jk
ZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Ny
b2xsKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVy
ZQotICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhl
IGNoZWNrIGJlbG93IGlzIHZhbGlkLgotICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFn
cygpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2li
bGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCi0gICAgLy8gb3Vy
IHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFu
Z2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KLSAgICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlv
bnMgYW55d2F5LgotICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNp
YmxlQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQg
PSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKLSAgICAg
ICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFp
bnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5j
ZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCi0gICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7Ci0K
LSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlv
bigpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rv
cik7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgZmxh
Z3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApOwotICAgIAotICAgIGJvb2wg
c2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3Bv
cnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dT
Y3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKTsKLSAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1w
dHkoKTsKLSAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYm
ICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJz
dENoaWxkKCkpOwotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdl
b21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKLQotICAg
IGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7Ci0gICAgICAgIC8vIFdoZW4gc2Nyb2xs
aW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0
eSBsYXllcnMuCi0gICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkpCi0gICAgICAgICAgICBjbGVh
clJlcGFpbnRSZWN0cygpOwotICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0
aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgotICAgICAgICAg
ICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwg
Z2VvbWV0cnlNYXApOwotICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9w
YWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5n
ZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQotICAgICAgICAvLyB2aXN1YWwg
dG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQg
cmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUg
d2Via2l0Lm9yZy9iLzE4ODEyMSkuCi0gICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCBy
ZWN0cyBhcmUgY29ycmVjdC4KLSAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRM
YXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50
UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVy
KCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5o
YXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygp
Lm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRl
cmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoUmVu
ZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKLQotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVm
bGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFu
Z2UgdGhlIHNpemUoKQotICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdp
bGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdh
cwotICAgIC8vIHVwZGF0ZWQgYWJvdmUuCi0KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAg
IGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAg
bV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KLQotICAg
IGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wb3BN
YXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Ci19Ci0KICNpZiBFTkFC
TEUoQ1NTX0NPTVBPU0lUSU5HKQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUo
KQpAQCAtMTY5MSwzNCArMTU2OCwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAg
ICAgICAgbG9jYWxQb2ludCAtPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKS50
b3BMZWZ0TG9jYXRpb25PZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBT
dWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KLSAgICBSZW5kZXJMYXllciogcG9z
aXRpb25lZFBhcmVudDsKLSAgICBpZiAocmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSAmJiAocG9zaXRpb25lZFBhcmVudCA9IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVu
ZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkpKSkgewotICAgICAgICAvLyBGb3IgcG9zaXRpb25l
ZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIn
cyBzY3JvbGwgb2Zmc2V0LgotICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRT
aXplKHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkg
JiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKSkgewotICAg
ICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0
aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUo
JmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAgICAgICAgICAgbG9jYWxQb2lu
dCArPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVu
dC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29w
ZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVs
c2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAg
ICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAg
ICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Nj
b3BlKCk7Ci0gICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkgewotICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAgICAgICAgICAgIG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOwotICAgIH0gZWxzZSBp
ZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUg
IT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
ID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Ny
b2xsIG9mZnNldC4KKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xs
YWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c3VidHJhY3RTY3JvbGxPZmZz
ZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMobG9jYWxQb2ludCk7CiAKICAgICBib29sIHBvc2l0
aW9uT3JPZmZzZXRDaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNJbkZsb3dQ
b3NpdGlvbmVkKCkpIHsKQEAgLTE4NDAsODYgKzE2OTMsMjggQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQotewotICAgIGF1dG8qIG93bmVy
RWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKLSAg
ICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
KiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghb3du
ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gb3duZXJS
ZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
cyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3Ig
PSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAo
YXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkK
ICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVz
ID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7Ci19Ci0KLVJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFy
aWVzKSBjb25zdAotewotICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5k
ZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGU7Ci0KLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNj
cm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJu
IGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94Pihs
YXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAg
ICB9OwotCi0gICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVT
ZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gY29u
c3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwotICAgIAotICAgIGZvciAoYXV0byogbmV4dExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3Vu
ZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlz
Q29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCi0gICAgICAgICAgICByZXR1cm4gbmV4
dExheWVyOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRl
ckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyog
dXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxz
T3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAg
ICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xs
aW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYg
KGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAg
IHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigp
OwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QK
K1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNv
bnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJm
bG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVy
RWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAo
IW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFs
c2U7Ci19CisgICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIo
KTsKKyAgICBpZiAoIW93bmVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1i
b29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdz
KCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5n
KCk7CisgICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNv
bnN0CkBAIC0yNDQ3LDMzMSArMjI0Miw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNl
dEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAg
cmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBM
YXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxl
ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxl
OwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAm
JiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2li
bGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92
ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2Vs
ZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRp
ZgotfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsK
LSAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxp
bmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQot
ewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5k
ZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAh
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi0KLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFk
ZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xs
aW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2
ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zv
ckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0
YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hl
cyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJj
ZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50
IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdE
ZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAg
IGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0
YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRq
dXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50
PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRh
KSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5l
IEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAg
ICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1
c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAg
SW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVl
ZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhl
IHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlv
biBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlv
bjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1v
dXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHBy
ZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3Np
dGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFz
dEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53
aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRl
ciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgw
KTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9s
bFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1
cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlm
eSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFi
bGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAg
ICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1w
ID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0K
LSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxP
ZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQp
OwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9
IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdl
IGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIElu
dFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zm
c2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJl
bmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNj
cm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRB
cmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVw
ZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBj
YW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8g
aGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQg
bm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAg
ICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsK
LQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBk
byB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0g
ICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
T3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9z
dExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgp
KSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRl
ZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnko
KSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5n
LCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGlu
dCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmlt
YXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
cG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBl
LCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxP
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNj
cm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8
PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNl
bmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9P
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxC
ZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1h
dGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAg
ICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9s
bE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZz
ZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUp
OwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25G
cm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0g
ICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0
LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZp
b3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xs
VHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Ny
b2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcg
PT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDog
b2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxC
ZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1h
dG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhp
cy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNl
dFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxU
eXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAi
IDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNl
ciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8
PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAg
ICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRo
ZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3Zl
cmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUg
aXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3Zl
ZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNl
dCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBp
bnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xs
WE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3Jv
bGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZz
ZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9u
LngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJl
dFdpZHRoOwotCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAg
ICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNl
dCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3Np
dGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBT
Y3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6
IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2Vk
IHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBT
Y3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRo
cmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3Np
dGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVu
ZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hp
bGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFj
dGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5
ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3Np
dGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgp
LmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1p
ZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMg
ZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9s
bCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3Np
dGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAg
ICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVy
IG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAg
Ly8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdh
bGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhp
cyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRl
IGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBs
ZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAg
ICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2Yg
YSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRl
ciksCi0gICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9t
IHRoZSBwYWludC1vcmRlciBwYXJlbnQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50
UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBh
cmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNh
bCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywg
c2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAg
ICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRS
ZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIo
KS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1l
KCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRl
cmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRz
IHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9y
UmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigp
LnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFk
IHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwot
ICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1v
dXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3Vz
ZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBi
b29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0g
ICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJz
YWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRP
bkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVs
bCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAg
ICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVj
dEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJl
bGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCku
ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxF
dmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAg
ICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3
LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9y
KCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wg
ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJh
bWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xs
YmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0y
ODE2LDMwICsyMjg2LDMzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUo
Y29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRS
ZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKICAgICBib29sIGF1dG9zY3JvbGxOb3RJblBy
b2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Q
cm9ncmVzcygpOwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAg
QVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJl
dmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQt
bGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJv
bSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAg
ICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsK
ICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxR
dWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwot
ICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAgICAgICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3
cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUg
bGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0CiAgICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0
aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qg
c2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgotICAgICAgICAgICAgbG9j
YWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
LCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1z
Y3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9
CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRX
aWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxS
ZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lk
ZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9s
bE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkp
OwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBj
dXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90
SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZz
ZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9j
YXRpb24oKSkpOworICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJl
aGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7
CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
ID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblBy
b2dyZXNzICYmIHVzZVNtb290aFNjcm9sbGluZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1l
bnQoKSkpCiAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwot
ICAgICAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNs
YW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0
KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CiAgICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9m
ZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0Owog
ICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2Up
OwogICAgICAgICAgICAgbmV3UmVjdCA9IExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMp
LmJvdW5kaW5nQm94KCkpOwpAQCAtMjg1Nyw3ICsyMzMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVk
IHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAg
ICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNh
bGxvd2VkU2NvcGU7CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJh
bWVWaWV3LnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsK
KyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVD
b250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7
CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3Nl
KHZpZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0
aW9ucy5hbGlnblkpOwogCiAgICAgICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24o
cm91bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRpb24oKSkpOwpAQCAtMjg3Myw4ICsyMzQ2
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0
UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3
LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgYW5pbWF0ZWQpOwogCiAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxh
YmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3Jk
aW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgogICAgICAgICAgICAg
ICAgICAgICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRl
bnRzKGVuY2xvc2luZ0ludFJlY3QobmV3UmVjdCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNp
ZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0
aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KQEAgLTI5MzEsMjQgKzI0MDYs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xs
UmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAg
IGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAg
ICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxs
IG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25p
bmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYg
KFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVu
Y2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBj
b21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0
aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3Np
dGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5j
ZXN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0
IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkg
Y29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlv
dXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBp
bnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFs
aWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJW
aWV3KCkgJiYgaW5zaWRlRml4ZWQpIHsKQEAgLTMwMjYsMTE1NSArMjQ4NCw5NyBAQCBMYXlvdXRS
ZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IExheQogICAgICAgICAvLyBJZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0
aGUgdmlzaWJsZSBhcmVhLCBkb24ndCBib3RoZXIgdHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxp
Z25tZW50cyB3aWxsIHdvcmsuCiAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6Omdl
dFZpc2libGVCZWhhdmlvcihhbGlnblkpOwogICAgICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxB
bGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBT
Y3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVy
c2VjdEhlaWdodCA+IDApCi0gICAgICAgIC8vIElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5
IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVkIHBhcnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Ny
b2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAg
ZWxzZQotICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlv
cihhbGlnblkpOwotICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2Vz
dCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0
aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhl
biBhbGlnbiB3aXRoIHRoZSBib3R0b20uCi0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25t
ZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4g
dmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5o
ZWlnaHQoKSkKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFs
aWduQm90dG9tOwotCi0gICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkg
Y29vcmRpbmF0ZS4KLSAgICBMYXlvdXRVbml0IHk7Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xs
QWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCi0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55
KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpB
bGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3Qu
aGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2
aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJl
Y3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAg
ICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0gICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9p
bnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1
dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9p
bnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zp
c2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAx
KSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29uc3QKLXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lh
bCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092
ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNv
bnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgot
ICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlz
UmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6
Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90
IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAh
cmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBU
aGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVu
ZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8v
IElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4
cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwot
ICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJl
cigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50
LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2Nh
bFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50
KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIo
bG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8g
em9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0
U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAv
IHpvb21GYWN0b3IpOwotICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5p
bXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOwotICAgIGVsZW1lbnQt
PnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwotICAgIAotICAgIExheW91
dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8g
em9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBuZXdP
ZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRP
ZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAK
LSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBh
ZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsK
LQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVt
ZW50PihlbGVtZW50KTsKLSAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0
eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUg
cmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBS
ZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtl
IGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJl
bmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBD
U1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VX
aWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJl
bmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFz
ZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VX
aWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0K
LQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVp
Z2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50
KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1l
IGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3Is
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdp
bkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0K
LSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlz
Qm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRp
bmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3Rv
cjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSks
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91
dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRv
c2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRo
ZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0
aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
OjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlE
Rm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0
IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlm
IChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVk
ZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9u
KCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0g
ICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53
aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXpl
LmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBS
ZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9y
U3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7
Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3Jv
bGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQ
b3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRl
bnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAt
IHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0
LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAg
ICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Ny
b2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNj
cm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkK
LSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNp
emUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNl
bHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVy
Ojppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIo
KS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29y
bmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xs
Q29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVj
dCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxi
YXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0
RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUlu
dFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29u
c3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVj
dCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0
dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBv
aW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9s
bGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwot
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRl
cmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBS
ZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17
Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQp
OwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1
cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QK
LXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0K
LQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUg
UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5z
ZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0
aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAg
ICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgp
LCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxh
YmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsK
LSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVy
TGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCku
ZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRT
Y3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Nj
cm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsK
LSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlz
IGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5j
bGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUlu
dFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91
c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hl
ZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZs
b3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJl
bmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xs
YmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVj
dEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRv
IGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7
Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZl
Tm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJh
ci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJl
c2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAg
IGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNj
cm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6
ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxi
YXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUg
PSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDog
dmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93
Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBi
YXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVj
dC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVj
dC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53
aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xs
YmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8g
YmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChw
bGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRX
aWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAg
YmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1
bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVy
UmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGlj
YWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5l
ciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAg
ICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9t
TGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRp
b25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0g
ICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5z
Y3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNp
emVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICBy
ZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29y
bmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJM
YXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAot
ewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09
IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFs
U2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxh
eWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90
IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQu
Ci0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBt
X3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Ny
b2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnko
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3Qg
cmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGlu
Z01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBh
aW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJv
bHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xs
Q29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsK
LSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUo
cmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlk
ZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1l
bnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2Rl
KCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0
ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJl
bmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9s
bGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxS
ZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAg
ICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFk
ZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2Uo
KS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndp
ZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xs
YmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3Jv
bGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9y
aWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNj
cm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxv
dygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xs
YmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJl
cigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxl
ZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwot
ICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxh
c3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVs
YXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3Jl
YXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQg
Z28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0g
ICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAo
bV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAg
ICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRl
U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygp
ICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJl
Z2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0
aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95
U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Ny
b2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcg
b3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29t
ZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5
bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAg
ICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3Jv
bGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
LXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewot
ICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAg
ICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAo
IWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50
KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9
IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNG
b3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdF
bGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAo
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9k
ZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1
cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0g
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsK
LX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVy
IDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2Up
LCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAo
dHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7
Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1v
ZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAg
ICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xh
dGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAv
LyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAg
ICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tp
bmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2
YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYg
KHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAg
ICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAg
ICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQot
ICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5l
cik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVj
dChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVy
biBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWln
aHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxv
d0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNp
emUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkp
OwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgp
IC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9s
bGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBz
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJv
cmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZs
b3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93
WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJu
IHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xs
SGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0K
LXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93
ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0
eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxl
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3Rh
dGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVy
ZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIg
PyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBv
dmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxl
IG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJl
bmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBh
Z2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7
Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJh
cnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRy
dWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWlu
U2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSBy
YW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAg
ICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Nj
cm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJl
Zm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRz
IGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0g
ICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1h
cnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91
dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRo
aXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJh
Y2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9m
ZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhp
cyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJs
ZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2Rl
IHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50
IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBh
IHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRh
cjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xh
bXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRp
ZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYg
KG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAg
IGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRh
dGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAg
ICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRl
U2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJv
bHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBh
dXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9y
aXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVy
LmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBl
bHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAwKQorICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xl
IGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9y
CisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihh
bGlnblkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0
SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKKyAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24g
dG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgor
ICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNp
YmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgorICAgIGlmIChzY3JvbGxZID09
IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VS
ZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwg
dmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2Vj
dHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkg
YmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7Cisg
ICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisg
ICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3Jv
bGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJl
Y3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9
PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4
cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQo
KSkgLyAyOworICAgIGVsc2UKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNp
YmxlUmVjdC5zaXplKCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29u
dHJvbHMoKSBjb25zdAordm9pZCBSZW5kZXJMYXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2lu
dCYgcG9zaXRpb25JbldpbmRvdykKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8v
IE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAg
cmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVy
biB0cnVlOworICAgIEludFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsK
KyAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRp
b24sIExheW91dFNpemUoMSwgMSkpLCBmYWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZl
YWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK1N0cmlu
ZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xs
YmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhh
dCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0
aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMK
LSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBs
YXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQg
dG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJh
cnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0g
ICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVl
IHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRv
IGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4K
LSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8
IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAg
ICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAg
ICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAg
cGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRv
IGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFp
bnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3Zl
IHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFu
ZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lk
Z2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVu
IHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShh
ZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBz
Y3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1f
aEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRl
ckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dl
cmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAg
ICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNj
cm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVk
Z2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBh
aW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBs
YXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWlu
dFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19Cisg
ICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zv
cm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0
KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRl
cigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYg
KGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFj
a2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmls
dGVyIl9zKTsKIAotICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENv
cm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWls
ZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdl
IG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKLX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGlu
ZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAot
dm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAg
UmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVz
aXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Cisg
ICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0
aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8
PCAqYmFja2luZygpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsK
ICAgICB9CiAKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNp
emVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJl
c2l6ZXJTaXplLmhlaWdodCgpKTsKLSAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEu
MCwgMS4wKSk7Ci0gICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgY29ybmVyUmVzaXplclNpemUpKTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNl
UGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNv
cm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29y
bmVySW1hZ2UsIGltYWdlUmVjdCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KQorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewot
ICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICBy
ZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1Jl
Y3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNv
bnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXpl
clN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXpl
cikgewotICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZz
ZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQ
bGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBE
cmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBh
cmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUg
dGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4
dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIg
PSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6
ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFf
bHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIx
NywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYp
OwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7
Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVj
dCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lnko
KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2lu
dCBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0
b20oKSBjb25zdAogewotICAgIGlmICghY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5z
KGxvY2FsUG9pbnQpOworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94
LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dS
ZWN0Lm1heFkoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xh
eW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
X2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJl
Y3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMo
bG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBi
YWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxT
Y3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRT
Y3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIu
Y29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIo
bV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7
CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0LngoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyKQorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcik7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QubWF4WCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91
dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXll
ckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ks
IEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRSZWdpb25Db250ZXh0KQpAQCAtNDE5MiwxNyArMjU5
Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFw
VGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUGFpbnRSb290KQotewotICAgIGlmICghbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBh
aW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2
aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29u
dGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xs
YmFycyk7Ci0KLSAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwot
fQotCiB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIGNvbnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVy
UmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUpCiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3Ig
PSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyMjUsNyAr
MjYxNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3
aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0aW9uIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNl
IGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJmbG93IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8g
Y29udGFpbmluZyBibG9jayBjaGFpbiBzbyB3ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZv
ciAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcnVsZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1
cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0g
ICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21w
b3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKKyAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKSAmJiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJl
cigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVzKCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWlu
aW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CkBAIC00NDI3LDcgKzI4MTYsOCBAQCBib29sIFJlbmRl
ckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGJvb2wmCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJs
ZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBv
bmNlIHdlIHNjcm9sbCB0aG9zZQogICAgIC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVh
ZC4KLSAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIo
KS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKKyAgICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVk
U2Nyb2xsaW5nID0gIXNjcm9sbGFibGVMYXllcigpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGlu
ZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBi
b29sIGlzWm9vbWluZyA9ICFwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNj
YWxlRmFjdG9yKCk7CiAgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Nj
cm9sbEJ5UGFpbnRpbmcgfHwgaXNab29taW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMg
PSBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOwpAQCAtNDcyMiw4ICszMTEy
LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3Np
dGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxv
Y2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZs
b3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFy
cyAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFy
cygpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9s
c0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRp
bmdJbmZvKTsKIAogICAgICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8g
V2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJl
Y3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTgg
KzM1ODEsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Y2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNr
Z3JvdW5kUmVjdCk7Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3Vu
ZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
IC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0
KSksCi0gICAgICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5y
ZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVy
TGF5ZXI6OmNvbGxlY3RFdmVudFJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4g
cGFpbnRCZWhhdmlvcikKIHsKICAgICBBU1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdp
b25Db250ZXh0KTsKQEAgLTUyMzYsNyArMzYxNCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYK
ICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZh
Y3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRW
aWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmlu
dGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3Qo
TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEu
aW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVj
dChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0K
IAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxs
cHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNl
KTsKQEAgLTU0NjcsOSArMzg0NSwxMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAg
ICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2Nh
bFBvaW50OwotICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAg
IHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAg
ICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+
c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVz
aXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5oaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVy
RnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBy
ZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3
YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2Jq
ZWN0cyBvZiB0aGUgbGF5ZXIuIENoZWNrCkBAIC01NTQyLDM1ICszOTIyLDYgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9p
bnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3Qg
PSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJv
eFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0g
ICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVu
dEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50
U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIo
KSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50
UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9t
TGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5z
aXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdo
dCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1h
eFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwg
cmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZy
YWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZy
YWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJl
c2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0
KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXpl
clJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkp
IHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExv
Y2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVy
SW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5l
ckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0
cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjAxMSwzNiArNDM2Miw2IEBA
IExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNC
b3VuZHMpIGNvbnN0CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVy
OjphZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQot
ewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qo
Ym91bmRzKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKCkKLXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsK
LSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKCkKLXsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5y
ZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0KLSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJl
Y3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xs
UG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChy
ZW5kZXJlcigpLmhhc0NsaXAoKSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8v
IEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9v
bCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5
ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVy
KiByb290TGF5ZXIsIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRp
b25hbDxMYXlvdXRSZWN0PiYgY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3
YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQgdGhlIHJvb3QuCkBAIC02MzM3LDIxICs0NjU4LDYg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVy
biBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/
IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQot
R3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5l
cigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9y
bShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBi
b29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRz
SW50b1dpbmRvdygpOwpAQCAtNjM4MiwxMSArNDY4OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNo
b3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Is
IE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50
aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Ny
b2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNP
dmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
IWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQpAQCAtNjUxMCw4ICs0ODExLDEyIEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAg
IGlmICghaXNOb3JtYWxGbG93T25seSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJl
dHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVM
YXllcigpOworICAgIGJvb2wgaGFzT3ZlcmxheVNjcm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIg
JiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5
ZXItPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKworICAgIHJldHVybiBoYXNPdmVybGF5
U2Nyb2xsYmFycworICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAg
IHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52
YXMoKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzVmlkZW8oKQpAQCAtNjYyOCw3ICs0OTMzLDcg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAg
ICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVy
Zmxvd0NvbnRyb2xzKCk7CisgICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFj
a2dyb3VuZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFz
T3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5v
bkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2MzgsNyAr
NDk0Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29u
dGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgp
IHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dD
b250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChz
Y3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9s
cygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtNjY2MywzOCArNDk2OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25F
bXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhh
c05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2
ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBv
dmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZs
b3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcg
YSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVw
IGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYg
KChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xs
YmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBu
ZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+
c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5
IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBi
ZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBu
ZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYm
IG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAm
JiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFs
Rmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3MTcsNiArNDk5MCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxy
ZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hhbmdlcyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRp
cnR5IGJpdHMuIFRoaXMgbG9naWMgY291bGQKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25n
IHdpdGggdGhlIHJlc3QuCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xs
YWJsZUxheWVyKCk7CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0
eUNoYW5nZWQgPSBvbGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52
aXNpYmlsaXR5KCk7CiAgICAgICAgIGlmIChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRl
cmVyKCkuc3R5bGUoKS51c2VkWkluZGV4KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3
MjYsMTggKzUwMDAsMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0
eUNoYW5nZWQgJiYgc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAg
IGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFy
cXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNC
b3goKSkgewotICAgICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9
IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBk
YXRlTWFycXVlZVN0eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1f
bWFycXVlZSA9IG51bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5
bGUpOworICAgIH0KIAotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0
eWxlKTsKICAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxm
LXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNj
cm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIo
KTsKQEAgLTY3NTAsMTUgKzUwMjEsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0
aW9uU3R5bGUoKSk7CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBh
IHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4K
LSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVT
Y3JvbGxiYXJTdHlsZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxl
KCk7CisgICAgfQogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAg
dXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02Nzc5LDk4ICs1MDQ3LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0
VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkp
Ci0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25l
ci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9s
bGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRl
ZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAg
Ci0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Ny
b2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0g
ZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFk
ZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5
IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9s
bGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3Zl
IG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJl
bmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xs
YmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAg
aWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigp
LmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5k
ZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENv
cm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmlu
aXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0
U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Ny
b2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENv
cm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHls
ZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNj
cm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQ
c2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsK
LQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXpl
ciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1l
bnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBz
aG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBh
cmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXpl
cikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICgh
bV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVs
bHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rp
b24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MTc4LDcg
QEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAg
ICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxh
eWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigp
OwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZy
YW1lcygpIGNvbnN0CkBAIC03MjQ4LDExICs1NDI0LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBh
aW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6
UmVuCiAKICAgICBzdHJlYW0gPDwgIiAiOwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9s
bGluZ1Njb3BlKCk7Ci0gICAgc3RyZWFtIDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29u
dGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxh
eWVyLT5ib3hTY3JvbGxpbmdTY29wZSgpOworICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgICAg
ICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAK
LSAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgIH0KIAogICAg
IG91dHB1dElkZW50KHN0cmVhbSwgZGVwdGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCmluZGV4IGQ4MzczYWFlODE5ZDRlYjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQu
LjA0NDFkZGFiNzJkMmFlZWI4NmMyNTQ0ZmUwMjVjMjA4NTY0OTdlYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZp
b3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNp
bmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQw
LDIwICsxMzksMjkgQEAgc3RydWN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBT
Y3JvbGxCZWhhdmlvciBiZWhhdmlvciB7IFNjcm9sbEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11
c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6
IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJ
VEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwog
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJl
bmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOworCisgICAgZW51bSBjbGFzcyBMYXllclR5cGUgeworICAgICAgICBTdGF0aWMsCisgICAg
ICAgIFNjcm9sbGFibGUKKyAgICB9OwogCiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBM
YXllclR5cGUgbGF5ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KKworICAg
IFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxh
YmxlTGF5ZXIoKSBjb25zdDsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2Fs
bGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVk
IG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAtMjIzLDYgKzIzMSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsg
bV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVk
OgorICAgIFJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOwor
CiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAo
ei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0
MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJx
dWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0K
IAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDIs
MTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5
b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXpl
KCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsK
LSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0K
LSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29u
c3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0g
ICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIg
b3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRl
bHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9v
bCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3Jv
bGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9s
bE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQ
b3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZv
aWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6
Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwg
U2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5p
bWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9u
bHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNj
cm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9p
ZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNj
cm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50
IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFy
aWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWls
YWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMg
aW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlz
aWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVy
ZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFy
OyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29s
IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIo
KTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3Np
dGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRp
b247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxl
QXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wg
aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9
IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJl
c1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0
Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQg
ZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3
aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sg
YXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJv
b2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1
ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxh
eW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGlu
dCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKElu
dFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJv
bHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRT
aXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNv
bnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1
dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7
Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0
U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6
ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1v
ZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNP
cHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVu
aXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1NSw5ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwg
Ym9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5n
UGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9k
ZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBh
Z2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg2LDYg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhD
bGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBj
bGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBl
cyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRS
ZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZv
aWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBm
b3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9CkBAIC02MzcsNiArNTQwLDggQEAgcHVibGlj
OgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9u
VHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250
YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250
YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBs
YXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUg
Y29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29u
c3Q7CkBAIC02OTgsNyArNjAzLDYgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1
YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRU
ZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0
VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRl
c3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0
cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBS
ZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0Ns
aXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwx
MSArNjg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5
b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0K
ICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBt
X3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4K
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwyMCArNzU3LDkgQEAgcHVibGljOgogICAgIFJlbmRl
ckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJv
b2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBo
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KLSAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29u
dGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZTsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoVHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChp
c1RyYW5zcGFyZW50KCkgfHwgaGFzQmxlbmRNb2RlKCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAm
JiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVo
YXZpb3IgJiBQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0Nv
bXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEgKzc3Myw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVl
cnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91
bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAg
ICBib29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wg
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KLSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRo
RmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRl
cnMoKSBjb25zdDsKIApAQCAtOTE4LDggKzgwMSw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvd0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29s
IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKTsgfQotCiAgICAgdm9pZCBzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50
RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9v
bCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJh
Y2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsgfQogCkBAIC05MzAsNyArODExLDcgQEAgcHVibGlj
OgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwg
U2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wg
aW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAot
ICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRl
YnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtMTAxMCw5ICs4OTEsNiBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAg
ICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWlu
dCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50
SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwgMSwKQEAgLTEwMzAsMTYgKzkwOCw2IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwg
T3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwg
ICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0
b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRB
bmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29u
c3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDcyLDcgKzk0MCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlS
ZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0
aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRl
cmVyKTsKICAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWlu
dFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3Qq
IHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJik7CiAgICAgdm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jv
b3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFp
bnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50
b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9w
dGlvblNldDxQYWludExheWVyRmxhZz4pOwpAQCAtMTA5OSw2NCArOTY2LDE0IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRl
bnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRl
ciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJ
bkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYs
IExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBo
aXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxs
cHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91
bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRS
ZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAg
dm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9v
bCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3Zl
cmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7
CiAKICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8v
IFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZl
KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFs
OwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05v
ZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJs
ZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJz
LCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBv
dmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNl
UG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2
ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChi
b29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNv
bnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29u
c3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0
cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAg
dm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9p
ZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgot
Ci0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRk
ZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxU
byhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXll
cnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Ny
b2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChi
b29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBj
b25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0
dXMoKTsKQEAgLTExOTYsMTQgKzEwMTMsNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBw
b2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zv
cm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsK
LSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNv
cm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNl
dEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50ID0gYjsgfQpAQCAtMTIxNywyMCArMTAyNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0
VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQo
KSBjb25zdDsKIAotICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIElu
dFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9s
bGJhcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVz
aXplcjsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8g
c2Nyb2xsQ29ybmVyIDogcmVzaXplcjsKLSAgICAgICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dD
b250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29u
c3Q7Ci0KKyAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0
aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVy
Vmlld0xheWVyIDogMTsKQEAgLTEyNDQsMTAgKzEwNDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9ub3JtYWxGbG93TGlzdERpcnR5OiAxOwogICAgIGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxp
c3QgOiAxOwogCi0gICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3Vy
cmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFu
ZCBzdG9wLgotICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAx
OwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24n
dCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVh
ZCB0bwpAQCAtMTI1OSwxNCArMTA1MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkg
ZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmxlbmQpLgogICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rp
b24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lk
ZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5z
aWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBt
X3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29u
dGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwog
ICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3
cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyAr
MTA3Nyw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmll
d3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0
cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKLSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0
YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpAQCAtMTMzOCwyNSArMTExNyw4IEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6
ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8
U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhl
IHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xs
U2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIg
b2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRy
PFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hl
PiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNj
cm9sbGJhck9mZnNldDsKLQotICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1h
cmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAg
ICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxp
bmdTY29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAg
ICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlv
bmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0
IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9z
aXRpb247CkBAIC0xMzY2LDEwICsxMTI4LDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1h
dGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBv
cmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAg
IC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXpl
ci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0g
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBv
aW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBw
YWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxS
ZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4
ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYxZS4uY2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQw
MmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKQEAgLTUzLDEzICs1MywxNCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNl
TG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAi
UHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdt
ZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJl
bmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAt
MjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQo
KQogI2VuZGlmCiAKICAgICBBU1NFUlQobV9vd25pbmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7
Ci0gICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhtX293
bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3Jv
bGxDb29yZGluYXRlZExheWVycygqc2Nyb2xsYWJsZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2lu
Z1NoYXJpbmdMYXllcnMoKTsKIH0KQEAgLTQyMSwxMSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJh
Y2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShj
b25zdCBSZW5kCiAKICAgICBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2Ug
PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmlzaWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5p
bWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0gZnJhbWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAg
IGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5
ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgIGlmICghdXNlTWluaW1h
bFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAmJiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNv
dmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVM
YXllcigpLT5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGls
ZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsK
ICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBM
YXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJS
ZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2Vz
dG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygp
OwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5l
ckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBh
cmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94Lmxv
Y2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9u
KCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6
ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21w
b3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zm
c2V0ID0gdG9MYXlvdXRTaXplKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCkt
PnNjcm9sbE9mZnNldCgpKTsKKyAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlv
dXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNl
c3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxD
b250YWluZXJCb3guc2l6ZSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NM
YXllclJlY3Q7CkBAIC0xMjg1LDcgKzEyODksOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAg
ICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5
ZXJSZWN0LnNpemUoKSk7CiAKICAgICAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJm
bG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9
IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5
ZXIoKSk7CisgICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5
LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQo
KTsKIAogICAgICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdp
bihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVC
eSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEzOTAsNyArMTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2Vz
dG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9j
YXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5k
ZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENv
bnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zm
c2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNT
RVJUKHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5
ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsK
QEAgLTE0MDQsNyArMTQxMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJv
b2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJ
bnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xh
eWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7
CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXpl
KCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29u
dGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293
bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChz
Y3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikg
ewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRv
bid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRo
YXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRl
bnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0g
ICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3Rl
IHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3Jp
Z2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVy
LgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNj
cm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIu
c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24o
ZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9z
aXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTExLDEyICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFy
KSBjb25zdAogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xs
YmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xs
YmFyKCkpOworICAgIGlmICghbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQog
CiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNv
bnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1
aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9v
d25pbmdMYXllci5yZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3Jv
bGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9v
d25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJs
ZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0
KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNj
cm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0
aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAg
IGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xs
YmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2Fs
U2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAg
cmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2
NSwxMCArMTk4NCwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dD
b250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5n
ZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNT
Y3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCkpOworCiAgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQot
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXll
ckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcik7CiAgICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAg
ICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlk
Q2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcs
OCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5
ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNj
cm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIw
MjAsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
c0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0
aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxh
eWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAg
ICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxh
eWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIg
PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxi
YXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQp
OwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXll
ci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Nj
cm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hv
clBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCpt
X3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRv
cigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0
aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwor
ICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmco
Km1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCksICp0aGlzKTsKIAogICAgICAgICB3aWxs
RGVzdHJveUxheWVyKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxs
RGVzdHJveUxheWVyKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSAr
MjE5NywxMSBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJz
KGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFy
ZW50QW5kQ2xlYXIobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIH0KIAotICAgIGlmICht
X3Njcm9sbENvbnRhaW5lckxheWVyKQotICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xs
aW5nTGF5ZXIobV9vd25pbmdMYXllcik7Ci0gICAgCisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVy
TGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0yOTg1LDggKzMwMTAsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNO
ZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAg
IGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+
ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUxheWVyKCkpOwogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBw
ZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293
bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIp
OworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+
b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJl
cik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1
OCwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZt
X293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29u
dGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVy
LmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQp
Ci0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50
aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRp
bmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisg
ICAgICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJXaXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0lu
Zm8sIHBhaW50RmxhZ3MpOwogCkBAIC0zMzIzLDE3ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwg
Y29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXll
ci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFT
U0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3Jv
bGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9
PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIo
bV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwor
ICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAg
IHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGlj
c0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJS
ZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJP
clJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIp
OworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0
IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVk
Q2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXll
ci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0
cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29u
dGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVj
dCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6
ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVm
IE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApp
bmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi43NWYwYmRlZTQ5
YjdlNWMyOGZjOGY2ZDRlNzY2N2RhZmYwMWQ1YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcg
QEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3Np
dGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAhbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1
ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBMYXlvdXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMs
NyArMzI5Myw5IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNj
cm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Ny
b2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25z
dCBSZW5kZXJMYXllciYgb3ZlcmZsb3dTY3JvbGxMYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIu
Ym94U2Nyb2xsaW5nU2NvcGUoKSA9PSBvdmVyZmxvd1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFT
U0VSVChvdmVyZmxvd1Njcm9sbExheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4g
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dT
Y3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwog
fQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXll
cihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlh
dGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRlTGF5ZXIpCkBAIC00NTY3LDggKzQ1NjksMTEg
QEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5n
Tm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQKIExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXll
ciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklY
TUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQg
YmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlmICghYW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAg
ICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoeyB9LCBMYXlvdXRTaXplKHNjcm9sbGFibGVMYXllci0+dmlzaWJsZVNpemUoKSkpOworICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xs
YWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00
NTg4LDExICs0NTkzLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3Jv
bGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBm
aXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVy
KCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCks
IGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsK
KyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7
CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhp
Y3NMYXllcigpLAogICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBi
YWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIDogbnVsbHB0ciwKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9s
bGFibGVMYXllci0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAg
ICB9CiB9CiAKQEAgLTQ2MzAsOCArNDYzOCwxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQog
ICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAg
ICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpz
Y3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkK
LSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xs
YWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMg
JiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBh
cmVudE5vZGVJRCkgeworICAgICAgICAgICAgQVNTRVJUKGxheWVyLnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Ny
b2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7
CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlEOwpAQCAtNDc2NywyMCAr
NDc3NywyMSBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNT
Y3JvbGxpbmdOb2RlcygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIHJlbGV2
YW50U2Nyb2xsaW5nU2NvcGUgPSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICBhdXRvIHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUg
PSBbXShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJMYXllclNjcm9s
bGFibGUmIGxheWVyKSB7CiAgICAgICAgIGlmICgmbGF5ZXIucmVuZGVyZXIoKSA9PSAmcmVuZGVy
ZXIpCiAgICAgICAgICAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKTsKICAgICAg
ICAgcmV0dXJuIGxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9OwogCi0gICAg
YXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y29udGVudHNT
Y3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVy
KCkpOworICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LnNjcm9sbGFi
bGVMYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJl
bmRlcmVyIDogKnNsb3dSZXBhaW50T2JqZWN0cykgewogICAgICAgICBhdXRvIGxheWVyID0gcmVu
ZGVyZXIuZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYg
KCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICAgICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2Nv
cGUocmVuZGVyZXIsICpsYXllcik7CisgICAgICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxl
dmFudFNjcm9sbGluZ1Njb3BlKHJlbmRlcmVyLCAqbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKTsK
ICAgICAgICAgaWYgKHNjcm9sbGluZ1Njb3BlICE9IHJvb3RTY3JvbGxpbmdTY29wZSkgewogICAg
ICAgICAgICAgYXV0byBlbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQgPSBhc3luY1Njcm9sbGFibGVD
b250YWluZXJOb2RlSUQocmVuZGVyZXIpOwogICAgICAgICAgICAgQVNTRVJUKGVuY2xvc2luZ1Nj
cm9sbGluZ05vZGVJRCk7CkBAIC00ODA0LDcgKzQ4MTUsNyBAQCBTY3JvbGxhYmxlQXJlYSogUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3Jv
bGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGlu
Z05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAot
ICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpOwor
ICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5z
Y3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxS
ZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVy
TGF5ZXJCYWNraW5nJiBiYWNraW5nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDdhODViMjY5NmM2OGFhNDBkNDI4MWYzYmMyMmM2
YmNkNmI4ODAwNWEuLmJmZjIxOWM0Yjc5MTExNjdiNmM3NWExY2YwYTg2NTg4ZTE5YjY4MWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xp
cHBpbmdTdGFjay5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3
dGYvT3B0aW9uU2V0Lmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRhYWY0
YTA4MTUxYThjYjFkLi5kM2VjNDNhZGNhMzNjMjY1YzhjMGUwZjIzMGQ2MDQwMGJmNjM0MTk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpk
ZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcigp
CiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5k
ZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1FOiBIb29rIGluIG9wdGltaXphdGlvbiB0byBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xh
eWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGU+KCp0aGlzKTsKICAgICBzZXRI
YXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5pbnNlcnRPbmx5VGhpc0xheWVyKFJlbmRlckxh
eWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVDaGFuZ2UpOwogfQogCitSZW5kZXJMYXllclNj
cm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51
bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBh
aW50aW5nTGF5ZXIoKTsKQEAgLTIwOCw5ICsyMTQsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5l
d1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xkU3R5bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5l
clJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUoKm9sZFN0eWxlLCBuZXdTdHlsZSkpIHsKLSAg
ICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGxheWVyKCkpIHsKLSAgICAgICAg
ICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgcmVuZGVy
TGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5
KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZp
ZXcmIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmll
dy51cGRhdGVTbmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyOSwxMCBAQCB2b2lkIFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5s
YXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxT
bmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCku
c3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAg
ICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAg
ICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbFNuYXBC
b3gtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlzQm9keSgpIHx8IHNjcm9sbFNuYXBCb3gt
PmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
U25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Ny
b2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2FkY2E2ZDUw
NDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2YzA4MmY5YWI0ZTFhNjZlM2JkYmM3ZWJk
Mzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAgICBMYXlvdXRS
ZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVuY2xvc2luZyBv
YmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiArNDgsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJlbmRlckxheWVy
KiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVf
RVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7CisK
ICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTEwZTdlNGQx
MGRkZTRjMGRhZTUzOWNiM2I2MzI2OWMyYmE1NDllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKQEAgLTAsMCArMSwy
MDAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUg
Q29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3RoZXIgY29udHJpYnV0b3JzOgor
ICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1PgorICogICBEYXZpZCBCYXJv
biA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFuIEJpZXNpbmdlciA8Y2Jp
ZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5jb20+Cisg
KiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1naWVzc2Vu
LmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29tPgorICogICBCb3JpcyBaYmFy
c2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUo
KQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOworICAgIHJl
dHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCitSZW5kZXJMYXllclNjcm9sbGFibGU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXllcihyZW5kZXJlckxheWVyTW9kZWxPYmpl
Y3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgLCBtX2luUmVzaXpl
TW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAgLCBt
X2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFs
c2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQoreworICAgIG1faXNT
ZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgIGlm
IChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisKKyAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7CisgICAgICAgIC8vIFdl
IHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3Jv
bGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBl
bGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9s
bFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJy
ZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVk
TGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICB9Cit9CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpCit7CisgICAgaWYgKGluUmVzaXpl
TW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXpl
TGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVh
KHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRl
cmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNsZWFy
U2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwg
cm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5z
ZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0
aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAg
ICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgp
LCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOwor
fQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFw
cGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1
cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNv
bHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQor
CitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0
YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAv
LyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93
aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7
CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2Vy
OworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0
YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihh
ZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisg
ICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBz
cXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0
dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNj
cm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVs
dGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVj
ayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4g
V2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNv
aGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBp
ZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxh
c3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91
c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8
PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQg
dGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBp
ZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykK
KyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShh
ZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisKKy8vIEZJWE1FOiB1bmlmeSB3aXRoIHRo
ZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxh
YmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Cisg
ICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFt
cCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOwor
CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxp
bmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0
KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEg
PSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3
ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJ
bnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9m
ZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiBy
ZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBz
Y3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVk
QXJlYSk7CisKKyAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51
cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQg
Y2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8v
IGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50
IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAg
ICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
CisKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwg
ZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwor
ICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRp
Y19jYXN0PFJlbmRlckxheWVyKj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUgIiA8PCBwb3NpdGlvbik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9u
LCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKK3sKKyAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0g
U2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3Jv
bGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBj
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChj
bGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNj
cm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBz
ZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRp
b24pOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1
cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7
CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0Owor
ICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2Fu
Y2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xs
T2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmlt
YXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZp
b3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24g
cG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgp
LCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Cit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sK
KyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
ID0gV1RGOjpudWxsb3B0OworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5j
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25z
dAoreworICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0
YXRpb25EaXNhbGxvd2VkU2NvcGU7CisKKyAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUg
PSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRl
ckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5k
ZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB9OworCisg
ICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlz
Q29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKTsKKworICAgIGZvciAoYXV0byogbmV4dExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBu
ZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRT
Y3JvbGxhYmxlKCpuZXh0TGF5ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV4dExheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV4dExheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2Vk
KEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVh
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGlmIChyZWFzb24g
PT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4o
dHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAorewor
ICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092
ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5z
Y3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNT
Y3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
ICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNF
bmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5v
bmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Ny
b2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBv
ciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21l
IGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxl
LgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAg
aWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Ny
b2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBt
X3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Ny
b2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JT
dWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMg
OiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAg
ICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xs
YmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Cisg
ICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiBh
Y3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBi
b29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5k
ZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCks
IG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50
cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0
b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdl
dC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGVz
dHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAg
ICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisK
KyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxs
cHRyOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRl
bkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30K
KworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisK
KyAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnNjcm9s
bGFibGVMYXllcigpICYmIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBw
ZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6IEV4
dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxlbWVu
dD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3go
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVt
ZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJv
eCwgYm94LT5zdHlsZSgpKTsKK30KKyNlbmRpZgorCisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0
IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFj
Y2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRl
IG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCit2b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50
KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBk
YXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Ny
b2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIHBh
Z2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwor
fQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5
bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9y
ZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJG
TE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVy
ZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygp
IHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Ny
b2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAg
ICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisg
ICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5p
c092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQp
IGNvbnN0Cit7CisgICAgaWYgKCFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9j
YWxQb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZs
b3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBv
aW50KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAgIGlmIChyZW5kZXJl
cigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0
cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxD
b3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJh
ciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAg
ICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSW50U2l6ZSBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7CisgICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4
WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9j
YWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWlu
dGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBo
YXZlIG5vIG92ZXJmbG93LgorICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vj
b25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAor
ICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBw
YWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFs
c2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJl
IG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0
IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVu
LAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVh
bnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBk
b2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0Lgor
ICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9s
cykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNl
dDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNz
IGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1faEJh
ciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnRS
ZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJlY3Qu
bW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVy
c2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7
CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0g
cmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0
byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZz
ZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92
ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFu
ZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lk
Z2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVu
IHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShh
ZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBz
Y3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1f
aEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBo
YXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisg
ICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIAorICAgIC8vIFBhaW50IG91ciBy
ZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgor
ICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENv
cm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFh
YnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNj
cm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9z
Y3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29u
dGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkg
c2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBp
dC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRo
ZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0g
UmVzaXplOjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVj
dHMucmVzaXplcjsKKyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAg
IGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAg
ICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3Qo
Y29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJz
UmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3Jl
eSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlw
cGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFt
ZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIp
KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0
KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0
UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVy
LnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNv
cm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihT
UkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJl
Y3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxh
eW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBv
cmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9s
bERpbWVuc2lvbnMoKTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklY
TUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dy
YW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzU5NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisK
KyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNz
KCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlk
IHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVs
bCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8g
dGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xh
bXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1v
ZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRz
LgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0
aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdo
dCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93
ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0
YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwor
I2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgp
KQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zm
c2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChz
Y3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIHNl
dE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBzZXROZWVkc0NvbXBv
c2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5n
VXBkYXRlKCk7CisKKyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0
Cit7CisgICAgLy8gV2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0
aGV5IG5ldmVyIGhhdmUKKyAgICAvLyBoYXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBk
byAiaW1wbGljaXRseSIgY2xpcCB0aGVpciBjb250ZW50cywgc28KKyAgICAvLyB3ZSB3YW50IHRv
IGFsbG93IHJlc2l6aW5nIHRoZW0gYWxzby4KKyAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigp
LnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBM
YXlvdXRTaXplJiBvbGRPZmZzZXQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBv
c3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50IGJ1dCBpcyBub3QgcmlnaHQgbm93LgorICAgIGlm
ICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJlc2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUg
cmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVyZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRp
bnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhlcmU/CisgICAgLy8gSWYgdGhleSBkbyBpdCB3b3Vs
ZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3aXRoIHRoZW0gZXhwbGljaXRseS4KKyAgICBFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgYXV0byogcmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1lbnQtPnJlbmRlcmVyKCkpOworCisgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50LmZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
OworCisgICAgYXV0byBhYnNvbHV0ZVBvaW50ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKKyAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50
UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFic29sdXRlUG9pbnQpKTsKKworICAgIExheW91dFNp
emUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICBu
ZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKKyAgICBu
ZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAg
IAorICAgIExheW91dFNpemUgY3VycmVudFNpemUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0
aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXItPmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAg
TGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVsZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmco
KS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7CisgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JS
ZXNpemluZyhtaW5pbXVtU2l6ZSk7CisgICAgCisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9m
ZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZz
ZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3
T2Zmc2V0LndpZHRoKCkpOworICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRq
dXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CisgICAgfQorICAgIAorICAgIExheW91dFNpemUgZGlm
ZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5l
eHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1cnJlbnRTaXplOworCisgICAgU3R5bGVkRWxlbWVu
dCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOworICAg
IGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSByZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9
PSBCb3hTaXppbmc6OkJvcmRlckJveDsKKworICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+
c3R5bGUoKS5yZXNpemUoKTsKKyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYg
ZGlmZmVyZW5jZS53aWR0aCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBm
cm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQo
KSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCBy
ZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgp
OworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndp
ZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxC
b3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGgg
LyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53
aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgaWYgKHJlc2l6ZSAh
PSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgeworICAgICAgICBp
ZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAv
LyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAg
c3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRv
cCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFj
dG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0
IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAw
X2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAg
ICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRv
SW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7CisgICAgfQorCisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisKKyAgICAvLyBGSVhN
RSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBh
cyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3Lgor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChV
c2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAodGhpcyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigp
KQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBu
dWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBh
bmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhl
IEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3Rvcldp
dGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sK
KyAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExP
RyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCIpOworCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlN
YXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgm
Z2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKK3sKKyAgICBtX2Js
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcykpOwor
fQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
KFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxh
eWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxh
eWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJC
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKK3sKKyAgICBt
X2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKKyAgICByZWN1cnNpdmVseUNs
ZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKHRoaXMpOworfQorCitzdGF0aWMgdm9pZCByZWN1
cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyTGF5ZXIqIGxheWVyKQorewor
ICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOwor
ICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVj
dGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0
aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
b3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdp
b25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAg
ICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlw
UmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2Nv
dW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVy
UGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJl
Y3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAg
IHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRp
bmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFj
a2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRy
OworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tp
bmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNz
TGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVy
IHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYg
YmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBv
bmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0
b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25z
dAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24o
KTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cg
b3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xs
YmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJm
bG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwor
fQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92ZXJm
bG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNj
cm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9v
bCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0
eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxv
dyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBo
YW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5v
dmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZs
b3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIg
dGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xs
YmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhv
cml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBi
b3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJh
cikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9s
bGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Ny
b2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xs
YmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxi
YXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4g
c3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNl
ZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFy
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVu
YWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIg
JiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwg
JiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5h
YmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAg
IHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3co
KSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBv
dmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxl
IG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJl
bmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisg
ICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBh
Z2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7
CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGlj
YWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKworICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkg
eworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJh
cnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRy
dWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLmxheW91dCgpOworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWlu
U2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSBy
YW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAg
ICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAg
ICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Nj
cm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciogbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIq
IGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRT
aWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
Y2hpbGQsIGdlb21ldHJ5TWFwLCBmbGFncyk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRy
eU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsRmxhZz4gZmxhZ3MpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRl
ZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQorICAgIC8vIHRoZXNlIGZs
YWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZh
bGlkLgorICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOworCisgICAgLy8gSWYg
d2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRo
ZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCisgICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhl
eSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0
ZWQgdG8KKyAgICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgorICAgIGlm
ICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0
aW9uKCk7CisgICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc0No
YW5nZWRBbmNlc3Rvcik7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2Vk
QW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dT
Y3JvbGwgfSkpCisgICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7CisKKyAgICBpZiAocmVuZGVyZXIo
KS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQorICAgICAgICBmbGFn
cy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7CisKKyAgICBpZiAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNl
c3RvcldpdGhPdmVyZmxvd0NsaXApOworICAgIAorICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFp
bnRSZWN0cyA9IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2Vz
dG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNl
c3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBi
b29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKKyAgICBib29sIHNo
b3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJl
cGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOworICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFw
cGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKKworICAgIGlmIChzaG91bGRDb21wdXRl
UmVwYWludFJlY3RzKSB7CisgICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21w
dXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCisgICAgICAg
IGlmIChpc1Zpc3VhbGx5RW1wdHkpCisgICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOwor
ICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWlu
ZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgorICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRS
ZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOworICAg
IH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0
KCkpIHsKKyAgICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50
cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFy
ZWEgdHJhbnNpdGlvbnMgZnJvbQorICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93
LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFs
aWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEy
MSkuCisgICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4K
KyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJl
bmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigp
LmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVw
YWludCgpKSk7CisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVj
dHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSBy
ZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9y
UmVwYWludCgpKSk7CisgICAgfQorCisgICAgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKHRoaXMsIGdlb21ldHJ5TWFwLCBmbGFncyk7ICAgIAorCisgICAgLy8gV2Ug
ZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0aW9u
IHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgpCisgICAgLy8gb2YgYW4gb2JqZWN0LCB0
aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0
aGUgbGF5ZXIgcG9zaXRpb24gd2FzCisgICAgLy8gdXBkYXRlZCBhYm92ZS4KKworICAgIGlmICht
X21hcnF1ZWUpIHsKKyAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwor
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247CisgICAgfQorCisgICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAg
ICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7CisKKyAgICBy
ZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtl
cnMoKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3Jv
bGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11
bVNjcm9sbE9mZnNldCgpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJG
cmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIGxvY2FsUGFpbnRpbmdJbmZvKQoreworICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQg
OiBsYXllckZyYWdtZW50cykgeworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qu
aXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNsaXBUb1JlY3QoY29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwor
ICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRv
TGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExv
Y2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICAg
ICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7
CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0lu
dChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5k
VG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGlu
IHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
OworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5
b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVu
dHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJv
eFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJv
cmRlckJveFJlY3QoKSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OworCisgICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBm
cmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAg
ICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1
cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9t
Qm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVy
UmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0
b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMu
bWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNp
emUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBs
YXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBM
YXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBh
dXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlm
IChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYg
cmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9p
bnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAg
bV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZs
b3dMZWZ0KCkpKTsKKyAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZs
b3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92
ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsK
KyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAg
ICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsK
KyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgp
IC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3Jv
bGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAg
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8
fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQo
KSkgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xs
UmVjdCA9IHJlY3Q7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NF
UlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVl
LCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9s
bFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVs
c2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKKworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0Owor
ICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJl
bmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAg
bV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXpl
cikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBw
YWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNF
bXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVy
UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lcjsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBz
Y3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7
CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21S
ZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJl
bnRSZWN0KTsKKyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAg
ICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2lu
dCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5j
b252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwor
fQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIo
JnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZz
ZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQor
eworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKwor
U2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRp
bmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVz
U2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9y
KSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3Zl
cmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFy
cykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAK
KyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4g
eyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBz
Y3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkg
LSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKKyAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9y
U3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7
CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3Jv
bGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRl
bnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAt
IHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0
LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAg
ICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Ny
b2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNj
cm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkK
KyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNp
emUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNl
bHNlCisgICAgcmV0dXJuIEludFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJM
YXllclNjcm9sbGFibGU6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAorewor
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRs
aW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAorewor
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAg
IHJldHVybiByZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9y
bXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNP
dmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAg
IGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxp
bmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
YXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
aWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRp
ZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Ny
b2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5n
czo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IGNvbnN0Cit7CisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOiAiICsgbWVzc2FnZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIo
KnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlm
ICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3Vt
ZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOwor
fQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQorewor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAg
IHJldHVybjsKKworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8
IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9s
bFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRp
b24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgp
KSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0
ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAg
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
SXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBz
ZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZz
ZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAg
ICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNl
dC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0
V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Cisg
ICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNj
cm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdP
ZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAg
IH0KKyAgICAKKyAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pIHsKKyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQg
YSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1
c2VyIGdlc3R1cmUuCisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJs
eSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgor
ICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAg
ICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247
CisKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBV
cGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25s
eSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBX
ZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8g
YSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZp
ZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsK
KyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3Qg
dXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVW
aWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5n
IGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFk
eSB1cGRhdGluZyBsYXllcgorICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXll
ciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXll
cnMsIGFuZAorICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5n
IHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgor
ICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRp
b24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdo
aWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28g
dHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgp
KQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBk
YXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNs
aXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFn
ZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBG
cmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
OworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNj
cm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7
CisgICAgCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVw
YWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVw
YWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQg
PSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQor
ICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5l
dmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7
CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVw
ZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBh
aW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9
CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisg
ICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2No
ZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50
LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAg
ICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVu
dHNDaGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRo
aXMpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29t
cG9zaXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlz
IGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5l
ZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVy
cyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0
b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Cisg
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAg
ICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVU
eXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25s
eSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5n
LgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVl
ZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBj
b21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
OjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJP
ZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92
QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQor
ICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRp
b24oKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKworCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFT
ZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3Qg
PSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAg
ICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJl
bmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxl
ID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJl
bW92ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAg
IGlmIChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFi
bGVBcmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNl
OworICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9y
UmVtb3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcs
IHNvIGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJz
ZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyQm94KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1faEJhcikgewor
ICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwor
ICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsK
KyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIp
CisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQorewor
ICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIo
cmVuZGVyZXIoKSk7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6
U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwor
CisgICAgaWYgKCFjb3JuZXIpIHsKKyAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAg
bV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5k
ZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTog
QSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Nj
cm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpjbGVhclNjcm9sbENvcm5lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7
CisgICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlUmVzaXplclN0eWxlKCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1
YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8g
cmVzaXplciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+
Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5k
ZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAg
IGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jl
c2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xs
YmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQh
CisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9y
ZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVy
LT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpjbGVhclJlc2l6ZXIoKQoreworICAgIGlmICghbV9yZXNpemVyKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9yZXNpemVy
ID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1h
Z2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlcigp
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2Fk
UGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOwor
ICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAg
ICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAg
ICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYo
KSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsK
KyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwor
ICAgIH0KKworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkpIHsKKyAgICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6
ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVz
aXplclNpemUuaGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4w
LCAxLjApKTsKKyAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29u
dGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgp
LCBjb3JuZXJSZXNpemVyU2l6ZSkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAg
ICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29y
bmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3Ju
ZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxv
d0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0
cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAg
IGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CisgICAg
Ly8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRk
aW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisK
KyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9u
dGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAg
Ym9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xs
YmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJv
b2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAo
aGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZl
Tm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7
CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9u
ZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNv
cm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
PyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAg
ICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAorICAgICAgICB9OworICAgIH0KKworICAg
IE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAg
ICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAg
ICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAg
ICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29y
bmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9u
dGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAg
ICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAg
ICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFy
UmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAg
ICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAg
ICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1
dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9t
TGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3Ju
ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngo
KSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJT
aXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJT
aXplIH07CisgICAgfTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAg
IHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYg
KGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAg
ICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNp
emVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNz
IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0
IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTWFycXVlZSgpCit7Cisg
ICAgaWYgKG1fbWFycXVlZSkgeworICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2Ug
U2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgorICAgICAg
ICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgICAg
IG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgICAgIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRl
ZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCku
c3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVu
ZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAg
bV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKKyAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkK
KyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91
dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3Jv
bGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OworICAgIGlmIChy
ZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0g
ZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24o
KSkpKSB7CisgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBv
c2l0aW9uZWRQYXJlbnQtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAvLyBGb3Ig
cG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9u
ZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJl
bnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAg
ICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklu
bGluZT4ocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAg
ICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0
aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlv
bmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAg
ICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
QVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHBhcmVudExheWVyU2Nyb2xsYWJsZSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkg
eworICAgICAgICAgICAgaWYgKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6
ZShwYXJlbnRMYXllclNjcm9sbGFibGUtPnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAg
ICBBU1NFUlQocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkp
OworICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyU2Nyb2xsYWJs
ZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVyID0gcGFyZW50TGF5ZXItPnBhcmVu
dCgpOworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdM
YXllclNjcm9sbGFibGUgPSBudWxscHRyOworICAgICAgICAgICAgd2hpbGUgKGVuY2xvc2luZ0xh
eWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBl
bmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBlbmNsb3NpbmdMYXllciA9IGVuY2xvc2luZ0xheWVyLT5w
YXJlbnQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xheWVy
U2Nyb2xsYWJsZSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllclNjcm9s
bGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAgICAgICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxp
bmdTY29wZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoIW1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3Jv
bGxpbmdTY29wZSkKKyAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRT
Y3JvbGxpbmdTY29wZSgpOworICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAg
ICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sK
KyAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2
ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAg
bV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXIt
PnN0eWxlQ2hhbmdlZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVk
NmQ3NzE4MDcwNzQwMDQ2ZDIxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRz
Y2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBPdGhlciBjb250cmlidXRv
cnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERhdmlk
IEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJpc3RpYW4gQmllc2luZ2Vy
IDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRlLmNv
bT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5pLWdp
ZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJvcmlz
IFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIp
IG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiks
IGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQor
ICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxs
b3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRl
cm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwp
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRp
bmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBh
bmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBh
cyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCit1c2luZyBTY3JvbGxp
bmdTY29wZSA9IHVpbnQ2NF90OworCitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGUgZmluYWwK
KyAgICA6IHB1YmxpYyBSZW5kZXJMYXllcgorICAgICwgcHVibGljIFNjcm9sbGFibGVBcmVhIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJM
YXllclNjcm9sbGFibGUpOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsK
KyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOworCisgICAgZXhwbGljaXQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFs
IH5SZW5kZXJMYXllclNjcm9sbGFibGUoKTsKKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUo
KSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKworICAgIEludFNpemUgdmlzaWJs
ZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZp
bmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5h
bDsKKworICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQo
KSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7
CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0
aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6
ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAg
ICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYs
IFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xs
VG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3Qg
U2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9s
bFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Cisg
ICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNj
cm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRp
b24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
LCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBh
cmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgp
IHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAg
ICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIG5lYXJl
c3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJsZS4KKyAgICAvLyBGSVhNRTogVGhp
cyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5
IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFibGVBcmVhLgorICAgIFJlbmRlckxheWVy
U2Nyb2xsYWJsZSogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENy
b3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKworICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNp
emVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOworCisgICAgYm9vbCBz
Y3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFy
IHx8IG1fdkJhcjsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsK
KyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9s
bGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRl
c3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9
CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2Fs
U2Nyb2xsYmFyKCk7IH0KKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0IGZpbmFsOworCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCisgICAg
U2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Nj
cm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAg
U2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisK
KyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29s
IGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29s
IHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworICAg
IGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNl
dFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25j
aWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
ID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlk
U3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAg
IHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7CisjZW5kaWYKKworICAgIC8vIFJldHVybnMg
dHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0
IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93Lgor
ICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworCisgICAgaW50IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25z
dDsKKyAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkg
Y29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6
ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7CisKKyAgICB2b2lkIHBh
aW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBm
YWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91
dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworCisgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsK
KyAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBMYXlvdXRT
aXplJik7CisgICAgYm9vbCBpblJlc2l6ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luUmVzaXpl
TW9kZTsgfQorICAgIHZvaWQgc2V0SW5SZXNpemVNb2RlKGJvb2wgYikgeyBtX2luUmVzaXplTW9k
ZSA9IGI7IH0KKworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwo
KTsKKworICAgIHZvaWQgYWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJl
Y3QmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgdm9p
ZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9
CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENv
cm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
CisKKyAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xs
ZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9s
bGluZy4KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CisgICAgT3B0aW9uYWw8U2Nyb2xs
aW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGU7IH0KKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dy
b3VuZCgpIGNvbnN0OworCisgICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAg
IHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxi
YXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJz
OyB9CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKTsgfQorCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uo
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOworCisgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
RmxhZyB7CisgICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMCwKKyAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAg
ID0gMSA8PCAxLAorICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAg
ICAgPSAxIDw8IDIsCisgICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMywKKyAgICB9OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xs
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCBwYWludE92ZXJm
bG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOworCisgICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICBib29s
IGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKwor
ICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICB2b2lkIGNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBp
bnRlcmZhY2UKKyAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25z
dCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChj
b25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVj
dCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsK
KyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9k
ZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVy
bmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRS
ZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBj
b25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsK
KyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhl
ZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVy
Zm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRp
ZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZv
aWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5h
bDsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgIHZvaWQgdW5yZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIC8vIE5PVEU6IFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNl
dCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9z
aXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsg
IAorCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7
CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOwor
CisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAg
IHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29y
bmVyKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVz
aXplcigpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0
IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xs
YmFyOworICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0
IHNjcm9sbENvcm5lcjsKKyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0
IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVy
OworICAgICAgICB9CisgICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2Vj
dFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworI2lmIDAKK3ByaXZhdGU6
CisgICAgYm9vbCB1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxSZW5kZXJMYXllcjo6VXBk
YXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogPSBudWxscHRyKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRh
dGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKKworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3ND
b250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJl
Y3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNv
bnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lk
IHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBo
aWNzQ29udGV4dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAor
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9v
bCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOworCisgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsK
KyAgICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNl
dCA9IExheW91dFNpemUoKSk7CisKKyAgICBib29sIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0
aW9uKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wmIGRpZFF1YW50aXplRm9udHMpOworI2VuZGlmCisK
KyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWUoKTsKKyAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVl
ZUlmTmVlZGVkKCk7CisgICAgdm9pZCBzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9s
bGluZ1Njb3BlcyhMYXlvdXRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgdm9pZCB1cGRhdGVTY3Jv
bGxiYXJTdHlsZSgpOworCitwcml2YXRlOgorICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIg
dGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNp
emluZyB0byBzdGFydCBhbmQgc3RvcC4KKyAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKKyAg
ICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxv
d1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6
IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDog
MTsKKyNlbmRpZgorCisgICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7
CisgICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKKworICAgIFNjcm9sbFBv
c2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBv
dXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKKworICAgIC8vIEZv
ciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFy
OworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAg
TWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5n
U2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Nj
b3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50
c1Njcm9sbGluZ1Njb3BlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1f
bWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgorCisgICAgLy8gUmVuZGVyZXJzIHRvIGhv
bGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVy
U2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOworCisgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kczsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OlJlbmRlckxheWVyJiBsYXllcikgeyByZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkg
PT0gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwCmluZGV4IDdlOWYzODMyZDM2ZWZkMTkxM2NmNzM5NzAxMWViYjNkMjE5NDhlMjQu
LmU0NTZjNmM4YTU1ODMyMDRmNjNhZWZiNjhlOGJjMDMwYjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNs
dWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg3OSwxMCAr
ODc5LDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5U
aHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb24KIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
aXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiB7CiAgICAgYXV0byogbGF5
ZXIgPSBlbmNsb3NpbmdMYXllcigpOwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8
fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBs
YXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAog
Ym9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5
Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3Np
bmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAg
YXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIgfHwgIWxheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBs
YXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5k
aW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5NmU2YmZiZTQwYTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFi
YTVhNjAyMWU4ZDIxM2FiZDQyNGU3ZWVmNTIzODRiZjQwMTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1
ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQorUmVuZGVyTWFycXVlZTo6UmVu
ZGVyTWFycXVlZShSZW5kZXJMYXllclNjcm9sbGFibGUqIGxheWVyKQogICAgIDogbV9sYXllcihs
YXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKaW5kZXggMWM3ODg0OTVl
MGU4ODU3NWU4MGJmOTMwOGEyZjQ5NGZiNGE2MjhkNS4uMDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2
Njg1NDUyYzQ3Yjk4MjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5oCkBAIC00OSwxMyArNDksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBS
ZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIAogLy8gVGhpcyBjbGFz
cyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGluZyBmb3IgPG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJN
YXJxdWVlIGZpbmFsIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJNYXJxdWVlKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFy
cXVlZShSZW5kZXJMYXllciopOworICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKik7CiAgICAgflJlbmRlck1hcnF1ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jp
em9udGFsKCkgY29uc3Q7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHRp
bWVyRmlyZWQoKTsKIAotICAgIFJlbmRlckxheWVyKiBtX2xheWVyOworICAgIFJlbmRlckxheWVy
U2Nyb2xsYWJsZSogbV9sYXllcjsKICAgICBUaW1lciBtX3RpbWVyOwogICAgIGludCBtX2N1cnJl
bnRMb29wIHsgMCB9OwogICAgIGludCBtX3RvdGFsTG9vcHMgeyAwIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggNzExM2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5
NjA3ZjA3NzliMTJmOC4uOTU3NTQxYTZiZTgxZjFjMGM2Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMTAwLDYgKzEwMCw3
IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPFJlbmRlck9iamVjCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2Nr
RmxvdzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3Mg
UmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1
YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQg
YXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAv
LyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAK
aW5kZXggNjI2MGE4MTU3OWY1ODRmNThjYzQwZjdjZTA5MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUy
YTIyMmJiZDM4NWM4YjZkM2M4OTZkNjJkMjRjMDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCkBAIC00MDAsMTcgKzQwMCwyMiBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bAog
ICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVt
ZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlm
IChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpz
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0
YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
RWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVy
VGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5
ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigp
KSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNh
bChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zs
b3c6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3Rv
cEVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKaW5kZXggZTA1NjBkN2E1MmE5NTI2NGQ2YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4u
MWY2ZDMxZjBkNDhhYzA2N2UxNWIzOWQwY2I1NDRlNjlkZDQzN2ExOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDcsOCArNDcsOCBAQAog
I2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5
LDIwICs1OTksMjEgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHRzIDw8
ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGxheWVyLnJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9m
ZnNldCgpLngoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9s
bE9mZnNldCgpLngoKTsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKLSAg
ICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKTsK
LSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVy
Qm94KCktPmNsaWVudFdpZHRoKCkpICE9IGxheWVyLnNjcm9sbFdpZHRoKCkpCi0gICAgICAgICAg
ICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgbGF5ZXIuc2Nyb2xsV2lkdGgoKTsKLSAgICAgICAg
aWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNs
aWVudEhlaWdodCgpKSAhPSBsYXllci5zY3JvbGxIZWlnaHQoKSkKLSAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVyLnJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOwor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCkpCisgICAgICAg
ICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgp
LnkoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIu
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lk
dGgoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbFdpZHRoKCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIg
PDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5
ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1l
LmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KSB7CiAgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nh
c3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYg
KG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigp
KSkKKyAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqc2Nyb2xs
YWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKICAgICAgICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CiAgICAgICAgIH0KICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCAxNzI0OGNkYTM0YWE2
YjZhNzE5NmY3ZjAwNmYyMDg1ZmE5YWI0MjZjLi4zNDcwNmQ2NmVlMDAzMzUzMDFlYTA2ZDEwMjU0
MjE1NzczNjY4ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KQEAgLTMyOSw4ICszMjksOCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KCkp
LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgfQogCi0gICAgaWYgKGhhc0xheWVy
KCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50UmVzaXpl
cihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBpZiAoaGFzTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5
ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+Y2FuUmVzaXplKCkpCisgICAgICAgIHNjcm9sbGFi
bGVMYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBv
aW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CiB9CiAKIHZvaWQgUmVu
ZGVyV2lkZ2V0OjpzZXRPdmVybGFwVGVzdFJlc3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBjMDUzYTRkZGEyMDA4ZWZkN2E2Njg4ZDM0
NDhmZmJmM2JmY2JlMWY1Li44MmI5YmU0YTcwYWU5N2Q4NWY2YzkxZDI0MTNjZTZiYmY3ODBlNzkx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTUsNiArMTU1LDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0x
OTA2LDcgKzE5MDcsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2lt
dWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJv
eC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxl
QXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5zY3JvbGxh
YmxlTGF5ZXIoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI5
MDEsNyArMjkwMiw3IEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpz
Y3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKICAgICAgICAgaWYgKGlzPFJl
bmRlckxpc3RCb3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZk
b3duY2FzdDxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSByZW5kZXJCb3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGJmNjhhNzE0NWRhODk4ZWQ0ZTdjZTc0ZTYx
NTdmMDBiZDcwZjdhNjMuLmE0ZTc2M2I0NTg5MmI5OTBiMzNjNjYzOGQ5ZDAyZjY5MjBiOGY3MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51
V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9s
bGFibGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+
CkBAIC0yMDM1LDEwICsyMDM1LDEyIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1Bh
cmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNj
YWxlRmFjdG9yKCk7CiAgICAgICAgIEludFNpemUgbG9naWNhbFNjcm9sbERlbHRhKC1kZWx0YVgg
KiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNjYWxlRmFjdG9yKTsKIAotICAgICAgICBSZW5kZXJM
YXllciogc2Nyb2xsYWJsZUxheWVyID0gbnVsbHB0cjsKKyAgICAgICAgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOwogICAgICAgICBpZiAobV9nZXN0dXJl
VGFyZ2V0Tm9kZSAmJiBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9IGxheWVy
LT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9z
c0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGJiMGJiOTM0MTU5MTMzYzJkZjdh
OTlmZTdmN2M5ZDc5NTA1MWFmNC4uYzQ1ZmFmZTVjYjU4NzVkN2NmZjYyNWUzMDM2MjkwMTFhYjhi
NTc0MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIwLTA4LTE0ICBOaWtvbGFzIFppbW1lcm1h
bm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGlu
ZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisgICAgICAgIFJlbW92ZSB0d28gd3JvbmcgZXhwZWN0
YXRpb25zLCB0aGF0IHdpbGwgbGVhZCB0byBsYXlvdXQgdGVzdCBmYWlsdXJlcworICAgICAgICAo
dW5yZWxhdGVkIHRvIHRoaXMgcGF0Y2gpLgorCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvc2Ny
b2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBl
Y3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vd2luL2FuaW1hdGlvbnMvc3Rl
cHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKwog
MjAyMC0wOC0xMyAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbV2ViWFJdIEltcGxlbWVudCBXZWJYUlNlc3Npb246OnVwZGF0ZVJlbmRlclN0YXRl
KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRv
ci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggOTM2YmVkMjVj
MjcxN2Y1MjFkYzU2ZDUzMjYzMDlkYjg2OTRhMjYxNS4uOWEzNDY3NWQxZjQ2Mjc0NzAwYmQ0N2Yy
YmRmZWM1MjdjY2MxYjY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50
eHQKQEAgLTEsMTQgKzEsMTQgQEAKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91
c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91
c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNl
RW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVu
dGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9s
bGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKIENPTlNPTEUgTUVT
U0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKK0NP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlSXNEb3du
SW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFi
bGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCiBDT05TT0xFIE1F
U1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGhpcyBp
cyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMtdHJh
bnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhw
ZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyYTM4Y2EyNzNjNmQ3
MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVw
cy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwK
QEAgLTEsNiArMCwwIEBACi1QQVNTIGNvdW50IGlzIDAKLVBBU1MgY291bnQgPCA2IGlzIHRydWUK
LVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zv
cm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVk
LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODViMmEzOGNhMjczYzZkNzAwNjg3
ODZlMzM5ZGY3NDFlNjRjYTRlOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vYW5pbWF0aW9ucy9zdGVwcy10cmFu
c2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEs
NiArMCwwIEBACi1QQVNTIGNvdW50IGlzIDAKLVBBU1MgY291bnQgPCA2IGlzIHRydWUKLVBBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406614</attachid>
            <date>2020-08-14 12:23:44 -0700</date>
            <delta_ts>2020-08-14 15:03:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200814212341.patch</filename>
            <type>text/plain</type>
            <size>337389</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc2YzM3MjJlYWI4YTlh
MTNmM2NkYzVhMTRlYTc1MjdlYmQ5NDQ5Yy4uMDQxOGY5OWZhMGJmNGY0NmViYTJkNjQwMTZhYmM5
Njg5OTRlZTI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NSBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OmFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTY3Jv
bGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNj
cm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvWFBvc2l0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNl
dFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNjcm9sbENvcm5l
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXpl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNh
blJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFkZEJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseUNsZWFy
QmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNj
cm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZl
bHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dD
b250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVj
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNl
dFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVT
Y3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3JuZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3UGxhdGZvcm1SZXNpemVy
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1ZWUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0
U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQuCisgICAgICAgIChpc1R5
cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dp
Y2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0xNCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2Ugc3VyZSBPZmZsaW5lQXVkaW9Db250
ZXh0OjpzdGFydE9mZmxpbmVSZW5kZXJpbmcoKSBkb2VzIGxhenkgaW5pdGlhbGl6YXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3YjgwZDFjZjc0ZjJlM2U4YWJl
OWZjOThjNTUwNjIzLi4wYzBhOGQwNWYyYWE1ZWQ2NmJmYzU5OTFjMDE0MzdhMWMxZjQzNWZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDgtMTQg
IE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAg
U2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGlu
dG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgKiBXZWJW
aWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOiBVc2UgUmVuZGVyTGF5ZXI6OnNj
cm9sbGFibGVMYXllcigpLgorCiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE2Y2E1NDEwYzQxYWZmZWIxYmI1
ZWQxMDZhNmFkMTkzYjNiYWYzNzguLmMyZjczYmIyYzlkZDdlMmM3MTk5YzQ1NTA0MTA1NDNlOGZi
NTMxOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTM5MSw2ICsxMzkxLDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJNZWRpYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDlkZWYxNmZlM2I0NTE2NTRhOTE4NjU1MmI4NDI3MDMyMzAwYTZmNTYuLmM1MjRk
MjgxZjE4OWE3YjNkNjZiNWJjOTZlYTA5OTBkNWFiZTljOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0y
MTI3LDYgKzIxMjcsNyBAQCByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
IHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGF5b3V0U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3Qu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggOGY0MDMzNjQ4YTcxODMyM2ZiNWUwZjE1YzdjYTYyMTA4MTI3M2YzYi4uYzM3ZjM4
OTExNzU4Y2ExYjYxOWM1NWE0MTBlNjJjODRjYmI0OTEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA4LDYgKzMwOCw3IEBA
CiAJCTBGNTgwQjBFMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEIwQjBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8q
IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNTgwRkEzMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2
OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFG
MTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAv
KiBBbmltYXRpb25VdGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNUI3QTUzMTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTIzLDYgKzU5
MjQsOCBAQAogCQkwRjU4MENGQTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZCMEYx
MkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNTgwQ0ZDMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkIwRjEzQUI5QjAw
NTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY1ODBDRkMwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNj
cm9sbGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMTE0OTY5
MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xh
eWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5
ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yODc2OSw2ICsyODc3Miw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQw
RDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4
QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVB
QzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTgwQ0ZD
MEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovLAorCQkJCTBG
NTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLywKIAkJ
CQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuY3BwICovLAog
CQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oICovLAog
CQkJCUJDMzNGQjFBMEYzMEVFODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi8s
CkBAIC0zMzEyMyw2ICszMzEyOCw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8q
IFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5
QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
M0MyNDRGRUFBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNj
cm9sbGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAv
KiBSZW5kZXJMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMxMTJG
QjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VB
NDg2NDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDBkODM4ZDU3NDgxZmI0N2JkOWZlMjlkOTdhNWRjMDlh
YjFkOGNhYjYuLjUyYjQzYTA4MjZmNmIyYWYwYjM5M2Q0MDEwMDcwZjdkMGIzMmM0NWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkxNiw3ICszOTE2LDgg
QEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFi
bGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5k
SGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gYm94LmxheWVyKCk7CisgICAgQVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAg
cmV0dXJuIGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0zOTI5
LDcgKzM5MzAsOCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IGlzIHBvaW50IGEgU2Nyb2xsT2Zmc2V0IG9yIFNjcm9sbFBvc2l0aW9uPyBUZXN0IGluIFJU
TCBvdmVyZmxvdy4KLSAgICBib3gubGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOworICAg
IEFTU0VSVChib3guc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIGJveC5zY3JvbGxhYmxlTGF5ZXIo
KS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOwogfQogCiAjaWYgRU5BQkxFKE1BVEhNTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCA4ODAyZWQwNGVhMzMzMGU5NTdkYmEwMWMxNzE2MjQ0NTFlYzQ0
NGNkLi44ODA0YTE2YmVjMTRjZDAyZjA3YWVmYTY5YmY5YjEyMDZkMjZkMzFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC04OSw5ICs4OSw5IEBACiAjaW5jbHVkZSAiUHNldWRvQ2xhc3NDaGFu
Z2VJbnZhbGlkYXRpb24uaCIKICNpbmNsdWRlICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJG
cmFnbWVudGVkRmxvdy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJv
eC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0
ZXIuaCIKQEAgLTEzMDgsOCArMTMwOCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsTGVmdChp
bnQgbmV3TGVmdCkKICAgICAgICAgaW50IGNsYW1wZWRMZWZ0ID0gY2xhbXBUb0ludGVnZXIobmV3
TGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpB
dXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAg
ICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KGNsYW1wZWRMZWZ0LCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRD
bGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9CiAKQEAgLTEzMzIsOCArMTMzMiw4IEBA
IHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFt
cGVkVG9wID0gY2xhbXBUb0ludGVnZXIobmV3VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0
aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhT
Y3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6Olll
cyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChj
bGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRl
cmVyLT5sYXllcigpKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3Vs
ZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggZDk3ZTY2
ZjhmOGFmMDVmYTAyNzc2YTAwODUwZjVmNTVhZTg2MWYzZi4uMDg2ZjY5MzFjMThiZTEwOTAyZjli
MTVkZGViN2MzYjlhOTc2MTg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKQEAgLTU2LDcgKzU2LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgpAQCAtMjQxMiw5ICsyNDEyLDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNl
bGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAg
ICAgICAgICAgIGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAg
ICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVy
KCk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwg
aW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFs
bG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBsYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50
LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21l
KCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2Rv
Y3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1h
cnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50
LmNwcAppbmRleCAwYWRmN2QxNjRlMmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNjMjcxMjc1Li4wNDhm
MDUwZjgxYTg2MWMxNDQ3MTA0OWNkNjI1NTNkYTAwZTk4MTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhU
TUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc1LDggQEAgUmVuZGVy
TWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QKIHsKICAg
ICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigp
LT5tYXJxdWVlKCk7CisgICAgQVNTRVJUKHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+c2Nyb2xsYWJs
ZUxheWVyKCktPm1hcnF1ZWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5ZmI2
ZDhjNTkxZDdmZmZkNDRlMWM0NDI2Nzg2YTMuLjcyMjI0Zjk1MTBhOTY5ZjdkNGFkYWE0MWM2OGI5
NTc4MWVjYjkwZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI0OSw3ICsy
NDksNyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlm
ICghaW5uZXJUZXh0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGlubmVy
TGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKTsKKyAgICBhdXRvKiBpbm5lckxheWVy
ID0gaW5uZXJUZXh0UmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpOwogICAgIGlmICghaW5uZXJM
YXllcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
aW5kZXggYTZhNjJhYzlmNmVlY2E0NTAxY2Q0N2E1ZjAwZTBlNTFmZjc2MTM5Mi4uYjUwMmVkYWFh
OWRhNDc4YzlkMDc3MThmNjgxMzZhNjY1MzA4OGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcApAQCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgotI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM0MywxMiArMzQzLDE0IEBA
IHN0YXRpYyBib29sIGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5v
ZGUqIHN0YXJ0Tm9kZSwgY29uc3QgV2hlCiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdCb3gp
IHsKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdC
b3gtPmxheWVyKCkpIHsKICAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1FdmVudCA9IHdoZWVsRXZl
bnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKLSAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5n
V2FzSGFuZGxlZDsKLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb3BpZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5k
VmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9ybURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1E
ZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRWZWxvY2l0eSk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xs
aW5nV2FzSGFuZGxlZCA9IGJveExheWVyLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGllZEV2ZW50KTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQg
PSBkaWRTY3JvbGxJblNjcm9sbGFibGVBcmVhKCpib3hMYXllciwgd2hlZWxFdmVudCk7CisgICAg
ICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBib3hMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdpdGhEZWx0YXNBbmRW
ZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURl
bHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nV2FzSGFuZGxlZCA9IGJveExheWVyU2Nyb2xsYWJsZS0+aGFuZGxlV2hlZWxFdmVudChj
b3BpZWRFdmVudCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBkaWRTY3JvbGxJblNjcm9sbGFibGVBcmVhKCpib3hMYXll
clNjcm9sbGFibGUsIHdoZWVsRXZlbnQpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAoc2Nyb2xsaW5nV2FzSGFuZGxlZCkgewogICAgICAgICAgICAgICAgIHN0b3BFbGVtZW50ID0g
Y3VycmVudEVuY2xvc2luZ0JveC0+ZWxlbWVudCgpOwpAQCAtMTU2OCw3ICsxNTcwLDcgQEAgT3B0
aW9uYWw8Q3Vyc29yPiBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGJvb2wgc2gKICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKICAg
ICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogV2l0aCByaWdodC1hbGlnbmVkIHRleHQgaW4gYSBib3gsIHRoZSByZW5kZXJl
ciBoZXJlIGlzIHVzdWFsbHkgYSBSZW5kZXJUZXh0LCB3aGljaCBwcmV2ZW50cyBzaG93aW5nIHRo
ZSByZXNpemUgY3Vyc29yOiB3ZWJraXQub3JnL2IvMjEwOTM1LgotICAgICAgICAgICAgaWYgKGF1
dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5s
YXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJM
YXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpKSB7CiAgICAgICAg
ICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wocm91bmRl
ZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5S
ZXNpemVyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDog
c291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CkBAIC0xODEyLDEyICsxODE0LDE0IEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBwbGF0Zm9ybU1vdXNlCiAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+
cmVuZGVyZXIoKSA/IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDog
bnVsbHB0cjsKICAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQobW91c2VFdmVu
dC5oaXRUZXN0UmVzdWx0KCkubG9jYWxQb2ludCgpKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXIt
PmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wobG9jYWxQb2ludCkpIHsKLSAgICAgICAgbGF5ZXItPnNl
dEluUmVzaXplTW9kZSh0cnVlKTsKLSAgICAgICAgbV9yZXNpemVMYXllciA9IGxheWVyOwotICAg
ICAgICBtX29mZnNldEZyb21SZXNpemVDb3JuZXIgPSBsYXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNv
cm5lcihsb2NhbFBvaW50KTsKLSAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllciA/IGxheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVM
YXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgeworICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5zZXRJblJlc2l6ZU1vZGUodHJ1ZSk7CisgICAgICAgICAgICBtX3Jl
c2l6ZUxheWVyID0gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tUmVz
aXplQ29ybmVyID0gc2Nyb2xsYWJsZUxheWVyLT5vZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2Fs
UG9pbnQpOworICAgICAgICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0
Q2FyZXRCbGlua2luZ1N1c3BlbmRlZCh0cnVlKTsKQEAgLTE5MTgsMTAgKzE5MjIsMTAgQEAgU2Ny
b2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSog
bm9kZSkKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIGxheWVyID0gcmVuZGVyZXItPmVuY2xv
c2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgIGlmICghbGF5ZXIgfHwg
IWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6Tm8pKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewogICAgICAg
ICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmgKaW5kZXggNjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRlZWI4MzQ4ZTc5ZWFi
YjJhMS4uODcxOWJhMDM2NTZiYTc4Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJkMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFBsYXRmb3JtVG91
Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJlbmRlckJveDsKIGNs
YXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwog
Y2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6CiAKICAgICBib29s
IG1fc3ZnUGFuIHsgZmFsc2UgfTsKIAotICAgIFJlbmRlckxheWVyKiBtX3Jlc2l6ZUxheWVyIHsg
bnVsbHB0ciB9OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9yZXNpemVMYXllciB7IG51
bGxwdHIgfTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2NhcHR1cmluZ01vdXNlRXZlbnRzRWxl
bWVudDsKICAgICBib29sIG1fZXZlbnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVyaW5nTW91c2VFdmVu
dHNFbGVtZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBmOWIx
YTVkNzE1Yjc1NDcyOTQyODU4OWFlNTgxZTY5YzViN2RlMTFjLi4yZWEwZjI4NWJkZGViZWU2OTZj
OTM3Nzg3NTIwMDVhZmZjNjZkM2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC03
Nyw5ICs3Nyw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgogI2luY2x1ZGUgIlJl
bmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5o
IgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1NjIsNyArMjU2Miw4IEBA
IHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCkKICAg
ICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9u
cygpOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+
c2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2Nyb2xsYWJsZUxh
eWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMzg0MCwxMCArMzg0MSwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRnJh
bWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgYXV0byogbGF5ZXIgPSBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXll
cigpOwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogSW50UmVjdCBGcmFtZVZpZXc6
OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CkBAIC00MzE4LDggKzQzMTks
MTAgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJl
ci0+cGFyZW50KCk7CiAKICAgICByb290TGF5ZXItPnBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCwg
TGF5b3V0U2l6ZSgpLCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyLCB7IH0sIHNlY3VyaXR5T3Jp
Z2luUGFpbnRQb2xpY3kgPT0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luID8g
UmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA6IFJlbmRl
ckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBY2Nlc3NpYmxlT3JpZ2luT25seSwg
ZXZlbnRSZWdpb25Db250ZXh0KTsKLSAgICBpZiAocm9vdExheWVyLT5jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQotICAgICAgICByb290TGF5
ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVo
YXZpb3IsIHJlbmRlcmVyKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcm9vdExh
eWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRl
eHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgfQogCiAgICAg
ZGlkUGFpbnRDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRleCA0ZDhiNzJmOGU1
YmNiMGU4MzJkM2VjM2RkYzJlZTkyOTJiNDlmZTg2Li5kYjFhNGViZGVkMmZhZGQxZmZmMGI1YmRi
MmE5ODAwNDFkZmFmOGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9u
LmNwcApAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk0LDExIEBAIGJvb2wgc2Nyb2xs
SW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjb250YWluZXIt
PnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNp
emUoZHgsIGR5KSk7CisgICAgICAgIGF1dG8qIGVuY2xvc2luZ0xheWVyID0gY29udGFpbmVyLT5y
ZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGVuY2xvc2luZ0xh
eWVyKTsKKworICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlID0gZW5j
bG9zaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgZW5jbG9zaW5nTGF5
ZXJTY3JvbGxhYmxlLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpp
bmRleCA5YmI4ZTkyY2FhYzVjZjUzMmI3OWI5MGVlYWIzY2YyMTU0MGFmZjQzLi5kMTYyNmVjM2My
N2IxZmI2M2VmYjUzYTgwZjAyZTZjODY4MDZlYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTYgQEAgdm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQ
b3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAg
ICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2Jq
ZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5k
ZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyKQorICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXll
ci5jdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlz
VXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMp
OwotICAgIGxheWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0g
ICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBv
bGRTY3JvbGxUeXBlID0gbGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgbGF5ZXItPnNl
dEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMpOworICAgIGxheWVyLT5zY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24ocG9zaXRpb24pOworICAgIGxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRT
Y3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxk
IHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAgbGF5ZXItPmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhN
RTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJhbWU6OnJlc2V0QWxs
R2VvbG9jYXRpb25QZXJtaXNzaW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQppbmRleCBjMDkzMGI2MzQ5NWU3MTgxNTk5MWE0MDZhNGQ2NjVhMjdiYTc3MTRi
Li5mODQzZTllM2ZjN2Y1YzNjYWExODY0ZTVlZWZjNzg1NWVjZGExNDI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1w
b3J0ICJQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4u
aCIKICNpbXBvcnQgIlJhbmdlLmgiCi0jaW1wb3J0ICJSZW5kZXJMYXllci5oIgorI2ltcG9ydCAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0Qm94LmgiCiAjaW1w
b3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAgLTc4Miw3ICs3
ODIsNyBAQCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRl
ckJveCYgYm94KQogICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihib3gpKQogICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4oJmJveCk7CiAKLSAgICByZXR1cm4gYm94LmxheWVy
KCk7CisgICAgcmV0dXJuIGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KICAgICAKIHN0YXRpYyBD
b250YWluZXJOb2RlKiBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihDb250YWluZXJO
b2RlKiBub2RlLCBjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKaW5kZXggZTVhNDdiNzA3NGRjYzkz
MWRiMDAzNzc4M2EzZTI5YWZkN2ZkZGU0My4uYWVlNTBiMDlhOTMwZGMzOTU1MzA2ZmVjMTQ1MGNi
NzdhZGM3MDI2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdo
dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNw
cApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQb3Np
dGlvbi5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIwOSw3ICsyMDksOCBAQCB2b2lkIEhpZ2hsaWdodERh
dGE6OnNldFNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBSZXBhaW50TW9k
ZSBibG9jawogCiB2b2lkIEhpZ2hsaWdodERhdGE6OmNsZWFyU2VsZWN0aW9uKCkKIHsKLSAgICBt
X3JlbmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgIEFT
U0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIG1fcmVuZGVyVmlldy5z
Y3JvbGxhYmxlTGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwogICAgIHNldFNl
bGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7CiB9
CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlv
bihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZQogICAgICAgICBj
dXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAKLSAgICBpZiAoYmxvY2tSZXBhaW50TW9k
ZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVyKCkt
PmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgaWYgKGJsb2NrUmVwYWludE1v
ZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVuZGVyVmll
dy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5
ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB9CiAKICAgICAvLyBO
b3cgdGhhdCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcg
b2JqZWN0cywgd2FsayB0aGVtIGFnYWluIGFuZAogICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcg
b2JqZWN0cyBsaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5k
ZXggNmI1M2NiYTg1YzhlOWRjNTk3MTViNjM4Y2FlNTc1ZjgwZTQ4Zjk1NC4uYTY3Y2IyMmMyM2Qz
M2YzMzhjOGEwYTY2NGZlYjU5MmUwZjkwNmM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwCkBAIC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21l
bnRlZEZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJ
dGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTU1
Myw3ICs1NTMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2NrIDogYmxv
Y2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0NsaXAoKSk7
Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsK
KyAgICAgICAgaWYgKGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGJsb2Nr
LT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAgICAg
ICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAgICAgfQogfQpAQCAtNTg0LDggKzU4
NSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGxheWVyKCkpCi0g
ICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAgIGlmIChz
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQpAQCAt
MTEwOSwxMiArMTExMCwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIGlmIChwdXNoZWRD
bGlwKQogICAgICAgICBwb3BDb250ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgYWRqdXN0ZWRQ
YWludE9mZnNldCk7CiAKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1
cm47CisKICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdl
IHRlbGwgdGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgIC8vIHot
aW5kZXguIFdlIHBhaW50IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBz
byB0aGF0IHRoZSBzY3JvbGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91
bmQvYm9yZGVyLgogICAgIGlmICgocGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5k
IHx8IHBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVy
Zmxvd0NsaXAoKSAmJiBsYXllcigpCiAgICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgq
dGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBs
YXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRl
ZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8u
cmVjdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xz
KHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0
KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQpAQCAtMTQ2OSwxNiArMTQ3MywxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpw
YWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50TwogCiAgICAgICAgIExheW91dFJlY3QgZ2FwUmVjdHNCb3VuZHMgPSBzZWxlY3Rpb25HYXBz
KCp0aGlzLCBwYWludE9mZnNldCwgTGF5b3V0U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCBjYWNoZSwgJnBhaW50SW5mbyk7CiAgICAgICAgIGlmICghZ2FwUmVjdHNCb3VuZHMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gZW5jbG9z
aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyU2Nyb2xsYWJsZSA9IGVu
Y2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51
bGxwdHIpIHsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkoLXBhaW50T2Zm
c2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAg
ICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGxv
Y2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+cmVuZGVyQm94
KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5k
cyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZsYXllclNj
cm9sbGFibGUtPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChsYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaXNCb3goKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllclNjcm9sbGFibGUt
PnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0c0Jv
dW5kcyk7CisgICAgICAgICAgICAgICAgbGF5ZXJTY3JvbGxhYmxlLT5hZGRCbG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMjAwMSw3ICsyMDA1LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvCiAgICAg
aWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBv
aW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KSk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhy
ZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXpl
KGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhp
dFRlc3QoKSBjb25zdApAQCAtMjQ5OCw5ICsyNTA1LDExIEBAIGludCBSZW5kZXJCbG9jazo6YmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwg
TGluCiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBUaGlzIG1h
dGNoZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCiAgICAg
ICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBh
IHZlcnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAgIC8vIHZl
cnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Ny
b2xsVG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYm
IChsYXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChs
YXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLnko
KSAhPSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8
IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJv
b3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwotICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNNYXJxdWVl
ID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpIDogbnVs
bHB0cjsKKyAgICAgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXll
cigpID8gKHNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHNjcm9sbGFi
bGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkpIDogZmFsc2U7CisgICAgICAgIGJvb2wgaGFz
SG9yaXpvbnRhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllcigpID8gKHNjcm9sbGFibGVMYXll
cigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9m
ZnNldCgpLngoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChoYXNN
YXJxdWVlIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyBoYXNWZXJ0aWNhbFNjcm9s
bGJhciA6IGhhc0hvcml6b250YWxTY3JvbGxiYXIpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAm
JiAhaXNSdWJ5UnVuKCkpOworCiAgICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBp
Z25vcmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGly
ZWN0aW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IGUyMTNhYWM3MWE5NDQ1ODczZTIxNjA0MTY0ZTQxNDQ1OGIwNmNhOTAuLmM1MWM1MGNlNTdiZGFl
MDAzNTRhZGQyOTQyZDFjY2U3NDhkYzM4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVy
RmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAt
MzQ5LDcgKzM0OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9n
aWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxl
KCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpv
bnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgot
ICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFy
cXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcigpICYm
IHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1
ZWUoKS0+aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSAwOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA2MTIzNzZi
YWFkNjFiZDYyZmEzY2VkYThkZGEyYWEyNjQzYjc5OWRiLi5kMTI4ZDE0YTY4ZjI0NzBmOWE4Njk2
MWJmZDk1MjVlNzI5ZjE4YmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cApAQCAtNTgsOCArNTgsOCBAQAogI2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZUNlbGwuaCIKQEAgLTMxOSwxMSArMzE5LDExIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
CiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmlu
ZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50byB0aGUK
ICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092ZXJmbG93
Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9zaXRpb24g
c2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgeworICAgICAg
ICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllcigpLT5zY3Jv
bGxQb3NpdGlvbigpOwogICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5l
ZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAgICBzY3Jv
bGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsK
ICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91
dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU0Miw4ICs1NDIsOCBAQCBMYXlvdXRVbml0IFJlbmRl
ckJveDo6Y2xpZW50SGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgo
KSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKQotICAgICAg
ICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIo
KS0+c2Nyb2xsV2lkdGgoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZs
b3csIHRoaXMgbWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdp
dGggd3JpdGluZyBtb2Rlcy4KICAgICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpIHsKQEAgLTU1NSw4ICs1NTUsOCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNv
bnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhh
c092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3Jv
bGxIZWlnaHQoKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CiAg
ICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUu
CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTU2NSwxMiArNTY1LDEyIEBAIGludCBSZW5kZXJC
b3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBj
b25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIo
KS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlv
bigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQ
b3NpdGlvbigpLnkoKSA6IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9s
bGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDog
MDsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElm
TmVlZGVkKCkKQEAgLTU3OSw3ICs1NzksNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2Fs
SGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDBf
bHUpOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVy
JiBsYXllcikKK3N0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBAIC01ODks
MjYgKzU4OSwyNiBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxh
eWVyJiBsYXllcikKIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQs
IFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVk
U2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVy
KCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAg
ICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGlu
ZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNl
dFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1w
aW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAoIWhhc092
ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9w
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1v
bml0b3IoKnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xs
VG9ZUG9zaXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQog
CiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
IHx8ICFsYXllcigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVM
YXllcigpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5
ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Ny
b2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRTY3JvbGxQb3NpdGlv
bihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MDgsMzAgQEAg
Ym9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3Qg
RnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNh
bFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAm
JiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYm
IChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8
fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
IHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJvb2wgUmVu
ZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJl
dHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5
U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxi
YXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxv
d1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkF1dG87CiB9CiAKIGludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBj
b25zdAogewotICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlVmVy
dGljYWxTY3JvbGxiYXJTaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5
ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVI
b3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFy
TG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzNCwxMiArODQwLDEyIEBAIGludCBSZW5kZXJCb3g6
OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAw
OwogCiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkp
IHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxi
YXIoKSk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5
ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVz
ZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVy
KCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxl
TGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
ICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAg
LTg0OCwxNSArODU0LDE0IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2lj
YWxXaWR0aCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94OjpzY3JvbGxMYXllcihTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBib3hM
YXllciA9IGxheWVyKCk7Ci0gICAgaWYgKGJveExheWVyICYmIGJveExheWVyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKLSAgICAgICAgaWYgKHN0b3BFbGVt
ZW50KQotICAgICAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOwotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBib3hMYXll
ciA9IHNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RvcEVsZW1l
bnQpCisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoq
IHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxF
dmVudEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzg4MywxNCBAQCBib29sIFJlbmRlckJveDo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZh
bHNlOwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCkgewor
ICAgIGF1dG8qIGxheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVyKSB7CiAj
aWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIE9uIE1hYyBvbmx5IHdlIHJlc2V0IHRoZSBp
bmxpbmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVudCBzY3JvbGwgKGUu
Zy4sIGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xs
QnlEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xsKGxvZ2ljYWxUb1Bo
eXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURv
Y3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIHNjcm9sbGVkID0gbGF5ZXItPnNjcm9s
bChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAgICAgICAg
ICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xsZWQpIHsK
QEAgLTg5OSw5ICs5MDMsOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlmIChzdG9w
RWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5pbmdCbG9j
aygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGIt
PmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVs
ZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOworICAg
IGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gYmxv
Y2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3Rv
cEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzkzNiw3IEBAIGJv
b2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9v
bCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQpAQCAtOTkxLDggKzk5NSw4IEBAIFJlbmRlckJveCogUmVuZGVyQm94OjpmaW5kQXV0b3Nj
cm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogdm9pZCBSZW5kZXJCb3g6OnBhblNj
cm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQogewotICAgIGlmIChsYXllcigpKQotICAgICAg
ICBsYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKKyAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQo
c291cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkg
Y29uc3QKQEAgLTEwMTcsMTEgKzEwMjEsOSBAQCBib29sIFJlbmRlckJveDo6bmVlZHNQcmVmZXJy
ZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3QKIAogU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94
OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuIHsgMCwgMCB9OwotCi0gICAgQVNTRVJUKGhhc0xheWVyKCkpOwotICAgIHJldHVy
biBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIo
KS0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNp
emVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNTcxLDcgQEAgYm9vbCBSZW5k
ZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50
T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
IChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkK
KyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0
dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFj
a2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTAgKzE4OTAsMTAgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNp
emUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9w
KCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMg
aWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7CiAgICAgICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlw
UmVjdC5tb3ZlKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7
Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFu
Y3kpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOworICAgICAgICBjbGlwUmVjdC5jb250cmFj
dChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgc2Ny
b2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOwogICAg
IH0KIAogICAgIHJldHVybiBjbGlwUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDVkZGZjMzExODQ3YmFmZDkzZjMzOTQ4
YzExMjViZWVlOGMyODM5ODcuLmMwZGE3ZWExMTM0Zjk2NjAzNThjOTkyMTNkZDMzYTg2ZmU1YTU2
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcApAQCAtNDgsOSArNDgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cu
aCIKQEAgLTQ5MCw4ICs0OTAsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
U3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBG
bG9hdFBvaW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0g
Y29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAg
ICAgICAgICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5n
Q2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9w
KCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9j
aykKLSAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBlbmNsb3NpbmdD
bGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGNvbnRhaW5lckxv
Y2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgY29udGFpbmVy
UmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRz
LnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3Rvcik7CkBAIC01MDgsOCArNTA4LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAg
ICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllcikgewogICAgICAgICBzdGlja3lMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciAtPSBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdC
b3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAg
ICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xp
cHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0Jv
eCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxv
Y2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAg
ICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAg
fQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90IHRyYW5z
Zm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5zZXRMb2Nh
dGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01NDgs
MTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmlu
Z1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRSZWN0IGNvbnN0
cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFpbmVyUXVhZChG
bG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0gICAgICAgIEZs
b2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdM
YXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0Owor
ICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zm
c2V0ID0gMDsKLSAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKQotICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdC
b3gubGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVu
Y2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFibGVMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5n
Qm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAg
ICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFibGVMYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsK
IAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xs
T2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwgc2Nyb2xsT2Zmc2V0LnkoKSkpOwogICAgICAg
ICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKQEAgLTg0NCw4ICs4NDYsMTAgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbywgY28KICAgICAgICAgCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVj
dCB0byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBl
bmRzLgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9z
aXRpb24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgbGF5
ZXIoKS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0
LnNldEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsgYm9yZGVy
Qm90dG9tKCkpOworICAgICAgICBhdXRvIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxheWVyKCkg
PyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSA6IDA7CisgICAgICAgIHNjcm9sbGVk
UGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgc2Nyb2xsV2lkdGggKyBiUmlnaHQpOworICAgICAg
ICBhdXRvIHNjcm9sbEhlaWdodCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVy
KCktPnNjcm9sbEhlaWdodCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVp
Z2h0KGJvcmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwogICAgIH0K
ICAgICAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlwU3RhdGVT
YXZlcihjb250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCA5OWU4MjRkMTM1NzA2MzllM2U0ZDQ0M2M5NjVmMTQ0ZTlkNDhmNDQ2Li5kYTc0
NzkzN2FjYzMwNmVkMGI0YTQyMTI1YjQ2NmU0NDQ1NDcyMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NywxNiArMjg3LDExIEBAIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMmIGNsaXBS
ZWN0cykKIAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2Nv
cGUoKQotewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwotICAg
IHJldHVybiArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lz
UmVuZGVyVmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkK
K1JlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQorICAg
IDogbV9sYXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXllcihyZW5k
ZXJlckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNlZFN0YWNr
aW5nQ29udGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAgICwgbV9p
c05vcm1hbEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4dChmYWxz
ZSkKQEAgLTMwNCwxOSArMjk5LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX3pPcmRl
ckxpc3RzRGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAg
ICAsIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6ZU1vZGUo
ZmFsc2UpCi0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGlu
Z0xheWVyRGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZh
bHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2lu
T3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1h
bFJlcGFpbnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAs
IG1faGFzVmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3Rh
dHVzRGlydHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAg
ICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRl
cnNlY3RpbmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAg
ICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMzMCwx
NSArMzIxLDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9i
amVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3Zp
ZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNv
bikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNl
KQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihm
YWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAg
ICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAog
ICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzUzLDUz
ICszMzUsMjIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNo
b3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRleHQoc2hv
dWxkQmVDU1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIg
PSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJWaWV3TGF5
ZXIoKSkKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRpbmdMYXll
ciBpcyBpbml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3VnaAorICAg
IC8vIGl0IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAgICAvLyAi
bV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOyIKKyAg
ICAvLyBoZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxheWVyU1ZH
L0hUTUwgY2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFyZW5kZXJl
cigpLmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkg
PSBmYWxzZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdl
IHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3Jv
bGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBl
bGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFtX3Njcm9s
bFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJy
ZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVk
TGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVy
Ojp+UmVuZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAgICAgcmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7Ci0K
LSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKCk7Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxl
bWVudCgpKQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxi
YXIpOwotICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYg
KGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95
U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAg
cmVtb3ZlUmVmbGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVh
clJlc2l6ZXIoKTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAocGFpbnRz
SW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC00MTgsNiArMzY5LDIwIEBAIFJlbmRlckxheWVy
Ojp+UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04ocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhZmlyc3RDaGls
ZCgpKTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUxheWVyKCkKK3sKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK2NvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVy
TGF5ZXI6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0Cit7CisgICAgaWYgKGlzPFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNj
cm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB2b2lkIFJlbmRlckxh
eWVyOjphZGRDaGlsZChSZW5kZXJMYXllciYgY2hpbGQsIFJlbmRlckxheWVyKiBiZWZvcmVDaGls
ZCkKIHsKICAgICBSZW5kZXJMYXllciogcHJldlNpYmxpbmcgPSBiZWZvcmVDaGlsZCA/IGJlZm9y
ZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGlsZCgpOwpAQCAtOTM1LDcgKzkwMCwx
MCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJv
b2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBk
YXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9u
KCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwor
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5hcHBseVBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CiAKICAgICBpZiAoZ2VvbWV0cnlNYXAp
CiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVu
dCgpKTsKQEAgLTk0Myw3ICs5MTEsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIC8v
IENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9uLgogICAgIGNsZWFyQ2xpcFJl
Y3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJmbG93Q29udHJvbHMoKSkgewog
ICAgICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAoZ2VvbWV0cnlN
YXApCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9GbG9hdFNpemUo
Z2VvbWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAtOTUyLDcgKzky
MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21l
dHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBhcyBjYW5Vc2VP
ZmZzZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgogICAg
ICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdCgpKTsKICAg
ICAgICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUo
b2Zmc2V0RnJvbVJvb3QpKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wb3NpdGlvbk92ZXJm
bG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKICAgICB9CiAKICAg
ICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEwMjksMTMgKzk5Nyw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFw
KiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0
aW9ucyhnZW9tZXRyeU1hcCwgZmxhZ3MpOwogCiAgICAgLy8gV2l0aCBhbGwgb3VyIGNoaWxkcmVu
IHBvc2l0aW9uZWQsIG5vdyB1cGRhdGUgb3VyIG1hcnF1ZWUgaWYgd2UgbmVlZCB0by4KLSAgICBp
ZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRG
b3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCi0gICAgICAgIGJv
b2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpKQorICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnVwZGF0ZU1hcnF1ZWUoKTsKIAogICAgIGlmIChyZW5kZXJlcigpLmlz
Rml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGJvb2wgaW50ZXJz
ZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJbnRlcnNlY3RzVmlld3BvcnQo
KnRoaXMpOwpAQCAtMTExNSw5MiArMTA3OCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVw
YWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNj
cm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSk7
Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlN
YXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgm
Z2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5
TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxh
eWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50
KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sg
dGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCi0gICAgLy8gaW5pdGlhbGl6
ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2Vz
dG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAq
IGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZs
YWc+IGZsYWdzKQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1
dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKLSAgICAvLyB0aGVzZSBmbGFncyBh
cmUgc3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4K
LSAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKLQotICAgIC8vIElmIHdlIGhh
dmUgbm8gdmlzaWJsZSBjb250ZW50IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBp
cyBubyBwb2ludCByZWNvbXB1dGluZwotICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2ls
bCBiZSBlbXB0eS4gSWYgb3VyIHZpc2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRv
Ci0gICAgLy8gcmVjb21wdXRlIGFsbCBvdXIgcG9zaXRpb25zIGFueXdheS4KLSAgICBpZiAoIW1f
aGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgIW1faGFzVmlzaWJsZUNvbnRlbnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigp
OwotICAgIGlmIChwb3NpdGlvbkNoYW5nZWQpCi0gICAgICAgIGZsYWdzLmFkZChIYXNDaGFuZ2Vk
QW5jZXN0b3IpOwotCi0gICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgSGFzQ2hhbmdlZEFuY2Vz
dG9yLCBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yLCBJc092ZXJmbG93U2Nyb2xs
IH0pKQotICAgICAgICBjbGVhckNsaXBSZWN0cygpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkuc3R5
bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkKLSAgICAgICAgZmxhZ3MuYWRk
KEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpOwotCi0gICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIGZsYWdzLmFkZChIYXNTZWVuQW5jZXN0b3JX
aXRoT3ZlcmZsb3dDbGlwKTsKLSAgICAKLSAgICBib29sIHNob3VsZENvbXB1dGVSZXBhaW50UmVj
dHMgPSAoZmxhZ3MuY29udGFpbnMoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcikg
fHwgZmxhZ3MuY29udGFpbnNBbGwoeyBJc092ZXJmbG93U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JX
aXRoT3ZlcmZsb3dDbGlwIH0pKSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCk7Ci0gICAgYm9vbCBp
c1Zpc3VhbGx5RW1wdHkgPSAhaXNWaXN1YWxseU5vbkVtcHR5KCk7Ci0gICAgYm9vbCBzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MgPSBnZW9tZXRyeU1hcCAmJiAoKHNob3VsZENvbXB1dGVSZXBhaW50
UmVjdHMgJiYgIWlzVmlzdWFsbHlFbXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsKLSAgICBpZiAoc2hv
dWxkUHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdz
VG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7Ci0KLSAgICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFp
bnRSZWN0cykgewotICAgICAgICAvLyBXaGVuIHNjcm9sbGluZywgd2UgZG9uJ3QgY29tcHV0ZSBy
ZXBhaW50IHJlY3RzIGZvciB2aXN1YWxseSBub24tZW1wdHkgbGF5ZXJzLgotICAgICAgICBpZiAo
aXNWaXN1YWxseUVtcHR5KQotICAgICAgICAgICAgY2xlYXJSZXBhaW50UmVjdHMoKTsKLSAgICAg
ICAgZWxzZSAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFz
IHdlIHdhbGsgZG93biB0aGUgdHJlZS4KLSAgICAgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMo
cmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKLSAgICB9IGVs
c2UgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7
Ci0gICAgICAgIC8vIFdoZW4gU2Nyb2xsVmlldydzIG1fcGFpbnRzRW50aXJlQ29udGVudHMgZmxh
ZyBmbGlwcyBkdWUgdG8gbGF5ZXIgYmFja2luZyBjaGFuZ2VzLCB0aGUgcmVwYWludCBhcmVhIHRy
YW5zaXRpb25zIGZyb20KLSAgICAgICAgLy8gdmlzdWFsIHRvIGxheW91dCBvdmVyZmxvdy4gV2hl
biB0aGlzIGhhcHBlbnMgdGhlIGNhY2hlZCByZXBhaW50IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFu
ZCB0aGV5IG5lZWQgdG8gYmUgcmVjb21wdXRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xODgxMjEpLgot
ICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNvcnJlY3QuCi0gICAg
ICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJl
cigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQo
KSkpOwotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
fHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX291dGxpbmVCb3ggPT0gcmVuZGVy
ZXIoKS5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFp
bnQoKSkpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNo
aWxkLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7
Ci0KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlz
IGEgdHJhbnNsYXRpb24gd2hpY2ggZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKLSAgICAvLyBv
ZiBhbiBvYmplY3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxm
IHByb3Blcmx5IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKLSAgICAvLyB1cGRhdGVkIGFib3Zl
LgotCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVl
ZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1h
cHBpbmdzKQotICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVu
dCgpKTsKLQotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxpZGF0ZVJl
Y3RzRm9yQWxsTWFya2VycygpOwotfQotCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKIAog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQmxlbmRNb2RlKCkKQEAgLTE2OTEsMzQgKzE1NjgsMTAg
QEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRl
TGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93
bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNj
cm9sbCBvZmZzZXQuCi0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7Ci0gICAgaWYg
KHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQg
PSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlv
bigpKSkpIHsKLSAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBv
dXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAg
ICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0g
ICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5z
Y3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50
LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9z
aXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgb2Zm
c2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
KS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpKTsKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwotICAgICAgICB9
Ci0KLSAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXll
ciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBh
cmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKLQotICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXIt
PmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUg
PSBwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwotICAgIH0KIAotICAgIGlm
IChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID09IG1fYm94
U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBu
ZXh0U2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xsaW5nU2NvcGUp
Ci0gICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xsaW5nU2NvcGU7
CisgICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2Nv
cGVzKGxvY2FsUG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0Q2hhbmdlZCA9IGZh
bHNlOwogICAgIGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xODQw
LDg2ICsxNjkzLDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJ
bkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJl
cigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVy
RWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVy
KCk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0Zy
YW1lQm91bmRhcmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMp
IGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJ
bkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gZW5jbG9z
aW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAgICAgIHJldHVybiBhbmNlc3Rv
cjsKIAogICAgIGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBDcm9zc0ZyYW1lQm91bmRhcmll
czo6Tm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9z
c0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKLXsKLSAgICBSZW5k
ZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dl
ZFNjb3BlOwotCi0gICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVu
ZGVyTGF5ZXImIGxheWVyKSB7Ci0gICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJl
bmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVT
Y3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRl
U2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3Jv
bGxhYmxlKCp0aGlzKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKTsKLSAgICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4
dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NG
cmFtZUJvdW5kYXJpZXMpKSB7Ci0gICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpu
ZXh0TGF5ZXIpKQotICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5k
ZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwg
aXNJbnNpZGVGaXhlZCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJv
Z3Jlc3MoKSBjb25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0g
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3It
PmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
cjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblBy
b2dyZXNzKCk7Ci0jZW5kaWYKKyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRv
Y3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVy
UmVuZGVyZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRl
cmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VV
cGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFy
c09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIHJldHVybiBvd25lclJl
bmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0b3IoKSBjb25zdApAQCAtMjQ0NywzMzEgKzIyNDIs
NiBAQCBMYXlvdXRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVu
ZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUoY29u
dmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9y
Q29sdW1ucykpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QKLXsKLSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9i
amVjdCgpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1ND
Uk9MTElOR19UT1VDSCkKLSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygp
ICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkp
OwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQotYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCi17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhY2Nl
bGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBv
ZiBXZWJLaXQuCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVU
b3VjaEV2ZW50KHRvdWNoRXZlbnQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCku
ZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRv
dWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewot
ICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW5kZXJlcigp
LmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgp
KTsKLSAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZh
bHNlOwotfQotI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotCi0vLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJM
YXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBpc0Nv
bXBvc2l0ZWQoKSAmJiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Ci19Ci0KLS8vIEZJ
WE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJl
bmRlckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBjb21w
b3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcigqdGhpcyk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQot
ewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgotICAgIC8vIGh0
dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdl
dHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKLQot
ICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0g
ICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGlj
X2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVz
dGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKLSAgICAg
ICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQo
c3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7Ci0KLSAgICByZXR1cm4g
YWRqdXN0ZWREZWx0YTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xs
RGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCi17Ci0gICAgcmV0dXJuIEludFNpemUoYWRqdXN0
ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5o
ZWlnaHQoKSkpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29u
c3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQotewotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91
c2VQb3NpdGlvbigpOwotICAgIAotICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qg
a25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNl
IGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAotICAgIHN0
YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0gICAgaWYgKGxhc3RLbm93bk1v
dXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCi0g
ICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0g
ICAgZWxzZQotICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uOwotCi0gICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBz
b3VyY2VQb2ludDsKLQotICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6
bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3Ig
dGhlIGljb24KLSAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7Ci0gICAgaWYgKGFicyhkZWx0YS5o
ZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCi0gICAgICAgIGRlbHRh
LnNldEhlaWdodCgwKTsKLQotICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxE
ZWx0YShkZWx0YSkpOwotfQotCi0vLyBGSVhNRTogdW5pZnkgd2l0aCB0aGUgc2Nyb2xsUmVjdFRv
VmlzaWJsZSgpIGNvZGUgYmVsb3cuCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2
ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkK
LXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
cmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50
KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgp
LT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgewotICAgICAgICBTY3Jv
bGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAg
ICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgaWYgKHNjcm9sbGVk
QXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOwotCi0gICAgICAgIC8vIElm
IHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAg
dGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQotICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9m
ZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOwotICAgICAgICBpZiAoIXJl
bWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KLSAgICAg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZ
ZXMpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVs
eShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7Ci0KLSAgICAgICAgICAgIHJl
bmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIo
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3
ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkg
c2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4g
V2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xs
ZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRh
KTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEg
PSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IElm
IHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2lu
ZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9u
PiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9u
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklm
TmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
bV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwotICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRp
b24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIHNldFNjcm9sbFBvc2l0
aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17
Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOwot
ICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIGlmIChhbmlt
YXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhB
bmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotfQotCi1TY3Jv
bGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQ
b3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBv
c2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3Jv
bGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFu
aW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRT
Y3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1w
U2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGNsYW1w
ZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAg
ICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIGlmICghcmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xs
T2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcpOwotICAgIHNldFNj
cm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7
Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xs
T2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlw
ZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsKLSAgICBpZiAoY3VycmVu
dFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0
aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMo
KTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAg
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKG5ld1Njcm9s
bE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYg
cG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAo
IWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywg
c3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20g
IiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRT
Y3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKLQotICAgIFNjcm9sbFBv
c2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1
ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNv
bXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgot
ICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgICAgICBjb21wdXRl
U2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlm
IChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZp
b3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAgICAgICAgICBpbnQgbWF4
T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsK
LSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdP
ZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBj
YXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRo
OwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCi0gICAg
ICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlm
IChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQotICAg
ICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKLQotICAgICAgICAgICAg
bmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAgICBuZXdQb3NpdGlvbiA9
IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYg
Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5v
dEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2Ug
Z2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9m
IGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJv
YmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5k
cy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7
Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0
aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCkudmlldygpOwotCi0gICAg
Ly8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVlZGVkIGFz
IG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCkuCi0gICAg
Ly8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBuZWVkIHRv
IGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCi0gICAgaWYg
KCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgp
KSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3ZSdsbCBq
dXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgotICAgICAgICB1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQotICAgICAgICB2aWV3LmZy
YW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0KLSAgICAgICAgaWYg
KCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBBdm9pZCB1cGRh
dGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdlJ3JlIGFs
cmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBkYXRpbmcg
bGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUgUmVuZGVy
TGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGlsbCB1cGRh
dGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgbGF0
ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0gICAgICAgICAgICBpZiAo
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgICAgIHNldE5lZWRzQ29t
cG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHBv
c2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50
ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAgICAgICAgICAgICAgIC8v
IHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFpbnQtb3JkZXIgcGFyZW50
LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IHBhaW50T3JkZXJQYXJl
bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVl
ZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRo
ZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOwotICAgICAgICBEZWJ1
Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUoKSk7Ci0gICAgfQotCi0g
ICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAgIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFp
bnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhZnRl
ciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0
ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlcigpLmhh
c1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5t
X3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChy
ZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAocmVwYWludENvbnRhaW5l
cikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJlcGFpbnRDb250YWluZXIt
PmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0gICAgZnJh
bWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0
cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgIHNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXREZXNjZW5kYW50c05l
ZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgIHJlcXVpcmVz
UmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7Ci0g
ICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0
LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKLQotICAgIC8v
IFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVudHMuCi0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxl
bWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOwot
Ci0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRp
ZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENv
bnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xs
KCp0aGlzKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJt
aXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmll
dyYgZnJhbWVWaWV3KQogewogICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4cGxpY2l0bHkg
Zm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgpAQCAtMjgxNiwzMCArMjI4NiwzMyBAQCB2b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29s
dXRlUmVjdCwgYm9vbCBpbnNpZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVS
ZWN0OwogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci0gICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRM
YXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObyk7CiAgICAgYm9vbCBhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKIAogICAgIGlmIChh
bGxvd3NDdXJyZW50U2Nyb2xsKCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
dGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIp
OworCiAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIg
dGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAg
ICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVu
IGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KICAgICAgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKICAgICAgICAgQVNTRVJUKGJveCk7CiAgICAgICAgIExheW91dFJlY3QgbG9j
YWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0
KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAg
ICAgICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFs
LXRiIGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUg
cmVjdAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xs
IGJhci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBz
YW1lIHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5
b3V0UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9j
YWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxh
eWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWln
aHQoKSk7CiAgICAgICAgIExheW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShs
YXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgs
IG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5k
ZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRT
Y3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAg
ICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5j
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpICsgdG9JbnRT
aXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgaWYg
KGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKSB8
fCBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAg
ICAgICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICAgICAgICAgIGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3Jv
bGxpbmcob3B0aW9ucy5iZWhhdmlvciwgYm94LT5lbGVtZW50KCkpKQogICAgICAgICAgICAgICAg
IGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKLSAgICAgICAgICAgIHNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQp
OworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0
ZWQpOwogICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBl
ZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKICAgICAgICAgICAgIGxvY2FsRXhwb3Nl
UmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKICAgICAgICAgICAgIG5ld1JlY3Qg
PSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0
KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKQEAgLTI4
NTcsNyArMjMzMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29u
c3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAg
Ly8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVs
ZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxs
b3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0
UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFy
ZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogICAgICAgICAgICAgICAgIExheW91
dFJlY3QgZXhwb3NlUmVjdCA9IGdldFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0
LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAogICAgICAg
ICAgICAgICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKHJvdW5kZWRJbnRQb2ludChleHBvc2VS
ZWN0LmxvY2F0aW9uKCkpKTsKQEAgLTI4NzMsOCArMjM0NiwxMCBAQCB2b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9v
bCBpbnNpZAogICAgICAgICAgICAgICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihzY3Jv
bGxQb3NpdGlvbiwgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChvcHRpb25zLnNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0g
U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Q
cm9wYWdhdGVTY3JvbGxUb1BhcmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBlbmNsb3NpbmdMYXllciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVyID0gZW5jbG9zaW5nTGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdM
YXllcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudExheWVyID0gc2Nyb2xsYWJsZUxheWVyLT5lbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpObyk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ly8gQ29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBwYXJl
bnQgZnJhbWUncyBkb2N1bWVudC4KICAgICAgICAgICAgICAgICAgICAgbmV3UmVjdCA9IGZyYW1l
Vmlldy5jb250ZW50c1RvQ29udGFpbmluZ1ZpZXdDb250ZW50cyhlbmNsb3NpbmdJbnRSZWN0KG5l
d1JlY3QpKTsKICAgICAgICAgICAgICAgICAgICAgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklY
TUU6IGlkZWFsbHkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyA8aWZyYW1lPiBpcyBpbnNpZGUg
cG9zaXRpb246Zml4ZWQuCkBAIC0yOTMxLDI0ICsyNDA2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKICAgICAgICAgcGFyZW50TGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwg
aW5zaWRlRml4ZWQsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0Nv
bnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250
YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhh
dCBtYXkgbmVlZAotICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRp
bmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRp
bmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVy
KCkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAg
ICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGlu
Z1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmlj
ZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBz
Y3JvbGxpbmcuCi0gICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2Vu
ZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAg
ICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRv
RXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBl
eHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdu
WCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9s
bEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QK
IHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpOwogICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyVmlldygpICYmIGluc2lkZUZpeGVkKSB7
CkBAIC0zMDI2LDExNTUgKzI0ODQsOTcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXkKICAgICAg
ICAgLy8gSWYgdGhlIHJlY3QgaXMgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgZG9uJ3Qg
Ym90aGVyIHRyeWluZyB0byBjZW50ZXIuIE90aGVyIGFsaWdubWVudHMgd2lsbCB3b3JrLgogICAg
ICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRWaXNpYmxlQmVoYXZpb3IoYWxpZ25Z
KTsKICAgICAgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxp
Z25DZW50ZXIpCi0gICAgICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlv
cjo6Tm9TY3JvbGw7Ci0gICAgfSBlbHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAwKQotICAgICAg
ICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNp
ZmllZCBwYXJ0aWFsIGJlaGF2aW9yCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6
OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsWSA9
IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKLSAgICAvLyBJZiB3
ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VS
ZWN0IGlzIGZ1cnRoZXIgZG93bgotICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90
IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9t
LgotICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduVG9D
bG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1heFkoKSAmJiBl
eHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHNjcm9s
bFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKLQotICAgIC8vIEdp
dmVuIHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCi0gICAgTGF5b3V0
VW5pdCB5OwotICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5v
U2Nyb2xsKQotICAgICAgICB5ID0gdmlzaWJsZVJlY3QueSgpOwotICAgIGVsc2UgaWYgKHNjcm9s
bFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b20pCi0gICAgICAgIHkg
PSBleHBvc2VSZWN0Lm1heFkoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOwotICAgIGVsc2UgaWYg
KHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCi0gICAg
ICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJl
Y3QuaGVpZ2h0KCkpIC8gMjsKLSAgICBlbHNlCi0gICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsK
LQotICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5z
aXplKCkpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbkluV2luZG93KQotewotICAgIEludFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0
aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93VG9Db250ZW50cyhwb3Np
dGlvbkluV2luZG93KTsKLSAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVu
dERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBmYWxzZSwgeyBTZWxlY3Rpb25S
ZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTaG91bGRBbGxvd0Nyb3NzT3Jp
Z2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblJlc2l6ZSgp
IGNvbnN0Ci17Ci0gICAgLy8gV2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVj
YXVzZSB0aGV5IG5ldmVyIGhhdmUKLSAgICAvLyBoYXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwg
dGhleSBkbyAiaW1wbGljaXRseSIgY2xpcCB0aGVpciBjb250ZW50cywgc28KLSAgICAvLyB3ZSB3
YW50IHRvIGFsbG93IHJlc2l6aW5nIHRoZW0gYWxzby4KLSAgICByZXR1cm4gKHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91
dFNpemUmIG9sZE9mZnNldCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcG9zc2li
bGUgb24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5vdCByaWdodCBub3cuCi0gICAgaWYgKCFp
blJlc2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwgIXJlbmRlcmVyKCkuZWxlbWVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSByZW5k
ZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9IHJlbmRlcmVyIGlzIHdpdGggY29udGludWF0
aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KLSAgICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0
aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhlbSBleHBsaWNpdGx5LgotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKTsKLSAgICBhdXRvKiByZW5kZXJlciA9IGRv
d25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQuZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZsb2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Ci0K
LSAgICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1bWVudC52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMoZXZ0LnBvc2l0aW9uKCkpOwotICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChhYnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQb2ludCkpOwotCi0gICAgTGF5b3V0U2l6ZSBu
ZXdPZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwotICAgIG5ld09m
ZnNldC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IpOwotICAgIG5ld09m
ZnNldC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgCi0g
ICAgTGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExheW91dFNpemUocmVuZGVyZXItPndpZHRoKCkg
LyB6b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICBMYXlv
dXRTaXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+bWluaW11bVNpemVGb3JSZXNpemluZygpLnNo
cnVua1RvKGN1cnJlbnRTaXplKTsKLSAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6
aW5nKG1pbmltdW1TaXplKTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0
ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5o
ZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZz
ZXQud2lkdGgoKSk7Ci0gICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3Rl
ZE9sZE9mZnNldC53aWR0aCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTGF5b3V0U2l6ZSBkaWZmZXJl
bmNlID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFu
ZGVkVG8obWluaW11bVNpemUpIC0gY3VycmVudFNpemU7Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBz
dHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCk7Ci0gICAgYm9v
bCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5zdHlsZSgpLmJveFNpemluZygpID09IEJv
eFNpemluZzo6Qm9yZGVyQm94OwotCi0gICAgUmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHls
ZSgpLnJlc2l6ZSgpOwotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpWZXJ0aWNhbCAmJiBkaWZm
ZXJlbmNlLndpZHRoKCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20g
dGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8g
em9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRl
cmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgo
KSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRl
ckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpv
b21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRo
KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBpZiAocmVzaXplICE9IFJl
c2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1h
a2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBy
ZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3Is
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFz
ZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUg
OiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBi
YXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQo
YmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChS
YWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5l
Y2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7
Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29u
c3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0
aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNv
bnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNj
cm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBz
Y3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlz
aWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0
aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNl
LndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNw
YWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1v
dW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5k
ZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNo
OwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92
ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byBy
ZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Ny
b2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNl
dC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zm
c2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAg
ICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5o
ZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkg
PCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVs
c2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hh
YmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lk
dGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lk
dGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXpl
KCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewot
ICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50
UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
ZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7
Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAg
IHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmll
d1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Ny
b2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2lu
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNv
bnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5t
b3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
UmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXpl
IFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsK
LQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91
bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgo
KSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVU
b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0
aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVu
dHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVp
Z2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQo
KSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVh
c29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQo
cmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6
U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJl
cigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRT
aG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0
TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3Bl
bmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgp
Ci17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwo
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQg
UmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlm
aWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rp
b24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9t
ZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFz
dEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAg
IHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVs
RXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxh
eWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9y
ZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFw
cGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7
Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXIt
PmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIg
PyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIg
PSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBi
b29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9s
bGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9s
bGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENv
cm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJs
YXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhv
cml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwot
Ci0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
IHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3Ju
ZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAg
ICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgK
LSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0K
LSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3Qu
bWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFy
T25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3Qu
eCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQot
Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9u
VGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJX
aWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJh
clJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29y
bmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0g
YmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3Ju
ZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7
Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVj
dCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVy
U2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xs
YmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVj
dChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQu
c2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFy
VGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7
Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlj
a25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0
KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9j
YXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAg
IHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
LSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12
b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250
cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVj
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNj
cm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
QVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUg
dHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBz
Y3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVj
dDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAg
ICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAg
ICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9v
bCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJl
dHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAot
ewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIo
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxT
Y3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJG
b3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNo
YWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7
Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpV
c2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVu
ZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0K
LVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0Owot
ICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYg
YWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAg
Ym9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVy
ZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNl
dWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNj
cm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJh
cjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgp
LCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVu
dHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25p
dG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRn
ZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxS
ZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3Jv
bGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBo
YXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAg
ICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGlj
aXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJh
bmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlB
dXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6
OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAg
fSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYK
LSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNl
IG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUg
dGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAg
IG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFy
LT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBo
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Ny
b2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9s
bGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGlj
aXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2Vu
ZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9s
bGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNl
bmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2Fu
IGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1
cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0g
ICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAg
bV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVy
OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpF
eGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNj
cm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUo
KQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVC
b3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250
YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRM
YXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXll
ciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+
aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VE
YXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0Fw
cGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBw
b3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9z
aW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJl
bmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMs
ICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5z
dHlsZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5p
c1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Nj
cm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgot
Ci1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9y
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpE
ZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwg
J3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigp
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhh
c0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9w
IGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmco
KSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAg
ICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdC
dWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFt
OwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8
IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7
Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hC
YXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hC
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQot
Ci1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1h
eFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxv
Y2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJm
bG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1f
c2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5v
bmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25z
dCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFy
ICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3go
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9s
bGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3Qo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7
Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7
Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIp
OwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXpl
cikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0K
LWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5k
ZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7
Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NF
UlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0
ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5o
ZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0K
LQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91
dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQo
b3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0
SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQot
ICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQo
KSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Ny
b2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRv
cE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNj
cm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZl
cnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRU
b0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6
Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChy
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3Jp
ZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxl
Lm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVy
ZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1
dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVu
dGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJh
ck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBz
dHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0g
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNl
dWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlT
Y3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhl
IHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAg
aWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpv
bnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFz
VmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3Jv
bGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmICht
X2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6
b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRh
bE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVu
ZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0
RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBh
dXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3Qg
YWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdl
ZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9v
bCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJh
cldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0
aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
fHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNI
b3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAo
Ym94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAg
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAg
IHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50
KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVy
Zmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6
OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAg
ICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
cmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAg
IGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
UmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwot
ICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRh
bFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAg
ICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAg
ICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVy
KCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94
KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxl
eGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94
KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGlu
ZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJv
dW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Ny
b2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMo
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJh
ci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAg
IH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRv
SW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxi
YXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
fQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBU
aGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlv
bnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Ny
b2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBj
b21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNh
c2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7
Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0
IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAg
ICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2gg
dGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxP
ZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJl
dCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBl
bnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlz
c3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24g
b24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRl
bnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBm
b3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Ny
b2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zm
c2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVT
Y3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsK
LSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNl
dE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYg
KGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0
Q29tcG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJ
bnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJz
ZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdu
bWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsOworICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0SGVpZ2h0
ID4gMCkKKyAgICAgICAgLy8gSWYgdGhlIHJlY3RhbmdsZSBpcyBwYXJ0aWFsbHkgdmlzaWJsZSwg
dXNlIHRoZSBzcGVjaWZpZWQgcGFydGlhbCBiZWhhdmlvcgorICAgICAgICBzY3JvbGxZID0gU2Ny
b2xsQWxpZ25tZW50OjpnZXRQYXJ0aWFsQmVoYXZpb3IoYWxpZ25ZKTsKKyAgICBlbHNlCisgICAg
ICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7
CisgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFsaWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFu
ZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIGRvd24KKyAgICAvLyB0aGFuIHRoZSB2aXNpYmxl
UmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdp
dGggdGhlIGJvdHRvbS4KKyAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2
aW9yOjpBbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5tYXhZKCkgPiB2aXNpYmxlUmVj
dC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQor
ICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b207
CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIC8vIEdpdmVuIHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZ
IGNvb3JkaW5hdGUuCisgICAgTGF5b3V0VW5pdCB5OworICAgIGlmIChzY3JvbGxZID09IFNjcm9s
bEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsKQorICAgICAgICB5ID0gdmlzaWJsZVJlY3Qu
eSgpOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6
QWxpZ25Cb3R0b20pCisgICAgICAgIHkgPSBleHBvc2VSZWN0Lm1heFkoKSAtIHZpc2libGVSZWN0
LmhlaWdodCgpOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhh
dmlvcjo6QWxpZ25DZW50ZXIpCisgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VS
ZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKyAgICBlbHNlCisgICAg
ICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
TGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0KIAot
Ym9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCiB7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJz
IGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2ludCBj
dXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLndp
bmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7CisgICAgc2Nyb2xsUmVjdFRvVmlzaWJs
ZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEpKSwg
ZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogfQogCi12b2lkIFJlbmRl
ckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJv
b2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUg
bm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQg
cGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0gICAg
Ly8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50
aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxzZSwg
YW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3Zl
cmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2ls
bCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0g
ICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGlt
ZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRvZXNu
J3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0gICAg
aWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7
Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0Owot
Ci0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYg
dGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFyICYm
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJlY3Qg
bG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3Zl
QnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAg
ICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpOwotCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20g
Q1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYm
ICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVy
bGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMg
aWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5n
IGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBs
YXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQg
dGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAgIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOwot
Ci0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJp
Z2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJl
Y3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAg
ICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChsYXll
ckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lk
dGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xs
IGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1
biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFp
bnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7
Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0
b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVz
dGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAg
SW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICBpZiAobV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29u
dGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQg
bW9kZSJfcyk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdl
IGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2VlIHdo
YXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAg
ICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJz
UmVjdCk7Ci19CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQ
bGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29y
bmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVm
KCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7
Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsK
LSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1Jl
cygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxl
YWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VM
b1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6
ZSgpOworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0dGVy
IFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVh
bSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKHNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0
LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgp
ICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVz
aXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAo
cmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXpl
Q29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7
Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9h
dFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6
ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVy
UmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOwor
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK0xheW91dFVuaXQgUmVu
ZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCByZXNp
emVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBh
aW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRy
b2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNpemVy
LT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29u
dGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUg
cmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNl
bnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVk
Z2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICht
X3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7
Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAg
ICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkg
KyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRyYXdS
ZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKK0xh
eW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKIHsKLSAgICBpZiAo
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7CiB9CiAKLWJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpv
dmVyZmxvd0xlZnQoKSBjb25zdAogewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNh
blJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0Owot
ICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7Ci0g
ICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVz
dCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQu
Ci0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2Fs
UG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICht
X2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAg
ICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7
Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
KyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2
ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQxOTIsMTcgKzI1OTIsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkK
LXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9z
aW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0
cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFp
bnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6
Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxl
KQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjI1LDcgKzI2MTQsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRp
dGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVy
ZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4g
c28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9
IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxh
eWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50QmVo
YXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29u
dGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBp
ZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZs
b3dTY3JvbGxDb250ZW50KSAmJiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgJiYgbGF5ZXItPnNj
cm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJh
ZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVyKSkg
ewpAQCAtNDQyNyw3ICsyODE2LDggQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4
ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sJgogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9u
IGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAg
ICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBjb250ZW50c1Nj
cm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQo
KSk7CisgICAgYm9vbCBkb2VzTm90VXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9ICFzY3JvbGxhYmxl
TGF5ZXIoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiBkb2VzTm90VXNlQ29tcG9zaXRlZFNjcm9sbGluZykgfHwgKHJlbmRlcmVy
KCkuZnJhbWUoKS5vd25lckVsZW1lbnQoKSk7CiAgICAgYm9vbCBpc1pvb21pbmcgPSAhcGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmhhc1N0YWJsZVBhZ2VTY2FsZUZhY3RvcigpOwogICAgIGlmIChz
Y3JvbGxpbmdPbk1haW5UaHJlYWQgfHwgY29udGVudHNTY3JvbGxCeVBhaW50aW5nIHx8IGlzWm9v
bWluZykgewogICAgICAgICBkaWRRdWFudGl6ZUZvbnRzID0gY29udGV4dC5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKTsKQEAgLTQ3MjIsOCArMzExMiw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpCiAgICAgICAgICAgICBwYWludExpc3QocG9zaXRpdmVaT3JkZXJMYXllcnMoKSwgY3Vy
cmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBoYXNTY3Jv
bGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMo
bGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7CisgICAg
ICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgc2Nyb2xsYWJsZUxheWVyKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFn
bWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7CiAKICAgICAgICAgaWYg
KGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RG
cmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlSZWN0IHdhcyByZXNldCB0byByZXByZXNl
bnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MTkxLDE4ICszNTgxLDYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXIKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dD
b250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2Fs
UGFpbnRpbmdJbmZvKQotewotICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZy
YWdtZW50cykgewotICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBw
YWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9p
bnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkg
KyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAotICAgICAgICAgICAgc25hcHBl
ZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7Ci0gICAgfQotfQotCiB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RXZlbnRSZWdp
b25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpCiB7CiAgICAg
QVNTRVJUKGxvY2FsUGFpbnRpbmdJbmZvLmV2ZW50UmVnaW9uQ29udGV4dCk7CkBAIC01MjM2LDcg
KzM2MTQsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mCiAgICAgICAgICAgICAgICAgYWJzb2x1
dGVMYXlvdXRWaWV3cG9ydFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgaGl0
VGVzdEFyZWEuaW50ZXJzZWN0KGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0KTsKICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpKTsKKyAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2Fj
eUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKICAgICB9CiAKICAgICBSZW5kZXJMYXllciogaW5z
aWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgbnVsbHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBo
aXRUZXN0QXJlYSwgaGl0VGVzdExvY2F0aW9uLCBmYWxzZSk7CkBAIC01NDY3LDkgKzM4NDUsMTEg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJv
b3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVz
aXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVz
dExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewotICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7Cisg
ICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmNhblJlc2l6ZSgpICYmIHNjcm9sbGFibGVMYXll
ci0+aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0
aW9uLCBsb2NhbFBvaW50KSkgeworICAgICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNl
IHBvcyBpcyBpbnNpZGUgdGhlIGNoaWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVj
awpAQCAtNTU0MiwzNSArMzkyMiw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50
c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNv
bnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGF1dG8gcmVj
dHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGF1dG8gY29ybmVyUmVjdEluRnJh
Z21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3Qm
IHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxl
ZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4
WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5t
aW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVz
aXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIH0KLSAg
ICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhN
YXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgICAgICByZXR1
cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9t
Qm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9Owot
ICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXll
ckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBj
b3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyks
IHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50
ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlu
cyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7Ci0gICAgICAgICAgICBwb2ludElu
RnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21l
bnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICBjb25zdCBMYXlvdXRS
ZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24s
IGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSog
ek9mZnNldCkKIHsKQEAgLTYwMTEsMzYgKzQzNjIsNiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVy
Ojpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdAogICAgIHJldHVy
biBjbGlwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKLXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcykpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpCi17Ci0gICAgbV9ibG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7Ci0gICAgZm9yIChSZW5kZXJMYXllciog
Y2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
KQotICAgICAgICBjaGlsZC0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpCi17Ci0gICAgZm9y
IChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fw
cygpOwotCi0gICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGlmIChy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
KQotICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
Lm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVn
aW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0g
ICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xp
cFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNj
b3VudGVkIGZvci4KLSAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZW5kZXJlcigp
LnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2Vj
dHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlv
dXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgT3B0aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hl
ZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8vIEFsd2F5cyBleGFtaW5lIHRoZSBjYW52YXMg
YW5kIHRoZSByb290LgpAQCAtNjMzNywyMSArNDY1OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhh
c0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2lu
Zy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0K
LQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2lu
ZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJv
b2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFp
c0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTYzODIs
MTEgKzQ2ODgsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWludEZs
YWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQ
aGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91
bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93
blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewog
ICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnQoKSkKQEAgLTY1MTAsOCArNDgxMSwxMiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91
bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAoIWlzTm9ybWFsRmxvd09ubHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKQotICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBib29sIGhhc092
ZXJsYXlTY3JvbGxiYXJzID0gc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFz
T3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcg
PSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5jYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CisKKyAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMKKyAgICAgICAgfHwg
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZwogICAgICAgICB8fCByZW5kZXJlcigpLmlzVGFibGVS
b3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVy
ZXIoKS5pc1ZpZGVvKCkKQEAgLTY2MjgsNyArNDkzMyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhh
c1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERl
Y29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJl
dHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAoc2Nyb2xsYWJs
ZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJmbG93Q29udHJvbHMoKSk7CiB9
CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJl
cXVlc3QqIHJlcXVlc3QpIGNvbnN0CkBAIC02NjM4LDcgKzQ5NDMsNyBAQCBib29sIFJlbmRlckxh
eWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBj
b25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSB8fCAhcmVuZGVyZXIoKS5zdHlsZSgp
Lm9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlcmVyKCku
aXNSZW5kZXJSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChy
ZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCktPmhhc092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFy
ZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2NjMsMzggKzQ5NjgsNiBA
QCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1
ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJz
KCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJm
bG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRz
IGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0
byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgp
Lm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVy
Zmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJh
ciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6
b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwg
SG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9
IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Ny
b2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxT
Y3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3Jv
bGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9s
bGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hl
biBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAo
c2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxi
YXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0
RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJh
ciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRF
bmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAg
ICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFs
Rmxvd09ubHkoKSk7CkBAIC02NzE3LDYgKzQ5OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHls
ZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZQogCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5
IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNv
dWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgorICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOwogICAgIGlmIChv
bGRTdHlsZSkgewogICAgICAgICBib29sIHZpc2liaWxpdHlDaGFuZ2VkID0gb2xkU3R5bGUtPnZp
c2liaWxpdHkoKSAhPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpOwogICAgICAgICBp
ZiAob2xkU3R5bGUtPnVzZWRaSW5kZXgoKSAhPSByZW5kZXJlcigpLnN0eWxlKCkudXNlZFpJbmRl
eCgpIHx8IHZpc2liaWxpdHlDaGFuZ2VkKSB7CkBAIC02NzI2LDE4ICs1MDAwLDE1IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgICAgIH0KIAogICAgICAgICAvLyBWaXNpYmlsaXR5IGlz
IGlucHV0IHRvIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKS4KLSAgICAgICAgaWYgKHZpc2li
aWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKTsKKyAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkICYmIHNjcm9sbGFibGVM
YXllcikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxN
YXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1
ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFt
X21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1
ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAg
IH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOworICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jcmVhdGVP
ckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICB9CiAKLSAgICB1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7CiAgICAgLy8gT3ZlcmxheSBz
Y3JvbGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAg
ICAgLy8gdG8gcmVjb21wdXRlIHRoZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRh
dGVkLgogICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CkBAIC02NzUwLDE1ICs1MDIxLDEy
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1f
cmVmbGVjdGlvbi0+c2V0U3R5bGUoY3JlYXRlUmVmbGVjdGlvblN0eWxlKCkpOwogICAgIH0KLSAg
ICAKLSAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5h
dGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAg
ICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZC
YXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKSB7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIH0KIAogICAgIHVwZGF0
ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAt
Njc3OSw5OCArNTA0Nyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dykKLXsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpOwotCi0gICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2li
bGVUb0hpdFRlc3RpbmcoKTsKLSAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9
IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQotICAgICAgICBpc1Zpc2libGVUb0hp
dFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVU
b0hpdFRlc3RpbmcoKTsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYg
aXNWaXNpYmxlVG9IaXRUZXN0OwotICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAg
ICAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNv
bnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotICAgIAotICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKLSAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0g
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOwotICAgIH0KLQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgewotICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQot
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KLSAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5k
ZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gY29ybmVy
ID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNh
Y2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVu
ZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghY29ybmVyKSB7Ci0gICAgICAg
IGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpj
b3JuZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQg
b2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclNjcm9sbENvcm5lcigpCi17Ci0gICAgaWYg
KCFtX3Njcm9sbENvcm5lcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2Nyb2xsQ29ybmVyLT5z
ZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1l
bnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0g
ICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFj
dHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsK
LSAgICAgICAgY2xlYXJSZXNpemVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIp
KTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRz
IHBhcmVudCEKLSAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAg
ICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBt
X3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6Y2xlYXJSZXNpemVyKCkKLXsKLSAgICBpZiAoIW1fcmVzaXplcikKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fcmVzaXplciA9
IG51bGxwdHI7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6cmVmbGVjdGlvbkxheWVy
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWZsZWN0aW9uID8gbV9yZWZsZWN0aW9uLT5sYXll
cigpIDogbnVsbHB0cjsKQEAgLTcwMDIsNyArNTE3OCw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciog
cGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAo
YXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAK
LSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJu
IGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXll
cjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdApAQCAtNzI0OCwx
MSArNTQyNCwxMyBAQCBzdGF0aWMgdm9pZCBvdXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZShU
ZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IFdlYkNvcmU6OlJlbgogCiAgICAgc3RyZWFtIDw8ICIg
IjsKIAotICAgIHN0cmVhbSA8PCBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOwotICAgIHN0cmVh
bSA8PCAiICI7Ci0gICAgc3RyZWFtIDw8IGxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
IHsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9sbGFibGVMYXllci0+Ym94U2Nyb2xsaW5nU2NvcGUo
KTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIjsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9sbGFibGVM
YXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCi0gICAgc3RyZWFtIDw8ICIgIjsKKyAg
ICAgICAgc3RyZWFtIDw8ICIgIjsKKyAgICB9CiAKICAgICBvdXRwdXRJZGVudChzdHJlYW0sIGRl
cHRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBkODM3M2Fh
ZTgxOWQ0ZWI5OWQ2YjI3ZGNjZTVlZWUwOTRmZWU5YmY0Li4wNDQxZGRhYjcyZDJhZWViODZjMjU0
NGZlMDI1YzIwODU2NDk3ZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aApAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJl
bmRlclB0ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+
CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTE0MCwyMCArMTM5LDI5IEBAIHN0cnVjdCBT
Y3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyB7CiAgICAgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3Ig
eyBTY3JvbGxCZWhhdmlvcjo6QXV0byB9OwogfTsKIAotdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1
aW50NjRfdDsKLQogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVy
TGF5ZXIpOwotY2xhc3MgUmVuZGVyTGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEg
eworY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5k
ZXJMYXllcik7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVy
TGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7Cisg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKKworICAgIGVudW0gY2xhc3Mg
TGF5ZXJUeXBlIHsKKyAgICAgICAgU3RhdGljLAorICAgICAgICBTY3JvbGxhYmxlCisgICAgfTsK
IAogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAg
ICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisgICAgTGF5ZXJUeXBlIGxheWVyVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5ZXJUeXBlOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJM
YXllclNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGNv
bnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7CisKICNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVy
J3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVE
ZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyMzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXll
ckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxv
d2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJMYXllcihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiwgTGF5ZXJUeXBlKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVz
ZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51
bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEsOCArNDIyLDYgQEAgcHVibGljOgogCiAgICAg
dm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRU
b1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDExMyArNDQyLDE0IEBAIHB1YmxpYzoKIAogICAgIExh
eW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6
ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIElu
dFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVU
b3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgaW50IHNjcm9sbFdpZHRoKCkg
Y29uc3Q7Ci0gICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBwYW5TY3Jv
bGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2Rz
IGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9u
VXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVz
ZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9s
bFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0g
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGlu
dCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
LCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRT
Y3JvbGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAg
ICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZz
ZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5
KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0K
LSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgp
OwotCi0gICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBz
Y3JvbGxhYmxlLgotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcn
cyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Ny
b2xsYWJsZUFyZWEuCi0gICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7Ci0KLSAgICB2b2lk
IGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBm
aW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29y
ZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYg
YWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxl
T3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29s
IGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xs
YWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7
IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
KCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9p
ZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFs
OwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8g
dG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0
dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSku
CiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CiAKLSAgICBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Owot
ICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25z
dDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCk7Ci0gICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29y
bmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKLQotICAgIHZvaWQgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNl
KTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6
ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
Jik7CiAKLSAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgcmVzaXplKGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNpemUmKTsKLSAgICBib29sIGluUmVz
aXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9Ci0gICAgdm9pZCBzZXRJ
blJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQotCiAgICAgYm9vbCBp
c1JlbmRlclZpZXdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSZW5kZXJWaWV3TGF5ZXI7IH0K
ICAgICBib29sIGlzRm9yY2VkU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mb3Jj
ZWRTdGFja2luZ0NvbnRleHQ7IH0KICAgICBib29sIGlzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0OyB9
CkBAIC01NTUsOSArNDY1LDYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
TGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwog
Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAg
Ym9vbCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0
OwogICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBh
Z2luYXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBS
ZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25N
b2RlIG1vZGUpIGNvbnN0CkBAIC01NzksMTAgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
ZWFyQ2xpcFJlY3RzSW5jbHVkaW5nRGVzY2VuZGFudHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVh
ciA9IEFsbENsaXBSZWN0VHlwZXMpOwogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHMoQ2xpcFJlY3Rz
VHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0VHlwZXMpOwogCi0gICAgdm9pZCBhZGRCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgY2xlYXJC
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLSAgICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlv
bkdhcHMoKTsKLQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFtX3Zpc2libGVDb250
ZW50U3RhdHVzRGlydHkpIGhlcmUsIGJ1dCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTcxMDQ0CiAgICAgLy8gZGl0dG8gZm9yIGhhc1Zpc2libGVEZXNjZW5kYW50
KCksIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNzcKICAg
ICBib29sIGhhc1Zpc2libGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaXNpYmxlQ29u
dGVudDsgfQpAQCAtNjM3LDYgKzU0MCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25z
dDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NG
cmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJl
bmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2gg
Y2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxh
eWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAtNjk4LDcgKzYwMyw2IEBA
IHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0
ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25D
b250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7
CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVy
LCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xp
cCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQsMTEgKzY4OCw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9z
dGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9j
a1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0g
cG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9
Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVy
ZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBo
YXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04
NTgsMjAgKzc1Nyw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJh
Y2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQg
PSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQogICAgIHZvaWQgc2V0SGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3Jv
bGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIu
IFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4g
Ym94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9
Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KLQogICAgIGJvb2wgcGFp
bnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
cikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAoaXNUcmFuc3BhcmVudCgpIHx8IGhhc0Js
ZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5nKCkgJiYgIXJlbmRlcmVyKCkuaXNEb2N1bWVu
dEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvcjo6
RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAhaXNDb21wb3NpdGVkKCkpOwpAQCAtODg1LDEx
ICs3NzMsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9j
YWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZl
YWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
OyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0
eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNj
cm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBi
b29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOCw4
ICs4MDEsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRl
ZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIHZvaWQgc2lt
dWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQYWludEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9w
YWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5
KCk7IH0KIApAQCAtOTMwLDcgKzgxMSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50
UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxl
LCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihF
dmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAx
IDw8IDEsCkBAIC0xMDMwLDE2ICs5MDgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVM
YXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAgICAgICAgICAgICAgICAgICAg
PSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgICAg
ICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCAgICAg
ICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0b3IgICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RM
YXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQg
cmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0
UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5NDAsNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBM
YXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJl
bmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludEZv
cmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFn
bWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
cik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7
Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOwog
ICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRC
ZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZv
aWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
ICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+
KTsKQEAgLTEwOTksNjQgKzk2NiwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVz
dENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0Rmls
dGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0
KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZy
YWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJ
bkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVy
TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNv
bnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25z
dCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0g
bnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJl
Y3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgdm9p
ZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93
KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBi
b29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogCiAgICAgYm9vbCBzaG91bGRCZVNl
bGZQYWludGluZ0xheWVyKCkgY29uc3Q7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZh
Y2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRS
ZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJv
b2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50
UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZp
c2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVo
YXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51
bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFu
Y2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAg
ICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAg
IGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9n
TW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQot
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9t
IFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24m
KTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAg
IEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAot
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAg
CiAgICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5
QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7CkBAIC0xMTk2LDE0ICsxMDEz
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb252ZXJ0IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRz
IGludG8gbGF5ZXIgY29vcmRzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBM
YXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29udGVudHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsK
IAotICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAg
ICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENv
cm5lcigpOwotICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJl
c2l6ZXIoKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQg
dXBkYXRlUGFnaW5hdGlvbigpOwogCiAgICAgdm9pZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRh
bnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTcs
MjAgKzEwMjYsNyBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29u
c3Q7CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7CiAKLSAgICBzdHJ1Y3Qg
T3ZlcmZsb3dDb250cm9sUmVjdHMgewotICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXI7Ci0gICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyOwotICAgICAgICBJbnRSZWN0IHJlc2l6ZXI7Ci0gICAgICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7
Ci0gICAgICAgIH0KLSAgICB9OwotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OwotCi0gICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OwotCisgICAgTGF5ZXJUeXBlIG1f
bGF5ZXJUeXBlOwogICAgIE9wdGlvblNldDxDb21wb3NpdGluZz4gbV9jb21wb3NpdGluZ0RpcnR5
Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7CkBAIC0xMjQ0
LDEwICsxMDQwLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbm9ybWFsRmxvd0xpc3REaXJ0eTog
MTsKICAgICBib29sIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0IDogMTsKIAotICAgIC8vIEtlZXBz
IHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZl
bnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KLSAgICBib29sIG1faW5S
ZXNpemVNb2RlIDogMTsKLQotICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwog
ICAgIGJvb2wgbV9pc1NlbGZQYWludGluZ0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8g
c2VsZi1wYWludGluZyBkZXNjZW5kYW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGls
ZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRoaXMgY2FuIGxlYWQgdG8KQEAgLTEyNTksMTQgKzEwNTEs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVu
ZGVkIHVwIHBhaW50aW5nIHRoaXMgbGF5ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVm
b3JlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4K
ICAgICBib29sIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0
IHRyYWNraW5nIGlmIHdlIGFyZSBwYWludGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wg
bV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6
IDI7IC8vIFJlcGFpbnRTdGF0dXMKIAogICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0Rp
cnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92
aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURl
c2NlbmRhbnQgOiAxOwotICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwog
ICAgIGJvb2wgbV9pc0ZpeGVkSW50ZXJzZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9i
ZWhhdmVzQXNGaXhlZCA6IDE7CiAKQEAgLTEyODcsMTcgKzEwNzcsNiBAQCBwcml2YXRlOgogICAg
IHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21w
b3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
IDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6
IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5k
aWYKQEAgLTEzMzgsMjUgKzExMTcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdp
ZHRoL2hlaWdodAogICAgIEludFNpemUgbV9sYXllclNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlv
biBtX3Njcm9sbFBvc2l0aW9uOwotICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbjsKLQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNj
cm9sbGVkIGFyZWEuCi0gICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5
ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVm
UHRyPFNjcm9sbGJhcj4gbV9oQmFyOwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKICAg
ICAKLSAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICBN
YXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdT
Y29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7Ci0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2Nv
cGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGU7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9t
YXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1h
bCBmbG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRp
YyBsZWZ0L3RvcCB2YWx1ZXMuCiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9u
OwogICAgIExheW91dFVuaXQgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2NiwxMCArMTEy
OCw2IEBAIHByaXZhdGU6CiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFu
eSByZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxS
ZW5kZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBv
dXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRl
clNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3Jv
bGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3Npbmcg
UmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdl
IGFyZSBub3QgcGFnaW5hdGVkLgogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IDUxOWQzNjEwNzgwOGUzNjJmN2MwNDBmNDI3OGM4ODNhMmYz
OTA2MWUuLmNkZjlhOWE2ZGQ0YjU1MGFjYzIxZDUyNmE0MDJhODg1MWNlYTViMTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01Mywx
MyArNTMsMTQgQEAKICNpbmNsdWRlICJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNs
dWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRD
b250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUg
IlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgotI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRl
by5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTI2OSw3ICsyNzAsOCBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6d2lsbEJlRGVzdHJveWVkKCkKICNlbmRpZgogCiAgICAgQVNTRVJU
KG1fb3duaW5nTGF5ZXIuYmFja2luZygpID09IHRoaXMpOwotICAgIGNvbXBvc2l0b3IoKS5yZW1v
dmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMobV9vd25pbmdMYXllcik7CisgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoKnNj
cm9sbGFibGVMYXllcik7CiAKICAgICBjbGVhckJhY2tpbmdTaGFyaW5nTGF5ZXJzKCk7CiB9CkBA
IC00MjEsMTEgKzQyMywxMSBAQCBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29t
cHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogCiAgICAgVGlsZWRC
YWNraW5nOjpUaWxlQ292ZXJhZ2UgdGlsZUNvdmVyYWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFn
ZUZvclZpc2libGVBcmVhOwogICAgIGJvb2wgdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6
ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNpemUoKTsKLSAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1
cmluZ0xpdmVSZXNpemUpIHsKLSAgICAgICAgaWYgKGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSkKKyAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUg
JiYgbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFi
bGVMYXllcigpLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCiAgICAgICAgICAg
ICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3Jv
bGxpbmc7CiAKLSAgICAgICAgaWYgKGxheWVyLmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZVZl
cnRpY2FsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tp
bmc6OkNvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxpbmc7CiAgICAgfQogICAgIHJldHVybiB0aWxl
Q292ZXJhZ2U7CkBAIC0xMjMyLDggKzEyMzQsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckJh
Y2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdChjb25zdCBSZW5kZXJMYXllcioK
ICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpIHsKICAgICAgICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBh
bmNlc3RvckJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKTsKICAgICAgICAgTGF5b3V0UmVjdCBz
Y3JvbGxDb250YWluZXJCb3ggPSBzY3JvbGxDb250YWluZXJMYXllckJveChhbmNlc3RvclJlbmRl
ckJveCk7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBjb21wb3NpdGVkQW5j
ZXN0b3ItPnNjcm9sbE9mZnNldCgpOwotICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9
IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXpl
KGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlvbigpKSAtIHRvTGF5b3V0U2l6ZShzY3Jv
bGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CisgICAgICAgIExheW91dFNp
emUgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHRvTGF5b3V0U2l6ZShjb21w
b3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAg
ICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVy
Qm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxv
Y2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsx
Mjg5LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGlu
Z0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVyZmxvd1Njcm9sbCkgewotICAgICAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGlu
Z0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnkuY2xp
cERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgICAgICAgICBl
bnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICBsYXN0Q2xpcExheWVyUmVjdC5tb3ZlQnkoLXNjcm9sbE9mZnNldCk7CkBAIC0x
MzkwLDcgKzEzOTUsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnko
Y29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgbV9zY3JvbGxD
b250YWluZXJMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChzY3JvbGxDb250YWluZXJCb3gu
bG9jYXRpb24oKSAtIHBhcmVudExheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICAgICAgbV9z
Y3JvbGxDb250YWluZXJMYXllci0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShMYXlvdXRTaXplKHNj
cm9sbENvbnRhaW5lckJveC53aWR0aCgpLCBzY3JvbGxDb250YWluZXJCb3guaGVpZ2h0KCkpKSk7
CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IG1fb3duaW5nTGF5ZXIuc2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOwor
ICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAK
ICAgICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250
YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC0xNDA0LDcgKzE0MTEsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIq
IGNvbXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFu
Z2VkID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+
b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQoKSk7Cisg
ICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZShzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCks
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCkpOwogICAgICAgICBpZiAoc2Nyb2xsU2l6
ZSAhPSBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2l6ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRD
aGFuZ2VkKQogICAgICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlz
cGxheSgpOwogCkBAIC0xNDg5LDE0ICsxNDk2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0
CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldCkKIHsKLSAgICBpZiAobV9vd25pbmdMYXllci5jdXJyZW50U2Nyb2xs
VHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJsZUxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50
U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKICAgICAgICAgLy8gSWYgc2Nyb2xs
aW5nIGlzIGhhcHBlbmluZyBleHRlcm5hbGx5LCB3ZSBkb24ndCB3YW50IHRvIHRvdWNoIHRoZSBs
YXllciBib3VuZHMgb3JpZ2luIGhlcmUgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2Ugaml0dGVyLgog
ICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9s
bGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpOwotICAgICAgICBtX293bmluZ0xheWVyLnNl
dFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1
ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUg
Y29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRo
ZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25P
ZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0
aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBB
U1NFUlQobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAt
MTkxMSwxMiArMTkyMiwxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXll
ckZvclNjcm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6
b250YWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKCFtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXll
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JT
Y3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxT
Y3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3Jv
bGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVM
YXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdApAQCAtMTkyNCwxMiArMTkzOSwx
NiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigp
IGNvbnN0CiAgICAgaWYgKCFpczxSZW5kZXJCb3g+KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5n
TGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgp
OworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNj
cm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNj
cm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmlu
Z0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xs
YmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVM
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9y
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTE5NjUsMTAgKzE5ODQsMTIgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVk
c0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxh
eWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUs
ICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAg
IEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKwogICAgICAgICBpZiAo
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5n
TGF5ZXIsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKm1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCksIEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAo
dmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xh
eWVyLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSwgVmVydGljYWxTY3JvbGxiYXIpOwogICAgIH0KIAogICAgIHJldHVy
biBsYXllcnNDaGFuZ2VkOwpAQCAtMTk3Niw3ICsxOTk3LDggQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxT
Y3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
c0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
OworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyIHx8ICFzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9s
bGJhcnMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBkbyBkZXZp
Y2UtcGl4ZWwgc25hcHBpbmcuCkBAIC0xOTk4LDE2ICsyMDIwLDE2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogICAgIH07CiAKICAg
ICAvLyBUaGVzZSByZWN0cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGJvcmRlckJveFJlY3QuCi0gICAg
YXV0byByZWN0cyA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAg
YXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAK
ICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewog
ICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMuaG9yaXpvbnRhbFNj
cm9sbGJhciwgcGFkZGluZ0JveEluc2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVu
dChtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250
ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVM
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIo
KSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERy
YXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51
c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNM
YXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclNjcm9sbENv
cm5lcigpKSB7CkBAIC0yMTY1LDcgKzIxODcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAgICAgICAg
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXRBbmNob3JQb2ludCh7IH0pOwogICAgICAgICBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5hZGRDaGlsZCgqbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbXBvc2l0b3IoKS53aWxsUmVtb3ZlU2Nyb2xsaW5n
TGF5ZXJXaXRoQmFja2luZyhtX293bmluZ0xheWVyLCAqdGhpcyk7CisgICAgICAgIEFTU0VSVCht
X293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgY29tcG9zaXRvcigpLndp
bGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKCptX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpLCAqdGhpcyk7CiAKICAgICAgICAgd2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbENv
bnRhaW5lckxheWVyLmdldCgpKTsKICAgICAgICAgd2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbGVk
Q29udGVudHNMYXllci5nZXQoKSk7CkBAIC0yMTc0LDkgKzIxOTcsMTEgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5
ZXJzKQogICAgICAgICBHcmFwaGljc0xheWVyOjp1bnBhcmVudEFuZENsZWFyKG1fc2Nyb2xsZWRD
b250ZW50c0xheWVyKTsKICAgICB9CiAKLSAgICBpZiAobV9zY3JvbGxDb250YWluZXJMYXllcikK
LSAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNjcm9sbGluZ0xheWVyKG1fb3duaW5nTGF5ZXIp
OwotICAgIAorICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKSB7CisgICAgICAgIEFTU0VS
VChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgY29tcG9zaXRvcigp
LmRpZEFkZFNjcm9sbGluZ0xheWVyKCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsK
KyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk4NSw4ICszMDEwLDkgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAg
ICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKICAgICAgICAgRmxv
YXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVkUmVjdEZvclBhaW50aW5nOwotICAg
ICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQo
KSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsKKyAgICAgICAgbGF5ZXJEaXJ0eVJl
Y3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsg
dG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNl
dCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVk
Q29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91
bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMDMyLDggKzMwNTgsMTAgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5
ZXIsIEdyYXAKICAgICAgICAgaWYgKCZsYXllciA9PSAmbV9vd25pbmdMYXllcikgewogICAgICAg
ICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFp
bnRGbGFncyk7CiAKLSAgICAgICAgICAgIGlmIChsYXllci5jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQotICAgICAgICAgICAgICAgIGxheWVy
LnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwor
ICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQorICAgICAgICAgICAgICAgICAgICBsYXll
ci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwg
UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsYXllci5wYWludExh
eWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIApAQCAt
MzMyMywxNyArMzM1MSwyMiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwaAogICAgICAgICAgICAg
cGFpbnREZWJ1Z092ZXJsYXlzKGdyYXBoaWNzTGF5ZXIsIGNvbnRleHQpOwogCiAgICAgfSBlbHNl
IGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0g
ICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigp
LCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Ny
b2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0
KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBk
aXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9s
bENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigp
OworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5l
clJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENv
cm5lck9yUmVzaXplclJlY3QoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVj
dC5sb2NhdGlvbigpKTsKICAgICAgICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlv
dXRSZWN0KGNsaXApOwogICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KGNvcm5lclJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29u
dGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAg
ICAgIG1fb3duaW5nTGF5ZXIucGFpbnRSZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5z
Zm9ybWVkQ2xpcCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIo
Y29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7Cisg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRSZXNpemVyKGNvbnRleHQsIEludFBvaW50KCks
IHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgfQogI2lmbmRlZiBOREVCVUcKICAgICByZW5kZXJlcigp
LnBhZ2UoKS5zZXRJc1BhaW50aW5nKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggYTJiNThlNjY2OTA2ODVmY2U2
YjFhODgzNDljN2ZmM2NlNjg1MjI2YS4uZjIzMDQxZjRmYmM2OTNmZjcwMTNkN2U3NjgwMjc4MWI2
N2FlMDhmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKQEAgLTMxNTMsNyArMzE1Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9i
amVjCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
T3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBv
c2l0aW5nRGF0YSYgcXVlcnlEYXRhKSBjb25zdAogewotICAgIGlmICghbGF5ZXIuY2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpKQorICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkgfHwg
IWxheWVyLnNjcm9sbGFibGVMYXllcigpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUg
PT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjkzLDcgKzMyOTMsOSBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBS
ZW5kZXJMYXllciYgbAogCiBzdGF0aWMgYm9vbCBpc1Njcm9sbGVkQnlPdmVyZmxvd1Njcm9sbExh
eWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXImIG92ZXJmbG93
U2Nyb2xsTGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCkgPT0g
b3ZlcmZsb3dTY3JvbGxMYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJU
KGxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBBU1NFUlQob3ZlcmZsb3dTY3JvbGxMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVMYXllcigp
LT5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJmbG93U2Nyb2xsTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKIH0KIAogc3RhdGljIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxh
eWVyLCBjb25zdCBSZW5kZXJMYXllciYgaW50ZXJtZWRpYXRlTGF5ZXIsIGJvb2wmIHNhd0ludGVy
bWVkaWF0ZUxheWVyKQpAQCAtNDIzOCw3ICs0MjQwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCiAgICAgICAgIHJvb3RMYXll
ci0+bm90ZURldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRz
KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVGcm9tU2Nyb2xsQ29v
cmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXImIGxheWVyKQordm9pZCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhSZW5kZXJMYXllclNjcm9s
bGFibGUmIGxheWVyKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fbGVn
YWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcikKQEAgLTQ1NjcsOCArNDU2OSwxMSBAQCBTY3Jv
bGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9y
Vmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBh
cmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25z
dCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5j
ZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUg
YSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICgh
YW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0s
IExheW91dFNpemUoc2Nyb2xsYWJsZUxheWVyLT52aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KCk7CisgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVj
dDsKICAgICBpZiAoaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEg
KzQ1OTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05v
ZGVMYXllcnMoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9v
dEJhY2tncm91bmRMYXllcigpLCBjbGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAg
ICAgICAgICAgIGZyYW1lVmlldy5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVW
aWV3LmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKwogICAg
ICAgICBhdXRvJiBiYWNraW5nID0gKmxheWVyLmJhY2tpbmcoKTsKICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3Iuc2V0Tm9kZUxheWVycyhub2RlSUQsIHsgYmFja2luZy5ncmFwaGljc0xheWVy
KCksCiAgICAgICAgICAgICBiYWNraW5nLnNjcm9sbENvbnRhaW5lckxheWVyKCksIGJhY2tpbmcu
c2Nyb2xsZWRDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBu
dWxscHRyLAotICAgICAgICAgICAgbGF5ZXIubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCks
IGxheWVyLmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgOiBudWxscHRyLAorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxh
eWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyIH0pOwogICAgIH0KIH0K
IApAQCAtNDYzMCw4ICs0NjM4LDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAg
IGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikKICAgICAgICAg
ICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFu
Z2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAg
ICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJl
YUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9s
bGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9k
ZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxl
QXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgKmxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdOb2RlSUQ7CkBAIC00NzY3LDIwICs0Nzc3LDIx
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGlu
Z05vZGVzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVsZXZhbnRTY3Jv
bGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikgeworICAgIGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSYg
bGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigpID09ICZyZW5kZXJlcikKICAg
ICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOwogICAgICAgICByZXR1
cm4gbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAgIH07CiAKLSAgICBhdXRvIHJv
b3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5sYXllcigpLT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7Cisg
ICAgYXV0byByb290U2Nyb2xsaW5nU2NvcGUgPSBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVy
KCktPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKIAogICAgIGZvciAoYXV0byYgcmVuZGVyZXIg
OiAqc2xvd1JlcGFpbnRPYmplY3RzKSB7CiAgICAgICAgIGF1dG8gbGF5ZXIgPSByZW5kZXJlci5l
bmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVy
IHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3JvbGxpbmdTY29wZShyZW5k
ZXJlciwgKmxheWVyKTsKKyAgICAgICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJlbGV2YW50U2Ny
b2xsaW5nU2NvcGUocmVuZGVyZXIsICpsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAg
ICBpZiAoc2Nyb2xsaW5nU2NvcGUgIT0gcm9vdFNjcm9sbGluZ1Njb3BlKSB7CiAgICAgICAgICAg
ICBhdXRvIGVuY2xvc2luZ1Njcm9sbGluZ05vZGVJRCA9IGFzeW5jU2Nyb2xsYWJsZUNvbnRhaW5l
ck5vZGVJRChyZW5kZXJlcik7CiAgICAgICAgICAgICBBU1NFUlQoZW5jbG9zaW5nU2Nyb2xsaW5n
Tm9kZUlEKTsKQEAgLTQ4MDQsMTAgKzQ4MTUsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW4K
ICAgICBpZiAobm9kZUlEID09IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxpbmdOb2Rl
SUQoKSkKICAgICAgICAgcmV0dXJuICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKLSAgICBy
ZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsKKyAgICBy
ZXR1cm4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKS0+c2Nyb2xs
YWJsZUxheWVyKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3Zl
U2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVy
QmFja2luZyYgYmFja2luZykKK3ZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3Zl
U2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyLCBS
ZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4MjMsNyArNDgzNCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5k
ZXJMYXllciYgbGF5CiB9CiAKIC8vIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgY2FsbGVk
IGZyb20gdGhlIHVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkuCi12b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQordm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyU2Ny
b2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQ5MzgsNyArNDk0OSw3IEBAIHZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xs
aW5nTGF5ZXJDb29yZGluYXRvcjo6dW5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXll
CiAgICAgbV9jaHJvbWVDbGllbnQudXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVycyhsYXll
ck1hcCwgeyB9KTsKIH0KIAotdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5h
dG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2Fj
eVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJl
bmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAgYXV0byogYmFja2luZyA9IGxheWVy
LmJhY2tpbmcoKTsKICAgICBBU1NFUlQoYmFja2luZyk7CkBAIC00OTY1LDEyICs0OTc2LDEyIEBA
IHZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dW5yZWdpc3RlckFs
bFNjcm9sbGluZ0xheWVycygpCiAgICAgfQogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGlu
Z0xheWVyQ29vcmRpbmF0b3I6OmFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikK
K3ZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5n
TGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBtX3Njcm9sbGluZ0xh
eWVycy5hZGQoJmxheWVyKTsKIH0KIAotdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRl
ckxheWVyQmFja2luZyYgYmFja2luZykKK3ZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJD
b29yZGluYXRvcjo6cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBs
YXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQogewogICAgIGlmIChtX3Njcm9sbGlu
Z0xheWVycy5yZW1vdmUoJmxheWVyKSkgewogICAgICAgICBhdXRvKiBzY3JvbGxDb250YWluZXJM
YXllciA9IGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmlu
ZGV4IDdhODViMjY5NmM2OGFhNDBkNDI4MWYzYmMyMmM2YmNkNmI4ODAwNWEuLmJkMDc1YmE5MmE0
MzFlNDQ3MGJhMzM3MjU2OWZlYWNhNGRjMmMwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0xheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0
ZXIuaCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAgLTEy
MSw4ICsxMjEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckFsbFNjcm9sbGluZ0xheWVy
cygpOwogICAgIHZvaWQgdW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpOwogICAgIAotICAg
IHZvaWQgYWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKLSAgICB2b2lkIHJlbW92ZVNj
cm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7CisgICAgdm9p
ZCBhZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmKTsKKyAgICB2b2lkIHJl
bW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYsIFJlbmRlckxheWVyQmFj
a2luZyYpOwogCiAgICAgdm9pZCBhZGRWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5
ZXImKTsKICAgICB2b2lkIHJlbW92ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXll
ciYpOwpAQCAtMTMwLDExICsxMzAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlTGF5ZXIo
UmVuZGVyTGF5ZXImKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xheWVy
KFJlbmRlckxheWVyJik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXll
clNjcm9sbGFibGUmKTsKIAogICAgIENocm9tZUNsaWVudCYgbV9jaHJvbWVDbGllbnQ7CiAKLSAg
ICBIYXNoU2V0PFJlbmRlckxheWVyKj4gbV9zY3JvbGxpbmdMYXllcnM7CisgICAgSGFzaFNldDxS
ZW5kZXJMYXllclNjcm9sbGFibGUqPiBtX3Njcm9sbGluZ0xheWVyczsKICAgICBIYXNoU2V0PFJl
bmRlckxheWVyKj4gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzOwogCiAgICAgY29uc3QgYm9v
bCBtX2Nvb3JkaW5hdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzOwpAQCAtMzUzLDEwICszNTMs
MTAgQEAgcHVibGljOgogCiAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yU2Ny
b2xsaW5nTm9kZUlEKFNjcm9sbGluZ05vZGVJRCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlbW92ZUZy
b21TY3JvbGxDb29yZGluYXRlZExheWVycyhSZW5kZXJMYXllciYpOworICAgIHZvaWQgcmVtb3Zl
RnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCi0g
ICAgdm9pZCB3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYs
IFJlbmRlckxheWVyQmFja2luZyYpOwotICAgIHZvaWQgZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXImKTsKKyAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyU2Nyb2xsYWJsZSYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQg
ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CiAKICAgICB2b2lk
IHJlc2V0VHJhY2tlZFJlcGFpbnRSZWN0cygpOwogICAgIHZvaWQgc2V0VHJhY2tzUmVwYWludHMo
Ym9vbCB0cmFja3NSZXBhaW50cykgeyBtX2lzVHJhY2tpbmdSZXBhaW50cyA9IHRyYWNrc1JlcGFp
bnRzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHAKaW5kZXggMmM1OWE0ODQ2YWY4NDQ3NTVlZjczMTA0YWFmNGEwODE1MWE4Y2Ix
ZC4uZDNlYzQzYWRjYTMzYzI2NWM4YzBlMGYyMzBkNjA0MDBiZjYzNDE5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAt
OTUsMTEgKzk1LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6ZGVzdHJveUxheWVy
KCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIoKQogewogICAgIEFT
U0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXI+KCp0
aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8gb25seSBjcmVhdGUg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9sYXllciA9IG1ha2VV
bmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0SGFzTGF5ZXIodHJ1
ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJMYXllcjo6TGF5ZXJD
aGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyID8gbV9sYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyOworfQor
CiBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Omhhc1NlbGZQYWludGluZ0xheWVyKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9sYXllciAmJiBtX2xheWVyLT5pc1NlbGZQYWludGluZ0xheWVy
KCk7CkBAIC0yMDgsOSArMjE0LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0
eWxlKCk7CiAgICAgaWYgKG9sZFN0eWxlICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1Vw
ZGF0ZUZvclN0eWxlVXBkYXRlKCpvbGRTdHlsZSwgbmV3U3R5bGUpKSB7Ci0gICAgICAgIGlmIChS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJM
YXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNjcm9sbFNuYXBTdGF0ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9keSgpIHx8IGlzRG9j
dW1lbnRFbGVtZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRnJhbWVWaWV3JiBmcmFtZVZp
ZXcgPSB2aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXcudXBkYXRlU25h
cE9mZnNldHMoKTsKQEAgLTIyMyw4ICsyMjksMTAgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QK
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewog
ICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5
bGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3Mg
IT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxT
bmFwQm94LT5sYXllcigpLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNj
cm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxTbmFwQm94LT5zY3JvbGxh
YmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGlmIChzY3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5pc0RvY3VtZW50
RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPnZp
ZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29yZGluYXRvclNjcm9sbFNuYXBQcm9w
ZXJ0aWVzKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJl
YTIyYjYzMWZmZTJkYmE3Li44NTc4NmMwODJmOWFiNGUxYTY2ZTNiZGJjN2ViZDM4ODc4MzFmZGM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLZXlm
cmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTsKIAogc3RydWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFp
bnRSZWN0OyAvLyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2JqZWN0cyAoZS5n
Liwgb3ZlcmZsb3c6aGlkZGVuKS4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAgIGJvb2wg
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKICAgICBSZW5kZXJMYXllciogbGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX2xheWVyLmdldCgpOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5k
ZXJMYXllclNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllcigpIGNvbnN0OworCiAgICAgdm9pZCBz
dHlsZVdpbGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tU3R5bGUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM2NWFhMDNlMDJmYzA1OGY1NmVk
ZDQ3YjQ4NzNhODg1MTRhYTYxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCkBAIC0wLDAgKzEsMjAwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRp
b25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9iZXJ0
IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJvbkBm
YXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJAd2Vi
LmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xhbmQg
TWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAqICAg
Sm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8YnpiYXJz
a3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBj
b250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiBl
aXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0Cisg
KiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5m
c2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0
aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxlIGlu
c3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgor
ICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRo
b3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxv
dyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBM
R1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNpb25z
IGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJv
dmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBi
ZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0
aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKK3sKKyAgICBz
dGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKKyAgICByZXR1cm4gKytjdXJy
ZW50U2NvcGU7Cit9CisKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKTsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpSZW5kZXJMYXll
clNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2Jq
ZWN0KQorICAgIDogUmVuZGVyTGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LCBSZW5kZXJM
YXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlKQorICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2Up
CisgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJmbG93
UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQor
ICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2Up
CisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQor
I2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxz
ZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKK3sKKyAgICBtX2lzU2VsZlBhaW50aW5n
TGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICBpZiAoaXNSZW5kZXJW
aWV3TGF5ZXIoKSkKKyAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3Jv
bGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworCisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCBy
ZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBh
cmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2
ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5p
c1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xs
UG9zaXRpb24oSW50UG9pbnQoKSk7CisgICAgfQorfQorCitSZW5kZXJMYXllclNjcm9sbGFibGU6
On5SZW5kZXJMYXllclNjcm9sbGFibGUoKQoreworICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKKyAg
ICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJv
eWVkKCk7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisK
KyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNjcm9sbENvcm5l
cigpOworICAgIGNsZWFyUmVzaXplcigpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBy
ZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRIZWlnaHQoKSkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0
aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBjb250
ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJs
ZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3Rk
OjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOworCisg
ICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50
c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNp
emUoKS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChy
ZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBj
b25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUo
KSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xs
U2l6ZS53aWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWln
aHQoKSBjb25zdAoreworICAgIEFTU0VSVChyZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRp
bmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKK30KKworc3RhdGljIGlu
bGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCit7CisgICAg
Ly8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCisgICAgLy8gaHR0cDovL214
ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93
c2VyLnhtbCM4NTYuCisgICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOworCisgICAgaW50
IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKKyAgICBpZiAo
YWRqdXN0ZWREZWx0YSA+IDEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0
YSkpKSAtIDE7CisgICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQorICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKworICAgIHJldHVybiBhZGp1c3Rl
ZERlbHRhOworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShj
b25zdCBJbnRTaXplJiBkZWx0YSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9s
bERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgp
KSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYW5TY3JvbGxGcm9tUG9pbnQo
Y29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQoreworICAgIEludFBvaW50IGxhc3RLbm93bk1v
dXNlUG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3du
TW91c2VQb3NpdGlvbigpOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxh
c3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1v
dXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAg
IHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93
bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDAp
CisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247
CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24g
LSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBm
b3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0
YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRl
bHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YSkpOworfQorCisvLyBGSVhNRTogdW5pZnkgd2l0aCB0aGUgc2Nyb2xsUmVj
dFRvVmlzaWJsZSgpIGNvZGUgYmVsb3cuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5k
ZXJlcigpLnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVy
ZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsK
KyAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsg
ZGVsdGE7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAg
IGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKwor
ICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBu
ZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1h
aW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAg
ICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5w
YXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBm
cmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworCisg
ICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Nj
cm9sbFJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3
ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9n
cmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGFuIG92
ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQg
Y2FuIGJlIHNjcm9sbGVkLgorICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5z
Y3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAq
c2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworCisgICAgICAg
IC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQg
dG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
Y29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisg
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICpzdGF0aWNfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9z
aXRpb24pOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRv
ci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcp
Cit7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5jYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9s
bE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1
cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
LCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAg
IHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Ny
b2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcpCit7CisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xs
VHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgU2Ny
b2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsKKyAgICBpZiAoY3Vy
cmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9u
TmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlv
bnMoKTsKKyAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9mZnNldCgpKQor
ICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKG5ld1Nj
cm9sbE9mZnNldCk7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5
cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgs
IG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAg
ICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAg
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIGlm
IChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQorICAgICAgICBzY3JvbGxUb09mZnNl
dFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xs
T2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
KE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKK3sKKyAgICBtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xs
VG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uLnZhbHVlKCkpKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVs
bG9wdDsKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKK3sKKyAgICBS
ZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxs
b3dlZFNjb3BlOworCisgICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVy
LnJlbmRlcmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CisgICAgfTsKKworICAgIGlmIChpbmNs
dWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRT
Y3JvbGxhYmxlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlKj4odGhpcyk7CisKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBu
ZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3Nz
RnJhbWVCb3VuZGFyaWVzKSkgeworICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgq
bmV4dExheWVyKSkgeworICAgICAgICAgICAgQVNTRVJUKG5leHRMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBpZiAocmVhc29uID09IEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOworICAg
ICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9sbHNPdmVyZmxvdygpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYm
IHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJm
bG93WSgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09
IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhh
c1Njcm9sbGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxF
bGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNl
dHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8g
U2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAg
ICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0
eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Ny
b2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNp
dHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcg
b25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdl
IG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAo
bV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIp
CisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sK
KyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92QmFyID0gY3Jl
YXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxv
dygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJs
ZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxh
c3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0
cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHko
U2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWlu
ZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBj
b21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0
eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Cisg
ICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworc3Rh
dGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFk
b3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChy
ZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgYWN0dWFsUmVuZGVy
ZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYm9vbCBoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25j
YXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNl
dWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQorICAg
ICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhp
cywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1l
bnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJl
Z3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlv
bik7CisgICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAgICAg
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53
aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5v
bk51bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxi
YXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9s
bGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBt
X2hCYXIgOiBtX3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVt
b3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xs
YmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwor
c3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikK
K3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK1Njcm9sbGFi
bGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworCisgICAgcmV0dXJu
ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQoreworICAgIHJldHVybiBy
ZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0
b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVy
ID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAobmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSAmJiBuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5j
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsK
K30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlU25hcE9mZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9y
dCBiZXlvbmQgSFRNTEVsZW1lbnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2lu
Z0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5k
ZXJCb3goKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlzLCAq
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSksICpib3gsIGJveC0+c3R5
bGUoKSk7Cit9CisjZW5kaWYKKworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRv
dWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBz
Y3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQu
CisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50
KHRvdWNoRXZlbnQpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBwYWdlKCku
Y2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlm
aWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rp
b24gdXBkYXRlZC4KKyAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9t
ZUNsaWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgYm9vbCBpc1Zpc2li
bGUgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGU7CisgICAgaWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5n
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygp
ICYmICFpc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNo
T3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNj
ZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAg
IGlmICghbV92QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAg
ICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRU
ZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53aWR0
aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sK
KyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAg
ICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+
aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNPdmVyZmxvd0Nv
bnRyb2xzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9s
bENvcm5lciB8fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbChJ
bnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAoreworICAgIGlmICghY2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5y
ZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYm
ICFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9sUmVj
dDsKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkg
eworICAgICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0
IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVz
dWx0LgorICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhs
b2NhbFBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0
KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewor
ICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50
KSkgeworICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvZmZzZXRGcm9tUmVzaXpl
Q29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAoreworICAgIGF1dG8gcmVz
aXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVz
aXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8g
cmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCk7CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3Qg
ZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBpZiAoIXJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE92ZXJsYXkgc2Nyb2xs
YmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhh
dCB0aGV5IHdpbGwgcGFpbnQKKyAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0
aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMK
KyAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBs
YXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKKyAgICAvLyB0aGF0IG5lZWQg
dG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHRvIHJ1biwKKyAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJh
cnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCisg
ICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVl
IHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRv
IGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4K
KyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8
IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAg
ICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAg
ICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7CisKKyAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMg
Y2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJz
IHR3aWNlLgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNj
cm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWlu
dE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykK
KyAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9m
ZnNldDsKKworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4g
V2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNv
bWV0aW1lcworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5n
IChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNv
bnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRo
YXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWlu
dCB0aGVtLgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KQorICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmICht
X3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5w
YWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5l
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVy
IHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0
aGUgd2F5IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9s
bENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICAK
KyAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0
aGUgc2Nyb2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWlu
dE9mZnNldCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0
IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkg
eworICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIg
aWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBz
ZWUgd2hhdCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQor
ICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBhYnNSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXpl
cihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNp
emVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
Y29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9t
IGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
IChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVj
dCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Cisg
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRo
KCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRy
YXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworLy8gVGhp
cyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25z
KS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsK
KyAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsK
KworICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0
ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9m
ZnNldHMoKTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMg
dG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVk
CisgICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAo
b3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBl
ZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4g
VGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyBy
ZWxhdGVkIGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBm
aXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBi
ZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hv
c2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1
Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNl
dCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRT
Y3JvbGxPZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAg
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xs
T2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChpc0NvbXBvc2l0
ZWQoKSkgeworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAg
ICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICB9CisK
KyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBzZXROZWVkc1Bv
c3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRl
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIpCit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpjYW5SZXNpemUoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9y
IDxpZnJhbWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCisgICAgLy8gaGFzT3ZlcmZsb3dDbGlw
KCkuIEhvd2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNv
CisgICAgLy8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCisgICAgcmV0dXJu
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJh
bWUoKSkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQoreworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90
IHJpZ2h0IG5vdy4KKyAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAh
cmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBU
aGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVu
ZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPworICAgIC8v
IElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4
cGxpY2l0bHkuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwor
ICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJl
cigpKTsKKworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Cisg
ICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKTsKKworICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50
LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7CisgICAgYXV0byBsb2Nh
bFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50
KSk7CisKKyAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIo
bG9jYWxQb2ludCk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8g
em9vbUZhY3Rvcik7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0
U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAv
IHpvb21GYWN0b3IpOworICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5p
bXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOworICAgIGVsZW1lbnQt
PnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOworICAgIAorICAgIExheW91
dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8g
em9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBuZXdP
ZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgYWRqdXN0ZWRPbGRP
ZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOworICAgIH0KKyAgICAK
KyAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBh
ZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsK
KworICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVt
ZW50PihlbGVtZW50KTsKKyAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0
eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7CisKKyAgICBSZXNpemUg
cmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7CisgICAgaWYgKHJlc2l6ZSAhPSBS
ZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgeworICAgICAgICBpZiAoaXM8
SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtl
IGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJl
bmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
KyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBD
U1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VX
aWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJl
bmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFz
ZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VX
aWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0K
KworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVp
Z2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50
KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1l
IGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1
NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3Is
IENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdp
bkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0K
KyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlz
Qm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRp
bmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3Rv
cjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSks
IENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91
dCgpOworCisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRv
c2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRo
ZSBjdXJzb3IgaW4gdmlldy4KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0
cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcmVuZGVy
ZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9B
bmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9L
IHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAg
ICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFu
ZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJE
b2N1bWVudFNjcm9sbCgpCit7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCku
bGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdl
b21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBi
b3VuZHMpCit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5n
SW50UmVjdChib3VuZHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlDbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5k
ZXJMYXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
Y2hpbGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5j
bGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNoaWxkKTsKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpCit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7
CisgICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyh0aGlzKTsKK30K
Kworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRl
ckxheWVyKiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKGNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKK3sKKyAgICByZWN1cnNpdmVseVJlcGFpbnRC
bG9ja1NlbGVjdGlvbkdhcHModGhpcyk7CisgICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0UmVjdCByZWN0ID0g
bV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7CisgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0
aW9uKCkpOworICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0
cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KKyAgICBpZiAocmVuZGVy
ZXIoKS5oYXNDbGlwKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhN
RTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkK
K3sKKyAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9z
aW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0
cmVlUGFpbnRSb290KTsKKyAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFp
bnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxs
cHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5n
LT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworLy8gRklYTUU6IHRoaXMg
aXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKK30KKwor
Ly8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAorewor
ICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcigq
dGhpcyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxpbmdNYXlSZXZl
YWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKworU3RyaW5nIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbmRlckxheWVy
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK3N0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3Jv
bGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlz
KQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlv
bjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZs
b3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09
IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3Jv
bGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygp
OworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0bzsKK30KKworc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGlj
U2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
YXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92
ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
Cit7CisgICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28g
d2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgp
ID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBPdmVyZmxvdyBvdmVyZmxv
d1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0g
Ym94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxh
eW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBh
dXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KKyAgICBib29sIG5l
ZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxi
YXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAgYm9vbCBuZWVkc1Zl
cnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUo
KSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5
bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
bmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJm
bG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNh
YmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRv
IHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFyICYmIG5lZWRz
SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkg
PT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAg
ICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJhciAmJiBuZWVk
c1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9
PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAg
ICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJM
YXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJU
KGJveCk7CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkg
dGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUo
KS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJv
b2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7
CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxv
dygpOworCisgICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2Ug
anVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICAgIGlmIChtX2hCYXIgJiYgc3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIp
KQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAg
ICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgp
LCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0
aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1h
eSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3Zl
ZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxT
Y3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsK
KworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2Fs
U2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xs
YmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNh
bFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAgIHVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7CisKKyAgICAgICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCBy
ZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKKyAgICAg
ICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICBtX2lu
T3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJC
bG9jaz4ocmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAg
ICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5n
ZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAgICAgICBi
bG9jay5sYXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Cisg
ICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIo
KS5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVu
dCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOworICAgIH0KKwor
ICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBp
ZiAobV9oQmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3Rl
cChjbGllbnRXaWR0aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOworICAgIH0KKyAgICBpZiAobV92
QmFyKSB7CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50
SGVpZ2h0KCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNs
aWVudEhlaWdodCk7CisgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgdXBkYXRl
U2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNp
dmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyTGF5ZXIqIGxheWVyLCBS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxSZW5kZXJMYXllclNjcm9s
bGFibGU6OlVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykKK3sKKyAg
ICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZs
YWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsKGNoaWxkLCBnZW9tZXRyeU1hcCwgZmxhZ3MpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hl
cmUKKyAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRo
ZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KKyAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50Rmxh
Z3MoKTsKKworICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50IGFuZCBubyB2aXNp
YmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGluZworICAgIC8vIG91
ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZpc2liaWxpdHkgY2hh
bmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCisgICAgLy8gcmVjb21wdXRlIGFsbCBvdXIgcG9zaXRp
b25zIGFueXdheS4KKyAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgIW1faGFzVmlz
aWJsZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcG9zaXRpb25DaGFuZ2Vk
ID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigpOworICAgIGlmIChwb3NpdGlvbkNoYW5nZWQpCisgICAg
ICAgIGZsYWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOworCisgICAgaWYgKGZsYWdzLmNvbnRh
aW5zQW55KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yLCBJc092ZXJmbG93U2Nyb2xsIH0pKQorICAgICAgICBjbGVhckNsaXBSZWN0cygpOwor
CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRp
b24oKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0
b3IpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIGZs
YWdzLmFkZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsKKyAgICAKKyAgICBib29s
IHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFpbnMoSGFzU2VlblZpZXdw
b3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNBbGwoeyBJc092ZXJmbG93
U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0pKSAmJiBpc1NlbGZQYWlu
dGluZ0xheWVyKCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAhaXNWaXN1YWxseU5vbkVt
cHR5KCk7CisgICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MgPSBnZW9tZXRyeU1hcCAm
JiAoKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFsbHlFbXB0eSkgfHwgZmly
c3RDaGlsZCgpKTsKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQorICAgICAgICBn
ZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CisKKyAg
ICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgeworICAgICAgICAvLyBXaGVuIHNjcm9s
bGluZywgd2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2aXN1YWxseSBub24tZW1w
dHkgbGF5ZXJzLgorICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQorICAgICAgICAgICAgY2xl
YXJSZXBhaW50UmVjdHMoKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sg
dGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJlZS4KKyAgICAgICAg
ICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCks
IGdlb21ldHJ5TWFwKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIFdoZW4gU2Nyb2xsVmlldydzIG1f
cGFpbnRzRW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5ZXIgYmFja2luZyBjaGFu
Z2VzLCB0aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KKyAgICAgICAgLy8gdmlzdWFs
IHRvIGxheW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNhY2hlZCByZXBhaW50
IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUgcmVjb21wdXRlZCAoc2Vl
IHdlYmtpdC5vcmcvYi8xODgxMjEpLgorICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBjYWNoZWQg
cmVjdHMgYXJlIGNvcnJlY3QuCisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50
TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWlu
dFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZW5kZXJl
cigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCku
aGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMo
KS5tX291dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZW5k
ZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgIH0KKworICAgIHJlY3Vyc2l2ZWx5
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCh0aGlzLCBnZW9tZXRyeU1hcCwgZmxhZ3Mp
OyAgICAKKworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxp
bmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQorICAg
IC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBp
dHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcworICAgIC8vIHVwZGF0ZWQg
YWJvdmUuCisKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIGJvb2wgb2xkVXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgICAgICBtX3Vw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVN
YXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9s
ZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KKworICAgIGlmIChzaG91bGRQdXNoQW5k
UG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3Io
cGFyZW50KCkpOworCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlk
YXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVu
KEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKK3sKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKKyAgICAgICAgaWYgKGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQs
IHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxP
ZmZzZXQpKSwKKyAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0LnJlY3QoKSksIHRydWUpOworICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xs
V2lkdGgoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Ny
b2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBj
b25zdAoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Ny
b2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBo
aXRUZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7Cisg
ICAgaWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBb
Jl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJS
ZWN0KSB7CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkpIHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3Jk
ZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigp
OworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNv
cm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3Qu
aGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50
U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVy
KCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVj
dCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmln
aHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisK
KyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50
cy5hdChpKTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0
SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJl
c2l6ZXIpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyho
aXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0
TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQg
PSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJC
b3VuZHMubG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJm
bG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKSk7CisgICAgbV9zY3JvbGxTaXplLnNldEhlaWdo
dChyb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7CisKKyAgICBp
bnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBi
b3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5k
VG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9y
aWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVy
ZmxvdykpOworICAgIAorICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoJnNjcm9s
bGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OworICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5z
ZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlm
ICghYm94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92
ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdl
dCgpKQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRS
ZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJl
cGFpbnRSZWN0KTsKKyAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3Qp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250
cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3Jv
bGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3Qp
OworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3Rhbmds
ZShyZWN0KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBj
b25zdAoreworICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOworICAgIHJldHVybiAhc2Ny
b2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7Cisg
ICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOworCisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBy
ZWN0KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJl
cigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZz
ZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNv
bnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5t
b3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyKCksIHBvaW50KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2lu
dCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQu
bW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiBwb2ludDsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQob2Zmc2V0KSk7Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURG
b3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxl
Q29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxl
Q29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNl
OworICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24g
PT0gSW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFy
SW50cnVzaW9uKCk7CisgICAgCisgICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVT
aXplKCk7CisgICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNp
YmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZp
c2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKK30KKwor
SW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK3sK
KyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklY
TUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9s
bGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0g
cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8
IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVs
c2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNo
YWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0
SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBz
dHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJs
ZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgp
IC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0
LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAg
cmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9u
SW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBy
ZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworSW50UmVjdCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVG
aXhlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7
CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9s
bEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xs
QW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJ
blByb2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBl
cmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFz
Y3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsK
KyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXBy
ZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1
ZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTogIiArIG1lc3NhZ2UpOworfQorCisKKyNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIXJlbmRlcmVy
KCkuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFk
ZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVy
ZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJl
cigpLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAg
IGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG8gIiA8PCBwb3Np
dGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xs
ICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsK
KworICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSkgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5z
aW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93Omhp
ZGRlbiBibG9ja3MpLgorICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAg
ICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWlu
ZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCisgICAg
ICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOworICAgICAgICAgICAgaW50IHNjcm9s
bFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOworICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNl
dCArPSBjYXJldFdpZHRoOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNh
cmV0V2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBj
YXJldFdpZHRoKQorICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsK
KworICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7CisgICAgICAgICAg
ICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOworICAg
ICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCku
dmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVy
cyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBh
IHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVj
YXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5j
ZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVu
ZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Yg
bGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVk
LgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKwor
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAgICAg
ICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUg
c3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBvc2l0
aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVw
LXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3
ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3Np
dGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCisg
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAgICAg
ICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9z
aXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAorICAg
ICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFp
bnQtb3JkZXIgcGFyZW50LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHBhaW50T3JkZXJQYXJlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGlu
ZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCisgICAgICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygp
OworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUo
KSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOworICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOworICAgIAorICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQg
PSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKKyAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworCisgICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
CisgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBz
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Cisg
ICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3Np
dGVkU2Nyb2xsKCk7CisgICAgfQorCisgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWlu
dCBvZiBvdXIgb2JqZWN0LgorICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCisgICAgICAgIHJlbmRl
cmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJn
ZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICB2aWV3
LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5mcmFtZVZp
ZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigpLnJlbmRl
ckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAgIGlmIChjb21wb3Np
dG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0
YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNj
ZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0
ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVy
KiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0Fu
Y2VzdG9yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3
b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFm
ZmVjdGVkIGJ5IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9y
LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7
CisgICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25z
dAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlm
ICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIGlmICgmc2Nyb2xsYmFy
ID09IG1faEJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9u
dGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiB7IH07Cit9CisKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVw
ZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7CisgICAgRnJhbWVWaWV3
JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wg
aXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Cisg
ICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5v
d25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5k
ZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAg
ICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsK
KyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVh
KHRoaXMpKTsKKyAgICAKKyAgICBpZiAoaXNTY3JvbGxhYmxlKSB7CisgICAgICAgIGlmICghbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0g
ZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAgbV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1l
Vmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEgPSBmYWxzZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKKyAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAm
JiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQg
b3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2Vs
ZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAg
ICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAg
ICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVk
KTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICgh
bV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX3ZC
YXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgfQorICAgIAor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3Zl
KG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9y
aXpvbnRhbFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAg
ICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7CisK
KyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0
cy5yZXNpemVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9s
bENvcm5lclN0eWxlKCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8gY29ybmVyID0gcmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVk
b1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0
eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Ny
b2xsQ29ybmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xs
Q29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
U2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsK
KyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBh
cmVudCEKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlm
ICghbV9zY3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+
c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCit7CisgICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKKyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVz
aXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICgh
cmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92
ZSgqcmVzaXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBj
aGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7CisgICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1f
cmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxw
dHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK3sKKyAgICBSZWZQdHI8SW1h
Z2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsK
KyAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikg
eworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFn
ZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVy
QDJ4IikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3Ju
ZXJJbWFnZUhpUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lcklt
YWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNv
cm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNp
emVDb3JuZXIiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6
ZUNvcm5lckltYWdlTG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29y
bmVySW1hZ2UtPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAg
ICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVy
U2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5o
ZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5z
Y2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFn
ZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4
dC5yZXN0b3JlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFyZXNp
emVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3QubWF4
WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSksIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRy
YXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZTo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJv
eC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50
UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CisKKyAg
ICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdo
dCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZC
YXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYm
ICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07CisKKyAgICBib29sIGhh
dmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9
IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgIGJvb2wgcGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJl
c2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9
IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAg
SW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAg
ICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMg
c3F1YXJlLgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAg
ICAgfTsKKyAgICB9CisKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7CisKKyAgICBp
ZiAobV9oQmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3Q7CisgICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgp
IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZv
aWRDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0KQorICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsg
Y29ybmVyU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
YXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAg
aWYgKG1fdkJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0OworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVm
dCkKKyAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3Qu
bWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisKKyAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6
ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVj
dDsKKyAgICB9CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXpl
KSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAg
ICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsg
Ym90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5o
ZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CisKKyAgICBpZiAoc2Nyb2xsYmFyc0F2
b2lkQ29ybmVyKQorICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3Ju
ZXJTaXplKTsKKworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFy
c0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xs
Q29ybmVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tu
ZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAg
ICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3Ms
IHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xz
SW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVj
dCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5p
bnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJl
Y3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVw
ZGF0ZU1hcnF1ZWUoKQoreworICAgIGlmIChtX21hcnF1ZWUpIHsKKyAgICAgICAgLy8gRklYTUU6
IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRo
IGJpdGZpZWxkcy4KKyAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwor
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlT3JE
ZWxldGVNYXJxdWVlSWZOZWVkZWQoKQoreworICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJl
aGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgeworICAgICAgICBpZiAoIW1fbWFy
cXVlZSkKKyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4o
dGhpcyk7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNj
cm9sbGluZ1Njb3BlcyhMYXlvdXRQb2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICAvLyBTdWJ0cmFj
dCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBSZW5kZXJMYXllciogcG9zaXRpb25l
ZFBhcmVudDsKKyAgICBpZiAocmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAo
cG9zaXRpb25lZFBhcmVudCA9IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIo
KS5zdHlsZSgpLnBvc2l0aW9uKCkpKSkgeworICAgICAgICBpZiAoYXV0byogcG9zaXRpb25lZFBh
cmVudFNjcm9sbGFibGUgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlTGF5ZXIoKSkgewor
ICAgICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhl
IGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KKyAgICAgICAgICAg
IGlmIChwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0Ns
aXAoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAgICAgICAgIGlm
IChwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9u
ZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5k
ZXJlcigpKSkgeworICAgICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8
UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkub2Zm
c2V0Rm9ySW5GbG93UG9zaXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKSk7CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+Y29u
dGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUg
PSBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7
CisgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGUgPSBwYXJlbnRMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRMYXllclNjcm9sbGFi
bGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlv
bigpKTsKKworICAgICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVu
dHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBw
YXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllciA9
IHBhcmVudExheWVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZSogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IHdoaWxlIChlbmNsb3NpbmdMYXllcikgeworICAgICAgICAgICAgICAgIGlmICgoZW5jbG9zaW5n
TGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZW5jbG9zaW5nTGF5ZXIg
PSBlbmNsb3NpbmdMYXllci0+cGFyZW50KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
ZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAg
ICAgICAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBlbmNsb3NpbmdMYXllclNjcm9sbGFi
bGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAg
ICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCisgICAgICAgICAgICBtX2NvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKKyAgICB9IGVsc2UgaWYgKCFtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94
U2Nyb2xsaW5nU2NvcGUpCisgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94
U2Nyb2xsaW5nU2NvcGU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVT
Y3JvbGxiYXJTdHlsZSgpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gZGV0ZWN0IGEgc3dhcCBm
cm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2UgdmVyc2EpLgorICAgIGlm
IChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJh
cikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2
Yzc2YmIyYjMyNzliYWRiMDZlZDZkNzcxODA3MDc0MDA0NmQyMTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKQEAgLTAs
MCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5
cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgor
ICogT3RoZXIgY29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5j
bXUuZWR1PgorICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAg
Q2hyaXN0aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVz
dXAgPHJqZXN1cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGlu
Zm9ybWF0aWsubWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0Bt
YWMuY29tPgorICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJs
aWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5v
cmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0
bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBN
UEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4g
IElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAo
dGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgor
ICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVj
aXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhl
bSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRo
ZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBk
ZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICog
dmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRo
ZSBHUEwuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
KTsKKwordXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKKworY2xhc3MgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlIGZpbmFsCisgICAgOiBwdWJsaWMgUmVuZGVyTGF5ZXIKKyAgICAsIHB1Ymxp
YyBTY3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQ
X0lERU5USUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKK3B1YmxpYzoKKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsK
KworICAgIGV4cGxpY2l0IFJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0Jik7CisgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKCk7CisKKyAgICBSZW5k
ZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9CisK
KyAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBjb250
ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAg
ICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2lu
dChjb25zdCBJbnRQb2ludCYpOworCisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVy
cyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vy
c2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJl
YSA9IG51bGxwdHIpOworCisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29u
c3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
OworCisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmlt
YXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVk
U2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Ny
b2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3Jv
bGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIHZvaWQg
c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Cisg
ICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAgICAv
LyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUu
CisgICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdo
ZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJl
YS4KKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisKKyAgICB2b2lk
IGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBm
aW5hbDsKKworICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNv
bnN0IHsgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
KTsKKworICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KworICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6
b250YWxTY3JvbGxiYXIoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisKKyAgICBib29sIGhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIFNjcm9sbGFibGVB
cmVhIG92ZXJyaWRlcworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9Cisg
ICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
dkJhci5nZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJl
YSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
KCkgZmluYWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkgZmluYWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZp
bmFsOworI2VuZGlmCisKKyAgICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uOyB9CisgICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24o
Ym9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9v
bCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOworI2Vu
ZGlmCisKKyAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRT
Y3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOworI2VuZGlm
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Ny
b2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Ny
b2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdDsKKworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGlu
dCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworCisgICAgYm9vbCBoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkgY29uc3Q7CisgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKElu
dFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJv
bHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBJbnRT
aXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNv
bnN0OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
KTsKKyAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQ
b2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOworCisgICAgdm9pZCB1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKKworICAgIGJvb2wg
Y2FuUmVzaXplKCkgY29uc3Q7CisgICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOworICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KKyAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29s
IGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpOworICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworCisgICAg
dm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZzsgfQorI2VuZGlmCisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHVzZXNBc3luY1Njcm9s
bGluZygpIGNvbnN0IGZpbmFsOworCisgICAgLy8gTGF5ZXJzIHdpdGggdGhlIHNhbWUgU2Nyb2xs
aW5nU2NvcGUgYXJlIHNjcm9sbGVkIGJ5IHNvbWUgY29tbW9uIGFuY2VzdG9yIHNjcm9sbGVyLiBV
c2VkIGZvciBhc3luYyBzY3JvbGxpbmcuCisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGJv
eFNjcm9sbGluZ1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTY3JvbGxpbmdTY29wZTsgfQor
ICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBjb250ZW50c1Njcm9sbGluZ1Njb3BlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOyB9CisKKyAgICBib29sIHNjcm9s
bGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KKworICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdm9p
ZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGVudW0gVXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgeworICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0
cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAorICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0
b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgfTsKKyAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKKworICAgIFNjcm9s
bE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKKwor
ICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mKTsKKwor
ICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0
aWNhbE92ZXJmbG93KCkgY29uc3Q7CisKKyAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygp
IGNvbnN0OworCisgICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5G
cmFnbWVudCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisg
ICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAg
Ly8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNBY3Rp
dmUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0
IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOworICAg
IEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRS
ZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmlu
YWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBz
ZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xsaW5n
Tm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2aXNp
YmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJh
cnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXpl
IG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91
c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1doZWVs
RXZlbnQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlz
VXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFy
c09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3Qg
U3RyaW5nJikgY29uc3QgZmluYWw7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlm
CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJp
ZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9s
bFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCk7ICAKKworICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChi
b29sIGhhc092ZXJmbG93KTsKKworICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNv
bnN0IEludFNpemUmKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAg
dm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7
CisgICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJS
ZWN0KTsKKworICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7CisgICAgICAgIEludFJl
Y3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXI7CisgICAgICAgIEludFJlY3QgcmVzaXpl
cjsKKyAgICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Ny
b2xsQ29ybmVyIDogcmVzaXplcjsKKyAgICAgICAgfQorICAgIH07CisgICAgT3ZlcmZsb3dDb250
cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CisKKyAgICBib29sIG92ZXJm
bG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7
CisKKyNpZiAwCitwcml2YXRlOgorICAgIGJvb2wgdXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25T
ZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qID0gbnVsbHB0cik7Cisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNl
dDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPik7CisKKyAgICB2b2lkIHBh
aW50QmFja2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNz
Q29udGV4dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBo
YXZlVHJhbnNwYXJlbmN5LCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVu
ZGVyZXIpOworCisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0NvbnRleHQmIHRyYW5zcGFy
ZW5jeUxheWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5
UGFpbnREaXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgUmVuZGVyTGF5ZXI6
OkxheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmpl
Y3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKworICAgIHZvaWQgcGFpbnRMYXllckNvbnRl
bnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0
PFBhaW50TGF5ZXJGbGFnPik7CisgICAgdm9pZCBwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9y
bShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6
ZSYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRTaXplKCkpOworCisgICAgYm9vbCBzZXR1cEZv
bnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmLCBib29sJiBkaWRRdWFudGl6
ZUZvbnRzKTsKKyNlbmRpZgorCisgICAgdm9pZCB1cGRhdGVNYXJxdWVlKCk7CisgICAgdm9pZCBj
cmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpOworICAgIHZvaWQgc3VidHJhY3RTY3JvbGxP
ZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMoTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpOwor
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBLZWVw
cyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2
ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCisgICAgYm9vbCBtX2lu
UmVzaXplTW9kZSA6IDE7CisgICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7Cisg
ICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKworICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6
IDE7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKKworICAgIC8vIFRo
ZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCisgICAgSW50U2l6ZSBtX3Njcm9s
bFNpemU7CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWly
IG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9s
bGJhck9mZnNldDsKKworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmth
YmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAgICBN
YXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdT
Y29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KKworICAg
IC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXpl
ci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKKworICAgIEludFJl
Y3QgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpSZW5kZXJMYXllciYgbGF5ZXIpIHsgcmV0dXJu
IGxheWVyLmxheWVyVHlwZSgpID09IFdlYkNvcmU6OlJlbmRlckxheWVyOjpMYXllclR5cGU6OlNj
cm9sbGFibGU7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQzNmVmZDE5MTNjZjcz
OTcwMTFlYmIzZDIxOTQ4ZTI0Li5lNDU2YzZjOGE1NTgzMjA0ZjYzYWVmYjY4ZThiYzAzMGI2ZDc2
MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCkBAIC00
OCw3ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0
U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCkBAIC04NzksMTAgKzg3OSw5IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6Zm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uCiBTY3Jv
bGxhYmxlQXJlYSogUmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25z
dAogewogICAgIGF1dG8qIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAoIWxheWVy
KQorICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVM
YXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpObyk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODkxLDEwIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2lu
Z0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpOworICAgIGF1dG8qIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBp
ZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlzdEJveDo6
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0ZDA5OTZlNmJmYmU0MGE2NDQx
MTY0NDU5YWE2NzgwZDhiLi4xYmE1YTYwMjFlOGQyMTNhYmQ0MjRlN2VlZjUyMzg0YmY0MDE5MGNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC00OSwx
NCArNDksMTQgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTWFycXVl
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCi1SZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyKiBsYXllcikK
K1JlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBsYXll
cikKICAgICA6IG1fbGF5ZXIobGF5ZXIpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmUmVuZGVyTWFy
cXVlZTo6dGltZXJGaXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5oCmluZGV4IDFjNzg4NDk1ZTBlODg1NzVlODBiZjkzMDhhMmY0OTRmYjRhNjI4ZDUuLjA4NGFk
MzM3NzQ4NmRmOWNlODMyNTY2NjY4NTQ1MmM0N2I5ODIzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuaApAQCAtNDksMTMgKzQ5LDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFi
bGU7CiAKIC8vIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgYXV0by1zY3JvbGxpbmcgZm9yIDxtYXJx
dWVlPgogY2xhc3MgUmVuZGVyTWFycXVlZSBmaW5hbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUmVuZGVyTWFycXVlZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAg
IGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsKKyAgICBleHBsaWNpdCBSZW5k
ZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSopOwogICAgIH5SZW5kZXJNYXJxdWVlKCk7
CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwpAQCAtODAsNyArODAsNyBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKLSAgICBSZW5kZXJMYXllciogbV9sYXll
cjsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fbGF5ZXI7CiAgICAgVGltZXIgbV90aW1l
cjsKICAgICBpbnQgbV9jdXJyZW50TG9vcCB7IDAgfTsKICAgICBpbnQgbV90b3RhbExvb3BzIHsg
MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDcxMTNmNWMz
MjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjk1NzU0MWE2YmU4MWYxYzBjNmNjZDdj
YTQ2ZjVjYmYxYzNiNmQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVk
SW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7
CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllclNjcm9sbGFibGU7CiBwdWJsaWM6CiAgICAgLy8gQW5vbnltb3VzIG9iamVjdHMgc2hvdWxk
IHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0aGV5IHdpbGwgdGhlbiBhdXRv
bWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFub255bW91cyBpbiB0aGUgY29uc3RydWN0
b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDYyNjBhODE1NzlmNTg0ZjU4Y2M0MGY3Y2UwOTA3NWI5
YjA4NjVhZjguLmVlMmFlNjY1MmEyMjJiYmQzODVjOGI2ZDNjODk2ZDYyZDI0YzA2ZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
LSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDAwLDE3ICs0MDAsMjIgQEAgYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWwKICAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJlbmRl
cmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJl
ci0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJu
IFJlbmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQog
CiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0g
ICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9u
LCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlu
bmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICBy
ZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGUwNTYwZDdhNTJhOTUyNjRkNmEzZDU2
ODJkNzkzNTY5NWMyM2Y2MGMuLjFmNmQzMWYwZDQ4YWMwNjdlMTViMzlkMGNiNTQ0ZTY5ZGQ0Mzdh
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAK
QEAgLTQ3LDggKzQ3LDggQEAKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgog
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5l
QnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RNYXJrZXIuaCIKQEAgLTU5OSwyMCArNTk5LDIxIEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXIo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgTGF5b3V0UmVj
CiAgICAgICAgICAgICB0cyA8PCAiIGNsaXAgIiA8PCBhZGp1c3RlZENsaXBSZWN0OwogICAgIH0K
IAotICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAg
IGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9s
bFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0gICAgICAgIGlmIChsYXllci5zY3Jv
bGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBsYXllci5z
Y3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBsYXllci5zY3JvbGxX
aWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGxheWVyLnNjcm9s
bFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxh
eWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkp
Ci0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGxheWVyLnNjcm9sbEhlaWdo
dCgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigp
OworICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFi
bGVMYXllcikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54
KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zm
c2V0KCkueSgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAm
JiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRo
ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICBpZiAobGF5ZXIu
cmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0
KCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCk7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUg
PSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5p
c01vY2tUaGVtZSgpICYmIGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAg
aWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFz
VmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1h
Y1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1l
KTsKLSAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqbGF5ZXIu
dmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXRE
aXJlY3Rpb25SVEwoKnNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSkpCiAgICAg
ICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxiYXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOwogICAg
ICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAK
aW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZmN2YwMDZmMjA4NWZhOWFiNDI2Yy4uMzQ3MDZkNjZl
ZTAwMzM1MzAxZWEwNmQxMDI1NDIxNTc3MzY2OGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMjksOCArMzI5LDggQEAgdm9pZCBSZW5kZXJXaWRn
ZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJl
Y3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0K
IAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKQotICAgICAgICBs
YXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50
KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgaWYgKGhhc0xheWVy
KCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmNhblJlc2l6ZSgp
KQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250
ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJl
Y3QpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBp
c092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYzA1M2E0
ZGRhMjAwOGVmZDdhNjY4OGQzNDQ4ZmZiZjNiZmNiZTFmNS4uODJiOWJlNGE3MGFlOTdkODVmNmM5
MWQyNDEzY2U2YmJmNzgwZTc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApA
QCAtMTU1LDYgKzE1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgpAQCAtMTkwNiw3ICsxOTA3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50
ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRv
dWIKICAgICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkp
CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
LSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKKyAgICAgICAgc2Nyb2xsYWJs
ZUFyZWEgPSBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfQogICAgIAogICAgIGlmICghc2Ny
b2xsYWJsZUFyZWEpCkBAIC0yOTAxLDcgKzI5MDIsNyBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxl
QXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0
CiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpKQogICAgICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gubGF5ZXIo
KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LnNjcm9sbGFibGVMYXll
cigpOwogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVU
eXBlRXJyb3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBiZjY4YTcx
NDVkYTg5OGVkNGU3Y2U3NGU2MTU3ZjAwYmQ3MGY3YTYzLi5hNGU3NjNiNDU4OTJiOTkwYjMzYzY2
MzhkOWQwMmY2OTIwYjhmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAt
MTQ1LDcgKzE0NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFj
a2VyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVt
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjAzNSwxMCArMjAzNSwxMiBAQCBib29sIFdlYlZpZXc6
Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwogICAgICAgICBJbnRTaXplIGxvZ2ljYWxT
Y3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0YVkgKiBzY2FsZUZhY3Rvcik7
CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CisgICAg
ICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyID0gbnVsbHB0cjsKICAg
ICAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUgJiYgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVu
ZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVu
Y2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Ny
b2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllcikgewpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg4
NDNiOTgyZDZiYjhhMTM5Y2NmZTVjNTcxNDBlYmJiN2IzZGI1MGQuLjc5ZTQyNWNjOTA2NmQ0Mzlh
MGI1MDFjOWY0Zjg2NTQwY2MwMzAzZGUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0wOC0x
NCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIg
aW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBSZW1v
dmUgdHdvIHdyb25nIGV4cGVjdGF0aW9ucywgdGhhdCB3aWxsIGxlYWQgdG8gbGF5b3V0IHRlc3QK
KyAgICAgICAgZmFpbHVyZXMgKHVucmVsYXRlZCB0byB0aGlzIHBhdGNoKS4KKworICAgICAgICAq
IGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVu
ZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3Rl
ZC50eHQ6IFJlbW92ZWQuCisKIDIwMjAtMDgtMTQgIEhlY3RvciBMb3BleiAgPGhlY3Rvcl9pX2xv
cGV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbIG1hY09TIGlPUyBdIGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvdXNlci10aW1pbmcvbWVhc3VyZV9uYXZpZ2F0aW9uX3RpbWluZy5odG1s
IGlzIGEgZmxha3kgZmFpbHVyZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4
dAppbmRleCA5MzZiZWQyNWMyNzE3ZjUyMWRjNTZkNTMyNjMwOWRiODY5NGEyNjE1Li45YTM0Njc1
ZDFmNDYyNzQ3MDBiZDQ3ZjJiZGZlYzUyN2NjYzFiNjljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMt
ZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMSwxNCArMSwxNCBAQAogQ09OU09MRSBNRVNTQUdFOiBN
YWluRnJhbWVWaWV3OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdFOiBN
YWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBS
ZW5kZXJMYXllcjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKK0NPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9s
bGJhcgogQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFy
ZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNj
cm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc1VwSW5WZXJ0aWNh
bFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRWZXJ0
aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1v
dXNlTW92ZWRJbkNvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09M
RSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVkVmVydGljYWxTY3Jv
bGxiYXIKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVu
dEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFy
ZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhCiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5p
bWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5k
ZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDg1YjJhMzhjYTI3M2M2ZDcwMDY4Nzg2ZTMzOWRmNzQxZTY0Y2E0ZTkuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50
eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVBBU1MgY291bnQgaXMgMAotUEFTUyBj
b3VudCA8IDYgaXMgdHJ1ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNU
IENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9hbmltYXRp
b25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5n
LXVwZGF0ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIy
YTM4Y2EyNzNjNmQ3MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9hbmlt
YXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKKysr
IC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVBBU1MgY291bnQgaXMgMAotUEFTUyBjb3VudCA8
IDYgaXMgdHJ1ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBM
RVRFCi0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406623</attachid>
            <date>2020-08-14 15:03:10 -0700</date>
            <delta_ts>2020-08-14 16:54:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200815000307.patch</filename>
            <type>text/plain</type>
            <size>339512</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY1ODE2MGFmM2NjYTY0
NDI4ZTcyMDM3M2JlZGNhNTRlZDE5OTRlNy4uNjcyM2IxZTg4MTcxOTdmNGE1ZDdlNjM5MjQ4OWE5
NTQ3ZDg3YmZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NiBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OmFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6
OnJlbW92ZUxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1
ZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxh
dGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0x
NCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBzdXNwZW5kaW5nIC8gcmVzdW1pbmcgYW4gT2ZmbGluZUF1ZGlvQ29udGV4dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNmNzRmMmUzZThhYmU5ZmM5
OGM1NTA2MjMuLjBjMGE4ZDA1ZjJhYTVlZDY2YmZjNTk5MWMwMTQzN2ExYzFmNDM1ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICAqIFdlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6IFVzZSBSZW5kZXJMYXllcjo6c2Nyb2xs
YWJsZUxheWVyKCkuCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBs
aXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggYTZjYTU0MTBjNDFhZmZlYjFiYjVlZDEw
NmE2YWQxOTNiM2JhZjM3OC4uYzJmNzNiYjJjOWRkN2UyYzcxOTljNDU1MDQxMDU0M2U4ZmI1MzE5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzkxLDYgKzEzOTEsNyBAQCBzZXQoV2ViQ29yZV9Q
UklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5n
L1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGUuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5n
L1JlbmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
aW5kZXggZDE4MDFhYTAxZmU5MjgzMGIzZWE4MjZlNjk3YmRhYjg1ZmM4NGY5Ny4uZWFiZWIwZWJh
MjhmMjA1MjI5MzAyNjY1NWZiMDcyMmY0ODk5MjRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxMjgs
NiArMjEyOCw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKIHJlbmRlcmlu
Zy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBiYzY4ODFiZTgyMDhlMjBkMzNlMjQ2ZDI1NmU3NjliZmQyN2Y0ZjBhLi5hOWM3OGNkMzFi
MDQyNzhiOWJjOTY0Y2I5OGNkMzY4Yjc3ZmU1MDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDgsNiArMzA4LDcgQEAKIAkJ
MEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQjBCMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJl
bmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1ODBDRjkwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9z
aXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwQ0ZCMEYxMkRFOUIw
MDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBMTE0OTY5Mzkx
MDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLzsgfTsKIAkJMEY1ODBGQUYxNDk4
MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFu
aW1hdGlvblV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU5MjUsNiArNTkyNiw4
IEBACiAJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkIwRjEyREU5
QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQjBGMTNBQjlCMDA1MUQ2
ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkExMTQ5NjkzOTEw
MEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJUaWxlZEJhY2tp
bmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQUUxNDk4MDBE
NDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI4Nzc2LDYgKzI4Nzc5LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQg
LyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZG
IC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMz
Rjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1ODBDRkMwRjEz
QUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8sCisJCQkJMEY1ODBD
RkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovLAogCQkJCTJE
OTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJ
MkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8sCiAJCQkJ
QkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAqLywKQEAg
LTMzMTM3LDYgKzMzMTQyLDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJERTlCMDA1
MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzQzI0
NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJl
bmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAz
QzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKaW5kZXggMGQ4MzhkNTc0ODFmYjQ3YmQ5ZmUyOWQ5N2E1ZGMwOWFiMWQ4
Y2FiNi4uNTJiNDNhMDgyNmY2YjJhZjBiMzkzZDQwMTAwNzBmN2QwYjMyYzQ1YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgot
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJv
eC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTE2LDcgKzM5MTYsOCBAQCBT
Y3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFy
ZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBi
b3gubGF5ZXIoKTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1
cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MjksNyAr
MzkzMCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
aXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92
ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNT
RVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYm94LnNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1MWVjNDQ0Y2Qu
Ljg4MDRhMTZiZWMxNGNkMDJmMDdhZWZhNjliZjliMTIwNmQyNmQzMWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFzc0NoYW5nZUlu
dmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdt
ZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxh
eWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFy
TGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTMzMiw4ICsxMzMyLDggQEAgdm9p
ZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRU
b3AgPSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVa
b29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9s
bGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDog
QW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1w
ZWRUb3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXIt
PmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xl
YXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkOTdlNjZmOGY4
YWYwNWZhMDI3NzZhMDA4NTBmNWY1NWFlODYxZjNmLi4wODZmNjkzMWMxOGJlMTA5MDJmOWIxNWRk
ZWI3YzNiOWE5NzYxODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcApAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CkBAIC0yNDEyLDkgKzI0MTIsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0
aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAg
ICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNp
ZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAg
ICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBh
Z2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1l
bnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVl
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3Bw
CmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNmMDNhMWJkM2E3M2MyNzEyNzUuLjA0OGYwNTBm
ODFhODYxYzE0NDcxMDQ5Y2Q2MjU1M2RhMDBlOTgxMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3ICsxNzUsOCBAQCBSZW5kZXJNYXJx
dWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBjb25zdAogewogICAgIGlm
ICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPm1h
cnF1ZWUoKTsKKyAgICBBU1NFUlQocmVuZGVyQm94TW9kZWxPYmplY3QoKS0+c2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5
ZXIoKS0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggMmRlNDNkYWQ1YTlmYjZkOGM1
OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uNzIyMjRmOTUxMGE5NjlmN2Q0YWRhYTQxYzY4Yjk1Nzgx
ZWNiOTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5
cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApA
QCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjQ5LDcgKzI0OSw3
IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1cigpCiAgICAgaWYgKCFp
bm5lclRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogaW5uZXJMYXll
ciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpOworICAgIGF1dG8qIGlubmVyTGF5ZXIgPSBp
bm5lclRleHRSZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKCFpbm5lckxheWVy
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRl
eCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBlMGU1MWZmNzYxMzkyLi5iNTAyZWRhYWE5ZGE0
NzhjOWQwNzcxOGY2ODEzNmE2NjUzMDg4YWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQzLDEyICszNDMsMTQgQEAgc3Rh
dGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSog
c3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGlsZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+
bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51
bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNI
YW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxv
Y2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRh
LmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdX
YXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRp
ZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAg
ICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGF1
dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGJveExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9j
aXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEu
aGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxp
bmdXYXNIYW5kbGVkID0gYm94TGF5ZXJTY3JvbGxhYmxlLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGll
ZEV2ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyU2Ny
b2xsYWJsZSwgd2hlZWxFdmVudCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChz
Y3JvbGxpbmdXYXNIYW5kbGVkKSB7CiAgICAgICAgICAgICAgICAgc3RvcEVsZW1lbnQgPSBjdXJy
ZW50RW5jbG9zaW5nQm94LT5lbGVtZW50KCk7CkBAIC0xNTY4LDcgKzE1NzAsNyBAQCBPcHRpb25h
bDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgYm9vbCBzaAogICAgICAgICBib29sIGluUmVzaXplciA9IGZhbHNlOwogICAgICAg
ICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwgdGhlIHJlbmRlcmVyIGhl
cmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRzIHNob3dpbmcgdGhlIHJl
c2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCi0gICAgICAgICAgICBpZiAoYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVy
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVy
TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCkpIHsKICAgICAgICAgICAg
ICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50
UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6
ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0
aEVhc3RSZXNpemVDdXJzb3IoKTsKQEAgLTE4MTIsMTIgKzE4MTQsMTQgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBs
YXRmb3JtTW91c2UKIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1fY2xpY2tOb2RlLT5yZW5k
ZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkgOiBudWxs
cHRyOwogICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChtb3VzZUV2ZW50Lmhp
dFRlc3RSZXN1bHQoKS5sb2NhbFBvaW50KCkpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+aXNQ
b2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgewotICAgICAgICBsYXllci0+c2V0SW5S
ZXNpemVNb2RlKHRydWUpOwotICAgICAgICBtX3Jlc2l6ZUxheWVyID0gbGF5ZXI7Ci0gICAgICAg
IG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IGxheWVyLT5vZmZzZXRGcm9tUmVzaXplQ29ybmVy
KGxvY2FsUG9pbnQpOwotICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNj
cm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
LT5pc1BvaW50SW5SZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcmVzaXpl
TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgICAgICBtX29mZnNldEZyb21SZXNpemVD
b3JuZXIgPSBzY3JvbGxhYmxlTGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2lu
dCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwpAQCAtMTkxOCwxMCArMTkyMiwxMCBAQCBTY3JvbGxh
YmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYShOb2RlKiBub2Rl
KQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGF5ZXIgPSByZW5kZXJlci0+ZW5jbG9zaW5n
TGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXllciB8fCAhbGF5
ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObykpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CiAgICAgICAgICAg
ICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUwYzFkNGVlYjgzNDhlNzllYWJiMmEx
Li44NzE5YmEwMzY1NmJhNzg3ODk0YjM1NWUxZTUwMzQ0NWEwOWUyMmQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKQEAgLTgzLDcgKzgzLDcgQEAgY2xhc3MgUGxhdGZvcm1Ub3VjaEV2
ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3Mg
UmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBTY3JvbGxiYXI7CkBAIC01NTAsNyArNTUwLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9z
dmdQYW4geyBmYWxzZSB9OwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fcmVzaXplTGF5ZXIgeyBudWxs
cHRyIH07CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBtX3Jlc2l6ZUxheWVyIHsgbnVsbHB0
ciB9OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fY2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50
OwogICAgIGJvb2wgbV9ldmVudEhhbmRsZXJXaWxsUmVzZXRDYXB0dXJpbmdNb3VzZUV2ZW50c0Vs
ZW1lbnQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGY5YjFhNWQ3
MTViNzU0NzI5NDI4NTg5YWU1ODFlNjljNWI3ZGUxMWMuLjJlYTBmMjg1YmRkZWJlZTY5NmM5Mzc3
ODc1MjAwNWFmZmM2NmQzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTc3LDkg
Kzc3LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU2Miw3ICsyNTYyLDggQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlm
ICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRo
aXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5zY3Jv
bGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIo
KS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zODQwLDEwICszODQxLDEwIEBAIFNjcm9sbGFibGVBcmVhKiBGcmFtZVZp
ZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvKiBsYXllciA9IG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7
Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAgLTQzMTgsOCArNDMxOSwxMCBA
QCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5w
YXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCBMYXlv
dXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsgfSwgc2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gPyBSZW5k
ZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luIDogUmVuZGVyTGF5
ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2libGVPcmlnaW5Pbmx5LCBldmVu
dFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgIHJvb3RMYXllci0+
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlv
ciwgcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByb290TGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwg
ZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQ
YWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2Iw
ZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLmRiMWE0ZWJkZWQyZmFkZDFmZmYwYjViZGIyYTk4
MDA0MWRmYWY4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmln
YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRp
cmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVu
ZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShk
eCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRl
ckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIp
OworCisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3Np
bmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBlbmNsb3NpbmdMYXllclNj
cm9sbGFibGUtPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4
IDliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNjZjIxNTQwYWZmNDMuLmQxNjI2ZWMzYzI3YjFm
YjYzZWZiNTNhODBmMDJlNmM4NjgwNmVjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tCkBAIC04MTksMTQgKzgxOSwxNiBAQCB2b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0
aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlm
ICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+
KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghbGF5
ZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1
cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2Vy
U2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0g
ICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBs
YXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNj
cm9sbFR5cGUgPSBsYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBsYXllci0+c2V0Q3Vy
cmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYyk7CisgICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9s
bFR5cGUpOwogCi0gICAgbGF5ZXIuZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2Ug
YWx3YXlzIGNhbGwgdGhpcz8KKyAgICBsYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBT
aG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9s
b2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tCmluZGV4IGMwOTMwYjYzNDk1ZTcxODE1OTkxYTQwNmE0ZDY2NWEyN2JhNzcxNGIuLmY4
NDNlOWUzZmM3ZjVjM2NhYTE4NjRlNWVlZmM3ODU1ZWNkYTE0MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTUyLDcgKzUyLDcgQEAKICNpbXBvcnQg
IlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisjaW1wb3J0ICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RCb3guaCIKICNpbXBvcnQg
IlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtNzgyLDcgKzc4Miw3
IEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94
JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsK
KyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogICAgIAogc3RhdGljIENvbnRh
aW5lck5vZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUq
IG5vZGUsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIw
MDM3NzgzYTNlMjlhZmQ3ZmRkZTQzLi5hZWU1MGIwOWE5MzBkYzM5NTUzMDZmZWMxNDUwY2I3N2Fk
YzcwMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBA
IC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6
c2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJs
b2NrCiAKIHZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVu
ZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJU
KG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgbV9yZW5kZXJWaWV3LnNjcm9s
bGFibGVMYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CiAgICAgc2V0U2VsZWN0
aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKIH0KIApA
QCAtMzE5LDggKzMyMCwxMCBAQCB2b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5U2VsZWN0aW9uKGNv
bnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlCiAgICAgICAgIGN1cnJl
bnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlOjpJbnNpZGUpOwogICAgIH0KIAotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9
IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xl
YXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAh
PSBSZXBhaW50TW9kZTo6Tm90aGluZykgeworICAgICAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgbV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigp
LT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworICAgIH0KIAogICAgIC8vIE5vdyB0
aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmpl
Y3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCiAgICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmpl
Y3RzIGxpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA2
YjUzY2JhODVjOGU5ZGM1OTcxNWI2MzhjYWU1NzVmODBlNDhmOTU0Li5hNjdjYjIyYzIzZDMzZjMz
OGM4YTBhNjY0ZmViNTkyZTBmOTA2YzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTU4LDcgKzU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVk
Rmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUzLDcg
KzU1Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NU
b1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKTsKLSAg
ICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAg
ICAgICBpZiAoYmxvY2stPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgYmxvY2stPnNj
cm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKICAgICAgICAg
YmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBAIC01ODQsOCArNTg1LDgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5ZXIoKSkKLSAgICAg
ICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgaWYgKHNjcm9s
bGFibGVMYXllcigpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTA5
LDEyICsxMTEwLDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgaWYgKHB1c2hlZENsaXAp
CiAgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8sIHBoYXNlLCBhZGp1c3RlZFBhaW50
T2Zmc2V0KTsKIAorICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybjsK
KwogICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVs
bCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgLy8gei1pbmRl
eC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRo
YXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9i
b3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwg
cGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93
Q2xpcCgpICYmIGxheWVyKCkKICAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlz
KSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVy
KCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0
KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFp
bnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBz
bmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpw
YWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDczLDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
CiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMoKnRo
aXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0Umln
aHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3NpbmdM
YXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9z
aW5nTGF5ZXIoKSA/IGVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0
cikgewogICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeSgtcGFpbnRPZmZzZXQp
OwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgICAg
ICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxC
b3VuZHMpLCAmbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVyLT5yZW5kZXJCb3goKS0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0g
bG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyU2Nyb2xs
YWJsZS0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5pc0JveCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVyU2Nyb2xsYWJsZS0+cmVu
ZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGdhcFJlY3RzQm91bmRz
KTsKKyAgICAgICAgICAgICAgICBsYXllclNjcm9sbGFibGUtPmFkZEJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC0yMDAxLDcgKzIwMDUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZs
b3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBpZiAo
IXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
bGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQo
bG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3Vs
dCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNj
dW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVz
dCgpIGNvbnN0CkBAIC0yNDk4LDkgKzI1MDUsMTEgQEAgaW50IFJlbmRlckJsb2NrOjpiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW4K
ICAgICAgICAgLy8gKHRoZSBjb250ZW50IGluc2lkZSB0aGVtIG1vdmVzKS4gIFRoaXMgbWF0Y2hl
cyBXaW5JRSBhcyB3ZWxsLCB3aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMgdGhlbS4KICAgICAgICAg
Ly8gV2UgYWxzbyBnaXZlIHVwIG9uIGZpbmRpbmcgYSBiYXNlbGluZSBpZiB3ZSBoYXZlIGEgdmVy
dGljYWwgc2Nyb2xsYmFyLCBvciBpZiB3ZSBhcmUgc2Nyb2xsZWQKICAgICAgICAgLy8gdmVydGlj
YWxseSAoZS5nLiwgYW4gb3ZlcmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQgaGFzIGhhZCBzY3JvbGxU
b3AgbW92ZWQpLgotICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGxheWVyKCkgJiYgKGxh
eWVyKCktPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gKGxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpICE9
IDApCi0gICAgICAgICAgICA6IChsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgbGF5
ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDApKSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgp
ICYmICFpc1J1YnlSdW4oKSk7Ci0gICAgICAgIAorICAgICAgICBib29sIGhhc01hcnF1ZWUgPSBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCkgOiBudWxscHRy
OworICAgICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkg
PyAoc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSkgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCkt
Pmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpKSA6IGZhbHNlOworICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKGhhc01hcnF1
ZWUgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
IDogaGFzSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFp
c1J1YnlSdW4oKSk7CisKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9y
ZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rp
b24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggZTIx
M2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uYzUxYzUwY2U1N2JkYWUwMDM1
NGFkZDI5NDJkMWNjZTc0OGRjMzgyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4
aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zNDks
NyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5h
dXRvV3JhcCgpICYmIGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFs
IG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAg
ICAgIGlmIChsYXllcigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVl
KCktPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgp
LT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDYxMjM3NmJhYWQ2
MWJkNjJmYTNjZWRhOGRkYTJhYTI2NDNiNzk5ZGIuLmQxMjhkMTRhNjhmMjQ3MGY5YTg2OTYxYmZk
OTUyNWU3MjlmMThiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCkBA
IC01OCw4ICs1OCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogI2luY2x1ZGUgIlJlbmRl
cklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxl
Q2VsbC5oIgpAQCAtMzE5LDExICszMTksMTEgQEAgdm9pZCBSZW5kZXJCb3g6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAog
ICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBz
Y3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAg
IC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9
IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3Jv
bGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgaWYgKGhhc092ZXJm
bG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5l
ZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7CisgICAgICAgIFNj
cm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBv
c2l0aW9uKCk7CiAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVj
dGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgICAgIHNjcm9sbFBv
c2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIHNjcm9sbGFibGVM
YXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAg
IH0KIAogICAgIC8vIE91ciBvcGFxdWVuZXNzIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aXRob3V0IHRy
aWdnZXJpbmcgbGF5b3V0LgpAQCAtNTQyLDggKzU0Miw4IEBAIExheW91dFVuaXQgUmVuZGVyQm94
OjpjbGllbnRIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJl
dHVybiBsYXllcigpLT5zY3JvbGxXaWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAm
JiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxXaWR0aCgpOwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywg
dGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3
cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkg
ewpAQCAtNTU1LDggKzU1NSw4IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhl
aWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKICAgICAv
LyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4KICAg
ICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgpAQCAtNTY1LDEyICs1NjUsMTIgQEAgaW50IFJlbmRlckJveDo6
c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsTGVmdCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCku
eCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwog
fQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVk
ZWQoKQpAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWln
aHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoMF9sdSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXImIGxh
eWVyKQorc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllclNjcm9s
bGFibGUmIGxheWVyKQogewogICAgIFBhZ2UmIHBhZ2UgPSBsYXllci5yZW5kZXJlcigpLnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKQEAgLTU4OSwyNiAr
NTg5LDI2IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXIm
IGxheWVyKQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxh
eWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBh
bmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkp
OworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3Jv
bGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Ny
b2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Ny
b2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25p
dG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRv
cigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1lQ
b3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZv
aWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVy
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBv
c2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRl
ckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MDgsMjQgKzgwOCwzMCBAQCBib29s
IFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFt
ZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Ny
b2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxh
eWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0
eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93
WSgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFz
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwg
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogYm9vbCBSZW5kZXJC
b3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNj
cm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WCgp
ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
QXV0bzsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNh
bFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6
b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dp
Y2FsV2lkdGgoKSBjb25zdApAQCAtODM0LDEyICs4NDAsMTIgQEAgaW50IFJlbmRlckJveDo6aW50
cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewot
ICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigp
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKTsKICAgICB9CiAKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
JiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3Zl
cmxheVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogICAg
ICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwogICAgIH0KIApAQCAtODQ4
LDE1ICs4NTQsMTQgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdp
ZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVy
ID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIgJiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewotICAgICAgICBpZiAoc3RvcEVsZW1lbnQp
Ci0gICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8qIGJveExheWVyID0g
c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFib3hMYXllcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzdG9wRWxlbWVudCkK
KyAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOworICAgIHJldHVybiB0cnVlOwogfQog
CiBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3Rv
cEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRCb3gsIGNvbnN0IEludFBvaW50JiB3aGVlbEV2ZW50
QWJzb2x1dGVQb2ludCkKQEAgLTg3OCwxNSArODgzLDE0IEBAIGJvb2wgUmVuZGVyQm94OjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKICAgICBib29sIHNjcm9sbGVkID0gZmFsc2U7
Ci0gICAgCi0gICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwotICAgIGlmIChsKSB7CisgICAg
YXV0byogbGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAobGF5ZXIpIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGlu
ZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwg
aGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURv
Y3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1l
bnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQgPSBsYXllci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBT
Y3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgICAgICBpZiAobGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChk
aXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAg
IHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAt
ODk5LDkgKzkwMyw5IEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0CiAgICAgaWYgKHN0b3BFbGVt
ZW50ICYmICpzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgPT0gZWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlbmRlckJsb2NrKiBiID0gY29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAgICByZXR1cm4gYi0+bG9n
aWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVu
dCk7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgaWYg
KGJsb2NrICYmICFibG9jay0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiBibG9jay0+
bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxl
bWVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05MzIsNyArOTM2LDcgQEAgYm9vbCBS
ZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJl
bmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVM
YXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
CkBAIC05OTEsOCArOTk1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xs
YWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xs
KGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxh
eWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3Vy
Y2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25z
dApAQCAtMTAxNywxMSArMTAyMSw5IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZlcnJlZFdp
ZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICBy
ZXR1cm4geyAwLCAwIH07Ci0KLSAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5z
Y3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZv
ck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTY5LDcgKzE1NzEsNyBAQCBib29sIFJlbmRlckJv
eDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dyb3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZz
ZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhh
c0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsaW5nTWF5
UmV2ZWFsQmFja2dyb3VuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4g
Zm9yZWdyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3Jv
dW5kT2JzY3VyYXRpb25UZXN0TWF4RGVwdGgpOwpAQCAtMTg4OCwxMCArMTg5MCwxMCBAQCBMYXlv
dXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgbG9j
YXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6ZSgp
IC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3AoKSAr
IGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBpZiB3
ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKICAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0
Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKLSAg
ICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChy
ZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkp
OworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNj
cm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxh
YmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNWRkZmMzMTE4NDdiYWZkOTNmMzM5NDhjMTEy
NWJlZWU4YzI4Mzk4Ny4uYzBkYTdlYTExMzRmOTY2MDM1OGM5OTIxM2RkMzNhODZmZTVhNTYwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpA
QCAtNDkwLDggKzQ5MCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlj
a3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0
UG9pbnQgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250
YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAg
ICAgICAgRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlw
cGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7
Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQot
ICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Ig
Kz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgm
ZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgY29udGFpbmVyTG9jYXRp
b25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9u
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0
Q29udGFpbmluZ0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yKTsKQEAgLTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlm
IChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRp
dmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5i
b3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAg
ICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9
IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgp
OworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAm
JiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAg
IHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKICAgICB9CiAg
ICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3Jt
ZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9u
KHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0OCwxMSAr
NTQ4LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVj
dEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWlu
aW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0
UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQ
b2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVy
LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgICAgIHNjcm9sbE9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVM
YXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQg
PSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNs
b3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5s
YXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9z
aW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3gu
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICAgICAg
c2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAg
ICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChzY3JvbGxPZmZz
ZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQueSgpKSk7CiAgICAgICAgIHJl
dHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQ0LDggKzg0NiwxMCBAQCB2b2lkIFJlbmRlckJv
eE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjbwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBwYWludCByZWN0IHRv
IHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRlcnMgYXQgdGhlIGVuZHMu
CiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtdGhpc0JveC5zY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigp
LT5zY3JvbGxXaWR0aCgpICsgYlJpZ2h0KTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0
SGVpZ2h0KGJvcmRlclRvcCgpICsgbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0
b20oKSk7CisgICAgICAgIGF1dG8gc2Nyb2xsV2lkdGggPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpIDogMDsKKyAgICAgICAgc2Nyb2xsZWRQYWlu
dFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBzY3JvbGxXaWR0aCArIGJSaWdodCk7CisgICAgICAgIGF1
dG8gc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsSGVpZ2h0KCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQo
Ym9yZGVyVG9wKCkgKyBzY3JvbGxIZWlnaHQgKyBib3JkZXJCb3R0b20oKSk7CiAgICAgfQogICAg
IAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgYmFja2dyb3VuZENsaXBTdGF0ZVNhdmVy
KGNvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IDk5ZTgyNGQxMzU3MDYzOWUzZTRkNDQzYzk2NWYxNDRlOWQ0OGY0NDYuLmRhNzQ3OTM3
YWNjMzA2ZWQwYjRhNDIxMjViNDY2ZTQ0NDU0NzIyMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjg3LDE2ICsyODcsMTEgQEAgc3RhdGljIFRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBSZWN0cyYgY2xpcFJlY3Rz
KQogCiAjZW5kaWYKIAotc3RhdGljIFNjcm9sbGluZ1Njb3BlIG5leHRTY3JvbGxpbmdTY29wZSgp
Ci17Ci0gICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJlbnRTY29wZSA9IDA7Ci0gICAgcmV0
dXJuICsrY3VycmVudFNjb3BlOwotfQotCiBERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKLSAgICA6IG1faXNSZW5k
ZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzUmVuZGVyVmlldygpKQorUmVu
ZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5
ZXJNb2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCisgICAgOiBt
X2xheWVyVHlwZShsYXllclR5cGUpCisgICAgLCBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRlcmVy
TGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKICAgICAsIG1fZm9yY2VkU3RhY2tpbmdD
b250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc01lZGlhKCkpCiAgICAgLCBtX2lzTm9y
bWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBtX2lzQ1NTU3RhY2tpbmdDb250ZXh0KGZhbHNlKQpA
QCAtMzA0LDE5ICsyOTksMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fek9yZGVyTGlz
dHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwg
bV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCi0gICAgLCBtX2luUmVzaXplTW9kZShmYWxz
ZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2Up
CiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVy
Zmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVw
YWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9o
YXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNE
aXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2Vj
dGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAs
IG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQpAQCAtMzMwLDE1ICsz
MjEsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0
KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3Bv
cnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkK
LSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNl
KQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
LCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTMsNTMgKzMz
NSwyMiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxk
QmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJc0NTU1N0YWNraW5nQ29udGV4dChzaG91bGRC
ZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKIAotICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNo
b3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigp
KQotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
ID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgLy8gbV9pc1NlbGZQYWludGluZ0xheWVyIGlz
IGluaXRpYWxpemVkIGluIFJlbmRlckxheWVyU1ZHL0hUTUwsIGV2ZW4gdGhvdWdoCisgICAgLy8g
aXQgYmVsb25ncyB0byBSZW5kZXJMYXllciAtLSB3ZSBjYW5ub3QgY2FsbAorICAgIC8vICJtX2lz
U2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7IgorICAgIC8v
IGhlcmUsIGluIHRoZSBjb25zdHJ1Y3RvciAtLSBzaW5jZSB0aGUgUmVuZGVyTGF5ZXJTVkcvSFRN
TCBjbGFzc2VzIGFyZW4ndCBpbml0aWFsaXplZCB5ZXQuCiAKICAgICBpZiAoIXJlbmRlcmVyKCku
Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZh
bHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2
ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2
YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1l
bnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBpZiAoIW1fc2Nyb2xsUG9z
aXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcigpCiB7Ci0gICAgaWYgKGluUmVzaXplTW9kZSgpKQotICAgICAgICByZW5kZXJl
cigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKLQotICAg
IEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9s
bFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3Jv
bGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1v
dmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVz
aXplcigpOwotCiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRv
UHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxOCw2ICszNjksMjAgQEAgUmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcigpCiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFmaXJzdENoaWxkKCkp
OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5
ZXIoKQoreworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXll
cjo6c2Nyb2xsYWJsZUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6
OmFkZENoaWxkKFJlbmRlckxheWVyJiBjaGlsZCwgUmVuZGVyTGF5ZXIqIGJlZm9yZUNoaWxkKQog
ewogICAgIFJlbmRlckxheWVyKiBwcmV2U2libGluZyA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hp
bGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CkBAIC05MzUsNyArOTAwLDEwIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBp
c1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZs
YWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmFwcGx5UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAg
ICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkp
OwpAQCAtOTQzLDcgKzkxMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xl
YXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMo
KTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmZsb3dDb250cm9scygpKSB7CiAgICAg
ICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlmIChnZW9tZXRyeU1hcCkK
ICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9t
ZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBAIC05NTIsNyArOTIwLDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlN
YXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNl
dEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCiAgICAgICAg
ICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwogICAgICAg
ICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZz
ZXRGcm9tUm9vdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAyOSwxMyArOTk3LDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdl
b21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25z
KGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9z
aXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmICht
X21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNj
b3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0g
ICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1
ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkpCisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlTWFycXVlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhl
ZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3Rz
Vmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhp
cyk7CkBAIC0xMTE1LDkyICsxMDc4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50
UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQot
ICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChV
c2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9t
ZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAo
VXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwg
bnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUg
YW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRo
ZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JX
aXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4g
ZmxhZ3MpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRo
ZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQotICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBz
dGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgotICAg
IHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBu
byB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5v
IHBvaW50IHJlY29tcHV0aW5nCi0gICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJl
IGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KLSAg
ICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgotICAgIGlmICghbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0g
ICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNl
c3Rvcik7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3Is
IEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkp
Ci0gICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
Lmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQotICAgICAgICBmbGFncy5hZGQoSGFz
U2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXApOwotICAgIAotICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9
IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBm
bGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKLSAgICBib29sIGlzVmlz
dWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKLSAgICBib29sIHNob3VsZFB1c2hB
bmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0
cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOwotICAgIGlmIChzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0Fu
Y2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJl
Y3RzKSB7Ci0gICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFp
bnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCi0gICAgICAgIGlmIChpc1Zp
c3VhbGx5RW1wdHkpCi0gICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOwotICAgICAgICBl
bHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ug
d2FsayBkb3duIHRoZSB0cmVlLgotICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5k
ZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwotICAgIH0gZWxzZSBp
ZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAg
ICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZs
aXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNp
dGlvbnMgZnJvbQotICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRo
aXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRo
ZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCi0gICAg
ICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KLSAgICAgICAg
QVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCku
cmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7
Ci0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCBy
ZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigp
Lm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
KSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQt
PnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKLQot
ICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0
cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQotICAgIC8vIG9mIGFu
IG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJv
cGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwotICAgIC8vIHVwZGF0ZWQgYWJvdmUuCi0K
LSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGlu
Z3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkp
OwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNG
b3JBbGxNYXJrZXJzKCk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogCiB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUoKQpAQCAtMTY5MSwzNCArMTU2OCwxMCBAQCBi
b29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXll
clBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBkb3duY2Fz
dDxSZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRpb25PZmZzZXQoKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xs
IG9mZnNldC4KLSAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVudDsKLSAgICBpZiAocmVu
ZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRpb25lZFBhcmVudCA9IGVu
Y2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkp
KSkgewotICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0
aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgotICAgICAgICBp
ZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9s
bFBvc2l0aW9uKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJl
bmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlv
bmVkUGFyZW50LT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQg
PSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9m
ZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOwotICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0g
cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50
KCktPnNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29u
dGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBh
cmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfQogCi0gICAgaWYgKGhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewotICAgICAgICBpZiAoIW1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3Jv
bGxpbmdTY29wZSkKLSAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRT
Y3JvbGxpbmdTY29wZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAg
ICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAg
ICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMo
bG9jYWxQb2ludCk7CiAKICAgICBib29sIHBvc2l0aW9uT3JPZmZzZXRDaGFuZ2VkID0gZmFsc2U7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTE4NDAsODYg
KzE2OTMsMjggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyKQotewotICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVt
ZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghb3duZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsK
LX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVC
b3VuZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29u
c3QKIHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdM
YXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwog
CiAgICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpO
bykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVS
ZW5kZXJMYXllcihsYXllcik7Ci19Ci0KLVJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAotewotICAgIFJlbmRlclRy
ZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGU7Ci0KLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVy
ZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMp
OwotICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRM
YXllcikpCi0gICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAgIH0KLQotICAgIHJldHVy
biBudWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5k
aW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0lu
c2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jl
c3MoKTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgYXV0byogb3duZXJSZW5k
ZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW93bmVyUmVuZGVyZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0dXJuIG93bmVyUmVuZGVy
ZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ3LDMzMSArMjI0Miw2IEBA
IExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0
VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1
bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2li
aWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRp
bmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlz
VmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0
KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYg
KHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0j
ZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRm
b3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJh
dGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdl
YktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNo
RXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVt
ZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAg
aWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOwot
ICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0KLS8vIEZJWE1FOiB0aGlz
IGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVy
Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9z
aXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6
IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVy
TGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0
b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGlj
IGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0g
ICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDov
L214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9i
cm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAg
aW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBp
ZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWRE
ZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBh
ZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0
aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1
c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0
YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdo
dCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJ
bnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93
biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMg
b3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGlj
IEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQ
b3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAg
ICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBl
bHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRp
b247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJj
ZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUg
aWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdo
dCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0
SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRh
KGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNp
YmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHko
Y29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewot
ICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkK
LSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0
eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9m
ZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBz
Y3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVh
KQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhp
cyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0
IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0
ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJl
bWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVy
ZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdl
cmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3Jv
bGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGlj
aCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4K
LSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwot
ICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2Ug
ZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0
IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBv
c2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
WFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBw
b3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24o
cG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAg
ICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAg
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVk
ID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9t
UG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9m
ZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBz
Y3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5l
ZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFt
cGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRp
b24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBz
Y3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNj
cm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNl
dEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZz
ZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQot
ICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwot
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJl
YW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8
IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9s
bFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRp
b24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgp
KSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0
ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAg
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
SXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBz
ZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZz
ZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNl
dC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0
V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNj
cm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBuZXdP
ZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAg
IH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQg
YSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1
c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJs
eSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgot
ICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAg
ICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247
Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBV
cGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25s
eSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBX
ZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8g
YSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZp
ZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsK
LSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3Qg
dXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVW
aWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5n
IGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFk
eSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXll
ciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXll
cnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5n
IHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgot
ICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRp
b24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdo
aWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8gc28g
dHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCi0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgp
KQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBk
YXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNs
aXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFn
ZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBG
cmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
OwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNj
cm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7
Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVw
YWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVw
YWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQg
PSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQot
ICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9j
YWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5l
dmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7
Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVw
ZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBh
aW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9
Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0g
ICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2No
ZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50
LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAg
ICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hh
bmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVu
dHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRo
aXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNj
cm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3Ji
aWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODE2LDMwICsyMjg2LDMzIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVS
ZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7
CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5v
KTsKICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCiAgICAgaWYgKGFsbG93
c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlz
LT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisK
ICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0
IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAg
ICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkg
dGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEV4
cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QoYWJz
b2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAg
ICAgICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIg
Ym94LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0
CiAgICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFy
LiBTbyB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUg
cG9zaXRpb24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQ
b2ludCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4
cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJC
b3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgp
KTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVy
Qm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0
aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZElu
dFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9s
bE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMo
KSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAg
IFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNsYW1w
U2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUo
cm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgICAgICBpZiAoY2xh
bXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8IHNj
cm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
b2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAg
ICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAg
ICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVzZVNtb290aFNjcm9sbGlu
ZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgYW5p
bWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAgc2V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7
CiAgICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Ny
b2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwogICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0
Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwogICAgICAgICAgICAgbmV3UmVjdCA9IExh
eW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9j
YWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwpAQCAtMjg1Nyw3
ICsyMzMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBM
YXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgICAgICAgICAvLyBJ
ZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVu
dCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2Vk
U2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLSAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6
TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVj
dCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGlu
c2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCiAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3Qu
bG9jYXRpb24oKSkpOwpAQCAtMjg3Myw4ICsyMzQ2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91
bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3Bh
Z2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVu
Y2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byog
ZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVy
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBD
b252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVudCBm
cmFtZSdzIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICBuZXdSZWN0ID0gZnJhbWVWaWV3
LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0ludFJlY3QobmV3UmVj
dCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTog
aWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBwb3Np
dGlvbjpmaXhlZC4KQEAgLTI5MzEsMjQgKzI0MDYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNp
ZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNp
ZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVu
dENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5l
ciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1h
eSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0Fu
Y2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkg
ewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAg
ICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBk
YXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRv
IG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9s
bGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50
c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAg
ICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRl
VHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBv
c2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9z
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKK0xheW91dFJlY3QgUmVuZGVyTGF5
ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
TGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewog
ICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkgJiYgaW5zaWRlRml4ZWQpIHsKQEAg
LTMwMjYsMTE1NSArMjQ4NCw5NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9F
eHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheQogICAgICAgICAv
LyBJZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCBkb24ndCBib3Ro
ZXIgdHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxpZ25tZW50cyB3aWxsIHdvcmsuCiAgICAgICAg
IHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhhdmlvcihhbGlnblkpOwog
ICAgICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNl
bnRlcikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpO
b1Njcm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCi0gICAgICAgIC8v
IElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVk
IHBhcnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0
UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxZID0gU2Ny
b2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwotICAgIC8vIElmIHdlJ3Jl
IHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3Qg
aXMgZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmln
Z2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCi0g
ICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nl
c3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9z
ZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc2Nyb2xsWSA9
IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwotCi0gICAgLy8gR2l2ZW4g
dGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KLSAgICBMYXlvdXRVbml0
IHk7Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3Jv
bGwpCi0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9
PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4
cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Ny
b2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAg
eSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5o
ZWlnaHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0g
ICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUo
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBv
c2l0aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24g
PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9u
SW5XaW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9j
dW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29u
c3QKLXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNl
IHRoZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5
IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQg
dG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBv
biBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVz
aXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVy
LT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25z
LiBEbyB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwg
YmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNh
c3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1
bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5l
dmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxv
YXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAg
IGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhl
dnQucG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFi
c29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09m
ZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0
LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0
LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBM
YXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpv
b21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNp
emUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5r
VG8oY3VycmVudFNpemUpOwotICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmco
bWluaW11bVNpemUpOwotICAgIAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBM
YXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSkgewotICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53
aWR0aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xk
T2Zmc2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2Ug
PSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRU
byhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxl
ZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlz
Qm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6
aW5nOjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCku
cmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVu
Y2Uud2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVs
ZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUg
dGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29t
RmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXIt
Pm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAg
ICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0g
KGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5k
UGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZh
Y3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSks
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXpl
OjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBp
bXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRl
cmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAg
ICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVp
Z2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJl
bmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VI
ZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNl
SGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAg
IH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFy
IDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNz
YXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0
KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0K
LQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAot
ewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25S
b2xlOjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVu
dFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xs
YmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJ
bnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAm
JiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9s
bGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxl
U2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24o
KSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lk
dGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2Uu
aGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0K
LSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRo
aXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNo
YWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxP
ZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0Lnko
KSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQu
eSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAg
c3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDAp
Ci0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBp
ZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVT
aXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsK
LSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0
IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigp
LmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0K
LQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJS
ZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVj
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmll
dygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9S
ZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxi
YXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJl
bmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QK
LXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUo
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVy
ZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0g
ICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRv
SW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29u
dGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBz
Y3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMt
PmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1Np
emUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQo
c3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7
Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFp
bGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24p
Ci17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFz
b24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3Jv
bGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkp
KQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3Vs
ZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVk
c0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsK
LSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5k
ZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0
aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1
cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xp
ZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25v
d25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVu
dCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIg
Ym94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQot
ICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVp
Z2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1f
dkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtd
KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIg
JiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wg
aGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFy
KG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFy
ID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
ID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpv
bnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAg
ICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewot
ICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBp
cyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAg
ICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAg
IGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZ
KCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNB
dm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRo
ZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkg
KyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAg
ICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQ
b3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVj
dC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xs
YmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJT
aXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJS
ZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNp
emUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAg
ICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlv
bmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsg
eyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXpl
LmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNv
cm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3Jv
bGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlj
a25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAg
ICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVz
cywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlv
bigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0
dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAg
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQo
KSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xs
UmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NF
UlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVl
LCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9s
bFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVs
c2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0Owot
ICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJl
bmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17
Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewot
ICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENv
cm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAg
ICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNj
cm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxl
bWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93
Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAg
ICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJB
Z2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJl
cigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVm
PFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAg
QVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1
YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29s
IGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikg
JiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9T
dHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xs
YmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJl
cikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpj
cmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9y
aWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygp
KQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3Io
cGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5y
ZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFy
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxi
YXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9o
QmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92
ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJh
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Nj
cm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAg
ICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkg
PSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6
b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAg
IH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3Vy
IHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUg
b3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxi
YXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkg
ZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5y
dWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFz
dGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYK
LSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1
c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0
ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAg
ICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZC
YXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xs
YWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17
Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtB
cHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFy
YW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQg
YmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdF
bGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVy
Qm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRv
d25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxl
KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29u
c3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xs
U25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJl
dHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVn
LCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0g
ICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcs
IHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFj
a2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmls
dGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlm
IChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxk
ZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0g
ICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
dkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1f
dkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0K
LQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3Jv
bGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgot
ICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+
aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUlu
dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQm
IGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNv
cm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQ
b2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3Jv
bGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IElu
dFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
Lm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAg
ICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0g
ICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+
c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQot
ICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50
IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJv
eCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0K
LQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChy
ZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBj
b25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQg
d2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdo
dCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17
Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJm
bG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQot
Ci1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9k
ZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1M
YXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5p
dCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91
dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1Jl
Y3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVy
Zmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWln
aHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAg
aW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0g
Ym94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3Vu
ZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxP
cmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3Zl
cmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0g
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewot
ICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xs
c092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAm
JiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50
KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFz
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBh
eGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3Zl
cmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93
ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpT
Y3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFy
cygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxv
d1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRp
b24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3Jp
ZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxl
Lm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVy
ZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Ny
b2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAo
Ym94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFs
T3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0
aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJh
ciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJh
ciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJl
cigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFi
bGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8g
YmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRl
ZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0g
Ym94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2Fs
T3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBh
dXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6
b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsK
LQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0
bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAg
ICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5w
YXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAm
JiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJs
ZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7
Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0
ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxi
YXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQot
ICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6
cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0K
LSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMg
aXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucyku
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxP
ZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBv
ZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4g
aW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8v
IHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVt
IHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNl
dCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFk
anVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5
IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUg
d2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0
aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBv
dmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBt
b3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0
cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxP
ZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNj
cm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50
UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAg
ICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVl
ZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21w
b3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50
OjpCZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBlbHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAw
KQorICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2Ug
dGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxB
bGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOworICAgIGVsc2UKKyAgICAgICAg
c2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKKyAg
ICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRo
ZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgorICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0
LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0
aGUgYm90dG9tLgorICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6
OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1h
eFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAg
ICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKIAot
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29v
cmRpbmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7CisgICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxp
Z25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7
CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGln
bkJvdHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVp
Z2h0KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9y
OjpBbGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3Qu
aGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAgIGVsc2UKKyAgICAgICAg
eSA9IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBMYXlv
dXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAordm9pZCBSZW5kZXJM
YXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKIHsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJl
IG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAgIEludFBvaW50IGN1cnJl
bnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93
VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKKyAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKExh
eW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNpemUoMSwgMSkpLCBmYWxz
ZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTaG91
bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBw
YWludGluZ092ZXJsYXlDb250cm9scykKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBv
dmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNz
IHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBv
biB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcg
cGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQg
d2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5
IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNh
dXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAv
LyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBj
YWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBu
ZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAo
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAg
ICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAg
ICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUg
c2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBsb2Nh
bERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgt
cGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZW5kZXJM
YXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAg
ICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVy
KCkudmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mg
c2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBvaW50IGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlT
Y3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBu
ZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5
b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91
dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0
Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAg
ICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQg
cGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgp
LCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29y
bmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFs
bCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAg
ICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBv
ZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQ
YWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVy
OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJbnRS
ZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJv
bFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIGlmIChtX3Njcm9s
bENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2Rl
Il9zKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2
ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBp
cyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0
KTsKLX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgcmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJ
bWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6Omxv
YWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7
Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAg
ICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1Jl
ZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVz
OwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7
CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3Ry
aW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0
cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBidWls
ZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2F2
ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBj
b3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVy
Q29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAgICAgIGlmIChyZXNp
emVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3Ju
ZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKLSAg
ICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVj
dCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNv
cm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNp
emVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAg
ICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7CisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQorTGF5b3V0VW5pdCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJB
YnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRp
bnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXItPnBh
aW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0
LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNp
emVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4K
LSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMg
b2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJh
ciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAg
ICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAg
bGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFf
bHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qo
c25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAorTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogewotICAgIGlmICghY2Fu
UmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOworICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJm
bG93TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVz
aXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRo
ZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAg
ICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkg
ewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJh
ciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAg
aWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAg
ICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiB2b2lk
IFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRp
b25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRS
ZWdpb25Db250ZXh0KQpAQCAtNDE5MiwxNyArMjU5Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQotewot
ICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJ
bnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQ
YWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExh
eWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAgICBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpjbGlw
VG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIGNv
bnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUpCiB7
CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyMjUsNyArMjYxNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0aW9u
IGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJmbG93
IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBibG9jayBjaGFpbiBzbyB3
ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxheWVyID0gcnVs
ZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5ZXI7
IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlv
ci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50
KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGlmIChw
YWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Nj
cm9sbENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVz
KCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CkBA
IC00NDI3LDcgKzI4MTYsOCBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1
YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wmCiAKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBxdWFudGl6YXRpb24gZm9y
IG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9sbCB0aG9zZQogICAgIC8v
IHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29sIGNvbnRlbnRzU2Nyb2xs
QnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsK
KyAgICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gIXNjcm9sbGFibGVMYXll
cigpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAg
ICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIoKS5m
cmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCkuY2hy
b21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNjcm9s
bGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29taW5n
KSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpOwpAQCAtNDcyMiw4ICszMTEyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJh
cnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAg
aWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50
cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAgICAgICBpZiAoZmls
dGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdt
ZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0
aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODEsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRy
b2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWlu
dGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21l
bnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAgICBzbmFwcGVkSW50
UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKLSAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RFdmVudFJlZ2lvbkZv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJ
bmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikKIHsKICAgICBBU1NF
UlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAgLTUyMzYsNyArMzYx
NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxh
eW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0
QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9T
RG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVM
YXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRl
c3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU0NjcsOSArMzg0NSwxMSBAQCBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExh
eWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNpemUo
KSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9j
YXRpb24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJl
c3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAgICAgICByZXR1cm4gdGhpczsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5o
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24s
IGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1
bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgbW91c2UgcG9z
IGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUgbGF5ZXIuIENoZWNrCkBA
IC01NTQyLDM1ICszOTIyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QK
LXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVu
dCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVz
aXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9
IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29y
bmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVy
UmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAg
ICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAg
fTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJh
Z21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5l
clJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVj
dHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNl
Y3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhp
dFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFn
bWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3Qm
IGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zm
c2V0KQogewpAQCAtNjAxMSwzNiArNDM2Miw2IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6Omxv
Y2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0CiAgICAgcmV0dXJuIGNs
aXBSZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjphZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3Vu
ZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKLXsKLSAgICBtX2Jsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGls
ZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKLXsKLSAgICBmb3IgKFJl
bmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7
Ci0KLSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3Zl
cmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25z
IG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKLSAgICAg
ICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVj
dChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50
ZWQgZm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJlbmRlcmVyKCkucmVw
YWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6aW50ZXJzZWN0c0Rh
bWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIGNvbnN0IExheW91dFNp
emUmIG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgY2FjaGVkQm91
bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUgdGhlIGNhbnZhcyBhbmQg
dGhlIHJvb3QuCkBAIC02MzM3LDIxICs0NjU4LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29t
cG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5o
YXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1f
YmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1H
cmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6
OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8g
bV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBS
ZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4g
cGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29t
cG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygpOwpAQCAtNjM4MiwxMSAr
NDY4OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3Mu
Y29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNl
KTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAg
aWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2Vu
ZGFudCgpKQpAQCAtNjUxMCw4ICs0ODExLDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEJl
U2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXNOb3JtYWxGbG93T25seSgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycygp
Ci0gICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKQorICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGJvb2wgaGFzT3Zlcmxh
eVNjcm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNj
cm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKworICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycworICAgICAgICB8fCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJvdygp
CiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigp
LmlzVmlkZW8oKQpAQCAtNjYyOCw3ICs0OTMzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3Jh
dGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCk7CisgICAgcmV0dXJu
IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IChzY3JvbGxhYmxlTGF5
ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVz
dCogcmVxdWVzdCkgY29uc3QKQEAgLTY2MzgsNyArNDk0Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0
CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3Bh
Y2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRl
cmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVl
c3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY2MywzOCArNDk2OCw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3Qq
IHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJl
cXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cg
YXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAg
ICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFu
ZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3Zl
cmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93
WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRo
YXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJh
ciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
JiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jp
em9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVE
ZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIp
KSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxi
YXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJh
cik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFy
cyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3
aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUg
YnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAm
JiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFi
bGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYm
IG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYm
IG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJs
ZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
fHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93
T25seSgpKTsKQEAgLTY3MTcsNiArNDk5MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAK
ICAgICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hh
bmdlcyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRpcnR5IGJpdHMuIFRoaXMgbG9naWMgY291bGQK
ICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJlc3QuCisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgaWYgKG9sZFN0
eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBvbGRTdHlsZS0+dmlzaWJp
bGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7CiAgICAgICAgIGlmIChv
bGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS51c2VkWkluZGV4KCkg
fHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMDAsMTUgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5w
dXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0
eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgc2Nyb2xsYWJsZUxheWVy
KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJl
aGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAgICAgICBpZiAoIW1fbWFy
cXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4o
dGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7Ci0gICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7CisgICAgaWYg
KHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNyZWF0ZU9yRGVs
ZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KIAotICAgIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAvLyBPdmVybGF5IHNjcm9s
bGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAv
LyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQu
CiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAsMTUgKzUwMjEsMTIgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9yZWZs
ZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7CiAgICAgfQotICAgIAot
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZl
IHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBt
X2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+
c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAg
ICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpIHsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02Nzc5
LDk4ICs1MDQ3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQot
ewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRv
SGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJh
bWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVz
dCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zp
c2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAot
ICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewot
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBh
ZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlm
IChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZv
ciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAg
ICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50
IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJM
RShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCog
YWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAg
ICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNj
cm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVs
bHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkg
OiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MTc4LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJl
bnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRv
KiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAg
IHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5
ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjpp
c1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MjQ4LDExICs1
NDI0LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRT
dHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBzdHJlYW0gPDwgIiAiOwog
Ci0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7Ci0gICAgc3RyZWFtIDw8
ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgewor
ICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5ib3hTY3JvbGxpbmdTY29wZSgpOwor
ICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVy
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBzdHJlYW0gPDwgIiAiOworICAgICAg
ICBzdHJlYW0gPDwgIiAiOworICAgIH0KIAogICAgIG91dHB1dElkZW50KHN0cmVhbSwgZGVwdGgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGQ4MzczYWFlODE5
ZDRlYjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQuLjA0NDFkZGFiNzJkMmFlZWI4NmMyNTQ0ZmUw
MjVjMjA4NTY0OTdlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
UHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQwLDIwICsxMzksMjkgQEAgc3RydWN0IFNjcm9s
bFJlY3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBTY3JvbGxCZWhhdmlvciBiZWhhdmlvciB7IFNj
cm9sbEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2
NF90OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
cik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7Citj
bGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxh
eWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
ckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBm
cmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOworCisgICAgZW51bSBjbGFzcyBMYXll
clR5cGUgeworICAgICAgICBTdGF0aWMsCisgICAgICAgIFNjcm9sbGFibGUKKyAgICB9OwogCiAg
ICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZp
cnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBMYXllclR5cGUgbGF5ZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclR5cGU7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVy
U2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdDsKKwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3
aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ry
b3llZCgpOwpAQCAtMjIzLDYgKzIzMSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlz
dE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQg
PSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZs
YWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNs
YXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJx
dWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2lu
ZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDIsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0
UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkp
OyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6
ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25z
dDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZy
b21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9y
IGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9s
bGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNj
cm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9P
ZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwg
PSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHks
IFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFu
aW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBv
c2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9s
bDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZv
aWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4
LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsg
c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAg
IHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9u
Pik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9s
bGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxh
eWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxh
YmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZh
aWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFs
OwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5h
dGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRp
b25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBj
b25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9v
bCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7
Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jp
em9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxl
QXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQot
ICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBm
aW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNl
bmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0j
ZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3Vj
aCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNj
cm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAg
ICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Owot
ICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IElu
dFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIo
Y29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwot
ICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQot
ICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsK
IAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVN
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVz
aXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVu
ZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAg
IGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0
YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAg
LTU1NSw5ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlv
dXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29s
IGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAg
ICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUg
bW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg2LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJD
bGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0g
QWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBl
IHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2Fw
cygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwg
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJv
b2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50
OyB9CkBAIC02MzcsNiArNTQwLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0Owor
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1l
Qm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlw
cGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIq
IGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjAzLDYgQEAgcHVi
bGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBP
cHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRl
eHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQ
YWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAg
ICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENs
aXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0g
UmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg4LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRp
Y0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9z
aXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3Np
dGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNl
bmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigp
Lmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0
aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
dHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwy
MCArNzU3LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2lu
ZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZh
bHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5l
cigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0K
ICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGlu
Z1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNl
ZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hT
Y3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KLSAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAgICAgYm9vbCBwYWludHNX
aXRoVHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50KCkgfHwgaGFzQmxlbmRN
b2RlKCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50RWxl
bWVudFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yOjpGbGF0
dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEgKzc3
Myw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBj
b29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0K
LSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Ny
b2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xs
YmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wg
cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE4LDggKzgw
MSw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxv
d0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgdm9pZCBzaW11bGF0
ZUZyZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50
RnJlcXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25z
dCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsg
fQogCkBAIC05MzAsNyArODExLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdp
b25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5v
bkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50
UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9u
KCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAog
cHJpdmF0ZToKIApAQCAtMTAxMCw5ICs4OTEsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRh
dGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8
PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwg
MSwKQEAgLTEwMzAsMTYgKzkwOCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxh
ZyB7Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEg
PDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0g
MSA8PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAg
PSAxIDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAg
ICA9IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVy
LCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5k
ZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkg
PyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2lu
dCgpOyB9CkBAIC0xMDcyLDcgKzk0MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ks
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
ICAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKLSAg
ICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CiAgICAg
dm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBw
YWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAg
IHZvaWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pOwpA
QCAtMTA5OSw2NCArOTY2LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29u
dGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIp
IGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21l
bnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJh
Z21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxs
cHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lkIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wg
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZEJlU2VsZlBh
aW50aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQot
ICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJl
Y3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENv
cm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJs
ZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlv
cikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFs
OwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJl
Y3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0
cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJv
b2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9v
bCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2Nr
U2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwot
ICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50
U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAg
ICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNl
c3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwMTMsNiBA
QCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50
byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91
dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVy
KCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXpl
cigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRh
dGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChi
b29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxNywyMCAr
MTAyNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsK
ICAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsK
LSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCBzY3Jv
bGxDb3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAgICAgSW50UmVjdCBzY3Jv
bGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVyIDogcmVzaXplcjsKLSAg
ICAgICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBMYXllclR5cGUgbV9sYXll
clR5cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRz
OwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDQsMTAg
KzEwNDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93TGlzdERpcnR5OiAxOwog
ICAgIGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0gICAgLy8gS2VlcHMgdHJh
Y2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMg
Y2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAgIGJvb2wgbV9pblJlc2l6
ZU1vZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAg
Ym9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxm
LXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVu
IGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTA1MSwxMiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQg
dXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUg
bmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgogICAg
IGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJh
Y2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2lu
T3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsg
Ly8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkg
OiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2li
bGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2Vu
ZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAg
Ym9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2
ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3Nyw2IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDog
MTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAx
OwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
LSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpA
QCAtMTMzOCwyNSArMTExNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgv
aGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1f
c2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xs
ZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMg
d2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAg
c3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAgIAot
ICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIE1hcmth
YmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3Bl
LCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwg
SW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNTY3Jv
bGxpbmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1
ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZs
b3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxl
ZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAg
ICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEwICsxMTI4LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJl
cGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRl
clJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBj
dXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Ny
b2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJh
clBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5k
ZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJl
IG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdp
bmF0aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5MDYx
ZS4uY2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUzLDEzICs1
MywxNCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUg
IlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRh
aW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVu
ZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJl
bmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAKICAgICBBU1NFUlQobV9v
d25pbmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9zaXRvcigpLnJlbW92ZUZy
b21TY3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycygqc2Nyb2xs
YWJsZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXllcnMoKTsKIH0KQEAgLTQy
MSwxMSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRl
T3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAKICAgICBUaWxlZEJhY2tp
bmc6OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9y
VmlzaWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0g
ZnJhbWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5n
TGl2ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAmJiBs
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRp
bGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGlu
ZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkK
KyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3Zl
cmFnZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2lu
Zzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAg
IGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2Vz
dG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9s
bENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94
KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rv
ci0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5
b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5j
ZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9m
ZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBz
Y3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGNvbXBvc2l0
ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKTsKKyAgICAgICAg
cGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gu
bG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRp
b24oKSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAgICB9
CiAKICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBAIC0xMjg1LDcgKzEyODks
OCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5
ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7CiAKICAgICAgICAg
ICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICAg
ICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5
ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS5jbGlwRGF0
YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNj
cm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgICAgIGVudHJ5
LmNsaXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAg
ICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEzOTAs
NyArMTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25z
dCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2Nh
dGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9s
bENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xs
Q29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAot
ICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxP
ZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisgICAg
ICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAg
ICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyArMTQxMSw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29t
cG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQg
PSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZz
ZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdM
YXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAg
ICAgSW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5n
ZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCk7CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNl
dExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAog
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcg
aXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVy
IGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAg
ICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250
ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0
aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Ny
b2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246
OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VS
VChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTEx
LDEyICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9y
U2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAg
IHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9s
bGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9s
bGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJh
cihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmICghbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29u
c3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXll
ci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xs
YmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xs
YmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIg
PSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwxMiBAQCBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIo
bV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNj
cm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
b3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgQVNT
RVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAgICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXll
ciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgICAgIGlmICh2ZXJ0
aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIs
IFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGxh
eWVyc0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9s
bAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5
ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFy
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1w
aXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8v
IFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRv
IHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRv
IHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAogICAg
IGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAg
ICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1f
b3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRz
TGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
ICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXND
b250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFi
bGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVy
KCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Ny
b2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJl
bW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsQ29udGFp
bmVyTGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMp
CiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIobV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKQotICAg
ICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9vd25pbmdMYXllcik7Ci0g
ICAgCisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkuZGlk
QWRkU2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAg
IH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMwMTAsOSBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBMYXlv
dXRSZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXll
ciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBGbG9hdFJl
Y3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAg
IGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9t
UmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpKSAt
IG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBsYXllckRpcnR5UmVjdC5t
b3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xh
eW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkp
IC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENs
aXApOwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
R3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAg
ICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFp
bnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAg
ICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGxheWVyLnBh
aW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5k
ZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJX
aXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCkBAIC0zMzIz
LDE3ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWlu
dERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAg
ICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3JvbGxh
YmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwog
ICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9s
bGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5
UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7Cisg
ICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVj
dCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
T3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0Lmxv
Y2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJl
Y3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2Nh
dGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAg
bV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3Jt
ZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJh
bnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFn
ZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4
ODM0OWM3ZmYzY2U2ODUyMjZhLi5lNTZmYzJkNzY1ZGRhODkyOTQ1M2U3M2VhOTgyYTFjZWMwOTI2
ZGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMK
IAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVy
Zmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRp
bmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAhbGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBM
YXlvdXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBAIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgb3ZlcmZsb3dTY3Jv
bGxMYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKSA9PSBvdmVy
Zmxvd1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxvd1Njcm9sbExheWVyLnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmJv
eFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIo
KS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRp
YXRlTGF5ZXIpCkBAIC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAgICAgcm9vdExheWVyLT5u
b3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsK
IH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGlu
YXRlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSYgbGF5ZXIpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lT
Y3JvbGxpbmdMYXllckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5LDExIEBAIFNjcm9sbGlu
Z05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JWaWV3
cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJl
bmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBhbmNlc3Rv
ckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxkIGJlY29tZSBhIHJl
ZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7CisgICAgaWYgKCFhbmNl
c3RvckxheWVyKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5
b3V0U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnZpc2libGVTaXplKCkpKTsKKyAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0Owog
ICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDU4OCwxMSArNDU5
MywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxh
eWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290QmFj
a2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigpLAogICAgICAg
ICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZpZXcu
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpOworCiAgICAgICAg
IGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwK
ICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3Jv
bGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5
ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6
IG51bGxwdHIsCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXIt
PmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHIgfSk7CiAgICAgfQogfQogCkBA
IC00NjMwLDggKzQ2MzgsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAgICAgICAgaWYg
KGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAgICAgICAgICAg
dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Nyb2xsaW5nQ29v
cmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZs
YWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0gICAgICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2Vv
bWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5n
Tm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQp
IHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVh
R2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ3NjcsMjAgKzQ3NzcsMjEgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5nTm9k
ZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byByZWxldmFudFNjcm9sbGlu
Z1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyKSB7CisgICAgYXV0byByZWxldmFudFNjcm9sbGluZ1Njb3BlID0gW10oY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXll
cikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJlbmRlcmVyKQogICAgICAg
ICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgICAgIHJldHVybiBs
YXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfTsKIAotICAgIGF1dG8gcm9vdFNj
cm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBh
dXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKS0+
Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCiAgICAgZm9yIChhdXRvJiByZW5kZXJlciA6ICpz
bG93UmVwYWludE9iamVjdHMpIHsKICAgICAgICAgYXV0byBsYXllciA9IHJlbmRlcmVyLmVuY2xv
c2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgIGlmICghbGF5ZXIgfHwg
IWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Njb3BlKHJlbmRlcmVy
LCAqbGF5ZXIpOworICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3JvbGxp
bmdTY29wZShyZW5kZXJlciwgKmxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CiAgICAgICAgIGlm
IChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xsaW5nU2NvcGUpIHsKICAgICAgICAgICAgIGF1
dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0gYXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9k
ZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdTY3JvbGxpbmdOb2Rl
SUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMCBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAg
IGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgp
KQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVy
biBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpOworICAgIHJldHVy
biBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5zY3JvbGxhYmxl
TGF5ZXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3Jv
bGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNr
aW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3Jv
bGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIsIFJlbmRl
ckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM0LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxh
eWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjYWxsZWQgZnJv
bSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtNDkzOCw3ICs0OTQ5LDcgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdM
YXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWUKICAg
ICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVyTWFw
LCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6
OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5V2Vi
S2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFj
a2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIgKzQ5NzYsMTIgQEAgdm9p
ZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsU2Ny
b2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5
ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQordm9p
ZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdMYXll
cihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1fc2Nyb2xsaW5nTGF5ZXJz
LmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5
ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3Jk
aW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVy
LCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5nTGF5
ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9sbENvbnRhaW5lckxheWVy
ID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CkBAIC00
OTc5LDcgKzQ5OTAsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIH0KIH0KIAotdm9p
ZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihSZW5k
ZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAgcmVt
b3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4NWIy
Njk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVhOWVmNTYwNGY0NzdhMzBj
YmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgogI2lu
Y2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTIxLDIwICsxMjEs
MjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAgICAKLSAgICB2b2lkIGFk
ZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgYWRkU2Ny
b2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAgdm9pZCByZW1vdmVTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJMYXllckJhY2tpbmcmKTsK
IAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7CiAg
ICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsKIAot
ICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHJlbW92ZUxheWVy
KFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xheWVy
KFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xpZW50JiBtX2Nocm9tZUNs
aWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsKKyAg
ICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xsaW5nTGF5ZXJzOwogICAg
IEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAKICAg
ICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CkBAIC0z
NTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKIAotICAgIHZv
aWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7CisgICAg
dm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJl
bmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9pZCBkaWRBZGRTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xheWVy
V2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7
CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmKTsK
IAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCBzZXRUcmFj
a3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFja2luZ1JlcGFpbnRzID0g
dHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRhYWY0
YTA4MTUxYThjYjFkLi5kM2VjNDNhZGNhMzNjMjY1YzhjMGUwZjIzMGQ2MDQwMGJmNjM0MTk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpk
ZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXllcigp
CiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5k
ZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1FOiBIb29rIGluIG9wdGltaXphdGlvbiB0byBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xh
eWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGU+KCp0aGlzKTsKICAgICBzZXRI
YXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5pbnNlcnRPbmx5VGhpc0xheWVyKFJlbmRlckxh
eWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVDaGFuZ2UpOwogfQogCitSZW5kZXJMYXllclNj
cm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNjcm9sbGFibGVMYXllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51
bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVyICYmIG1fbGF5ZXItPmlzU2VsZlBh
aW50aW5nTGF5ZXIoKTsKQEAgLTIwOCw5ICsyMTQsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5l
d1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xkU3R5bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5l
clJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUoKm9sZFN0eWxlLCBuZXdTdHlsZSkpIHsKLSAg
ICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGxheWVyKCkpIHsKLSAgICAgICAg
ICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgcmVuZGVy
TGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5
KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZp
ZXcmIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmll
dy51cGRhdGVTbmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyOSwxMCBAQCB2b2lkIFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5s
YXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxT
bmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCku
c3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAg
ICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAg
ICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbFNuYXBC
b3gtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlzQm9keSgpIHx8IHNjcm9sbFNuYXBCb3gt
PmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
U25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Ny
b2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2FkY2E2ZDUw
NDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2YzA4MmY5YWI0ZTFhNjZlM2JkYmM3ZWJk
Mzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAgICBMYXlvdXRS
ZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVuY2xvc2luZyBv
YmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiArNDgsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJlbmRlckxheWVy
KiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KIAorICAgIFdFQkNPUkVf
RVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7CisK
ICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzY1YWEwM2Uw
MmZjMDU4ZjU2ZWRkNDdiNDg3M2E4ODUxNGFhNjEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKQEAgLTAsMCArMSwy
MDAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUg
Q29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3RoZXIgY29udHJpYnV0b3JzOgor
ICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1PgorICogICBEYXZpZCBCYXJv
biA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFuIEJpZXNpbmdlciA8Y2Jp
ZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5jb20+Cisg
KiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1naWVzc2Vu
LmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29tPgorICogICBCb3JpcyBaYmFy
c2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUo
KQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOworICAgIHJl
dHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCitSZW5kZXJMYXllclNjcm9sbGFibGU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXllcihyZW5kZXJlckxheWVyTW9kZWxPYmpl
Y3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgLCBtX2luUmVzaXpl
TW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAgLCBt
X2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFs
c2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQoreworICAgIG1faXNT
ZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgIGlm
IChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisKKyAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7CisgICAgICAgIC8vIFdl
IHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3Jv
bGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBl
bGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9s
bFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJy
ZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVk
TGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICB9Cit9CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpCit7CisgICAgaWYgKGluUmVzaXpl
TW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXpl
TGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVh
KHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRl
cmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNsZWFy
U2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwg
cm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXpl
KHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5z
ZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0
aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAg
ICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgp
LCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOwor
fQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFw
cGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1
cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNv
bHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQor
CitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0
YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAv
LyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93
aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7
CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2Vy
OworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0
YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihh
ZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisg
ICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBz
cXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0
dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNj
cm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVs
dGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVj
ayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4g
V2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNv
aGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBp
ZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxh
c3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91
c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8
PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQg
dGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBp
ZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykK
KyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShh
ZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisKKy8vIEZJWE1FOiB1bmlmeSB3aXRoIHRo
ZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxh
YmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Cisg
ICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFt
cCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOwor
CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxp
bmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0
KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEg
PSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3
ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJ
bnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9m
ZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiBy
ZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBz
Y3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVk
QXJlYSk7CisKKyAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51
cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQg
Y2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8v
IGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50
IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAg
ICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
CisKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwg
ZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwor
ICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRp
Y19jYXN0PFJlbmRlckxheWVyKj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUgIiA8PCBwb3NpdGlvbik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9u
LCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKK3sKKyAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0g
U2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3Jv
bGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBj
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChj
bGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNj
cm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBz
ZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRp
b24pOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1
cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7
CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0Owor
ICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2Fu
Y2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xs
T2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmlt
YXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZp
b3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24g
cG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgp
LCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Cit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sK
KyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
ID0gV1RGOjpudWxsb3B0OworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5j
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25z
dAoreworICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0
YXRpb25EaXNhbGxvd2VkU2NvcGU7CisKKyAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUg
PSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRl
ckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5k
ZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB9OworCisg
ICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlz
Q29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKTsKKworICAgIGZvciAoYXV0byogbmV4dExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBu
ZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRT
Y3JvbGxhYmxlKCpuZXh0TGF5ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQobmV4dExheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV4dExheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2Vk
KEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVh
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGlmIChyZWFzb24g
PT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4o
dHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAorewor
ICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092
ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5z
Y3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNT
Y3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAg
ICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNF
bmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5v
bmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Ny
b2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBv
ciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21l
IGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxl
LgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAg
aWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Ny
b2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBt
X3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Ny
b2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JT
dWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMg
OiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAg
ICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xs
YmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Cisg
ICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiBh
Y3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBi
b29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJl
cikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5k
ZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCks
IG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50
cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0
b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdl
dC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGVz
dHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAg
ICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisK
KyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxs
cHRyOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRl
bkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30K
KworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisK
KyAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnNjcm9s
bGFibGVMYXllcigpICYmIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBw
ZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6IEV4
dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxlbWVu
dD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3go
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVt
ZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFy
ZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJv
eCwgYm94LT5zdHlsZSgpKTsKK30KKyNlbmRpZgorCisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0
IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFj
Y2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRl
IG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkU3RhcnRTY3JvbGwoKQorewor
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRFbmRTY3JvbGwoKQoreworICAgIHBh
Z2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5k
IHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBr
ZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRM
YXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBi
b29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJp
bGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZs
b3dTY3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xs
c092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICBy
ZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxl
KCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5h
bHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNv
bnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9s
cygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFu
Y3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGlj
aXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5
KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29u
dHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVs
ZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFy
IHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1BvaW50SW5SZXNp
emVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKCFjYW5SZXNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJv
bHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFyICYm
ICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6
ZUNvbnRyb2xSZWN0OworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVz
aXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9p
bnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJv
dWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lw
YXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
LmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFy
KG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5z
KGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5n
ZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNl
dEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7Cisg
ICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Cisg
ICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4
WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAgIGlmICgh
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3Zl
cmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIg
dHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5n
IGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJs
YXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxs
IHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8v
IHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNz
IHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0
aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0
aGF0IHRoZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhl
IFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJs
YXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBu
ZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGlu
dG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdl
UmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAg
ICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3Qg
PSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290
KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsK
KworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3Jv
bGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NT
IHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFo
YXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBh
ZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5
U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYg
bmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5
b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91
dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0
CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAg
ICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQg
cGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAg
ICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNj
cm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24n
dCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAg
IHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJl
Y3QpOworICAgIAorICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMg
b24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorewor
ICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1v
dmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRy
b2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9z
Y3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWlu
dCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAor
ICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29y
bmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBM
YXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKKyAgICByZXNpemVyQWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fcmVzaXplcikgeworICAg
ICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6
ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJl
c2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJh
bWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNj
cm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0
IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJl
c2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVy
QWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJD
b3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAy
MTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQor
fQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5
ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJl
IGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKKyAgICB1
cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVl
ZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1h
eSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBj
YXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0
byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9m
ZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0
KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxv
b2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBv
biBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2Fz
IGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291
bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4
dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8v
cHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVk
U2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
ICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisg
ICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3Jp
Z2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYg
KGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVw
ZGF0ZSgpOworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgp
OworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAg
IHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRhdGVTY3Jv
bGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0Cit7CisgICAgLy8gV2UgbmVlZCBhIHNwZWNp
YWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhhdmUKKyAgICAvLyBoYXNP
dmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRseSIgY2xpcCB0aGVpciBj
b250ZW50cywgc28KKyAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6aW5nIHRoZW0gYWxzby4K
KyAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS5p
c1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXpl
OjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVzaXplKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZzZXQpCit7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50
IGJ1dCBpcyBub3QgcmlnaHQgbm93LgorICAgIGlmICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJl
c2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhl
cmU/CisgICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3
aXRoIHRoZW0gZXhwbGljaXRseS4KKyAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5l
bGVtZW50KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1l
bnQtPnJlbmRlcmVyKCkpOworCisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9j
dW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNl
UHJlc3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVu
ZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworCisgICAgYXV0byBhYnNvbHV0ZVBvaW50
ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKKyAg
ICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFi
c29sdXRlUG9pbnQpKTsKKworICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJl
c2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICBuZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0
LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKKyAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNl
dC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIAorICAgIExheW91dFNpemUgY3VycmVudFNp
emUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXIt
PmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVs
ZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7Cisg
ICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7CisgICAg
CisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0
LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsK
KyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Cisg
ICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOworICAgICAgICBh
ZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7Cisg
ICAgfQorICAgIAorICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5l
d09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1
cnJlbnRTaXplOworCisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0
PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSBy
ZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveDsKKwor
ICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKKyAgICBpZiAo
cmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7CisgICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBl
OjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91
dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIg
PyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwor
ICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOworICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5k
VG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7CisgICAgfQorCisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlm
ZmVyZW5jZS5oZWlnaHQoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJv
bSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8g
em9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5k
ZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
KyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVp
Z2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9y
ZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQg
LyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNl
LmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgZG9jdW1lbnQu
dXBkYXRlTGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3Vs
ZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9p
bnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBS
ZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAodGhp
cyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNo
TWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3
aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBv
cmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dT
Y3JvbGwpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJl
cigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOworCisg
ICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExh
eW91dFJlY3QmIGJvdW5kcykKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0
ZShlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcykpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVs
eUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKFJlbmRlckxheWVyKiBsYXllcikKK3sKKyAg
ICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY2hp
bGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKCkKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9
IEludFJlY3QoKTsKKyAgICByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
KHRoaXMpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlv
bkdhcHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxk
ID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2
ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRS
ZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgt
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2lu
dCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAg
IGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRy
KSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRp
b25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMp
CisgICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0
aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRT
aXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAg
ICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBG
SVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXll
cigpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUg
bGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGlu
Z0ZvckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3Zl
cmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVu
dGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJh
ck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBz
dHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0g
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNl
dWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlT
Y3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYg
IW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmlu
ZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3Jv
bGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgp
IDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxl
KFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVy
bGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8
fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhl
bXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJm
bG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBv
dmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBk
b2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRv
IGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50Lgor
ICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNT
Y3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBi
b29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgo
aGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIo
Ym94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxi
YXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92
ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQg
bWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUs
IHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hC
YXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5v
dmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6
U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92
QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpT
Y3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
KyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Ny
b2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAo
Ym94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFs
T3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0
aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJh
ciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJh
ciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJl
cigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFi
bGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8g
YmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRl
ZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0g
Ym94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2Fs
T3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBh
dXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6
b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsK
KworICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93
OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0
bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAg
ICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5k
ZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5w
YXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAm
JiByZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJs
ZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7
CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0
ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxi
YXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQor
ICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6
cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisK
KyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXll
ciogbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZs
YWdzKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9t
ZXRyeU1hcCwgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoY2hpbGQsIGdlb21ldHJ5TWFwLCBmbGFncyk7
CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNl
dDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5l
ciBjYXNlcyB3aGVyZQorICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRl
IHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgorICAgIHVwZGF0ZURlc2NlbmRhbnRE
ZXBlbmRlbnRGbGFncygpOworCisgICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQg
YW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5n
CisgICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlz
aWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KKyAgICAvLyByZWNvbXB1dGUgYWxs
IG91ciBwb3NpdGlvbnMgYW55d2F5LgorICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAm
JiAhbV9oYXNWaXNpYmxlQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBwb3Np
dGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7CisgICAgaWYgKHBvc2l0aW9uQ2hh
bmdlZCkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7CisKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENv
bnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCisgICAgICAgIGNsZWFyQ2xp
cFJlY3RzKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3Ry
YWluZWRQb3NpdGlvbigpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3Ry
YWluZWRBbmNlc3Rvcik7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApOworICAg
IAorICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250YWlucyhI
YXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7
IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYm
IGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zp
c3VhbGx5Tm9uRW1wdHkoKTsKKyAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdl
b21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVt
cHR5KSB8fCBmaXJzdENoaWxkKCkpOworICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3Mp
CisgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVu
dCgpKTsKKworICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7CisgICAgICAgIC8v
IFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3Vh
bGx5IG5vbi1lbXB0eSBsYXllcnMuCisgICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkpCisgICAg
ICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBj
b3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVl
LgorICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZv
clJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOworICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAgICAgLy8gV2hlbiBTY3Jv
bGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBi
YWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQorICAgICAg
ICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2Fj
aGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNv
bXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCisgICAgICAgIC8vIENoZWNrIHRoYXQg
b3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigp
Lmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3Rz
KCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgICAgIEFTU0VSVCgh
cmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRM
YXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JS
ZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7CisgICAgfQorCisgICAg
cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKHRoaXMsIGdlb21ldHJ5
TWFwLCBmbGFncyk7ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9u
IGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUg
c2l6ZSgpCisgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGls
bCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCisgICAg
Ly8gdXBkYXRlZCBhYm92ZS4KKworICAgIGlmIChtX21hcnF1ZWUpIHsKKyAgICAgICAgYm9vbCBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cisg
ICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOworICAgICAgICBtX21hcnF1
ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgfQorCisgICAgaWYgKHNo
b3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdz
VG9BbmNlc3RvcihwYXJlbnQoKSk7CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2Vy
cygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiBzY3JvbGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJh
aW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQorewor
ICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgeworICAgICAg
ICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsg
fSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgICAgICBwYWludE92ZXJmbG93Q29udHJv
bHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJC
b3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5m
by5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgfQor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJl
dHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAg
IHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhl
aWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBp
T1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVy
biAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkg
Y29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3du
Y2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7CisgICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3JuZXJSZWN0SW5G
cmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVj
dCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9t
TGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRz
Lm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCBy
ZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQor
ICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4
WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJl
dHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZy
b21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07
CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBp
ID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxh
eWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9
IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRz
KSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5p
bnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRh
aW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50
SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFn
bWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5k
VG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBtX3Njcm9sbFNp
emUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkp
KTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93
IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJm
bG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAg
c2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xs
YWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVI
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAg
IGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUg
bm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFp
bnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9
PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3Zl
QnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIExheW91dFJl
Y3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3Jp
dGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShy
ZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0
YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBh
aW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNB
Y3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNB
Y3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsQ29ybmVy
VmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAg
cmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50UmVjdCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkg
Y29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92
ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVj
dCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUoLXNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9p
bnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxi
YXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50Owor
ICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWlu
aW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorewor
ICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsK
KyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJu
IHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0
aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzQ29tcG9z
aXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9s
bGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30K
KworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVy
bmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNp
b24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Ny
b2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2Ug
PSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhp
cy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6
bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3Rk
OjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkg
fSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisK
KyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRo
aXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNo
YWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxP
ZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0Lnko
KSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQu
eSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAg
c3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDAp
CisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBp
ZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVT
aXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsK
KyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hl
ZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvdWxkU3VzcGVu
ZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCitJbnRS
ZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29s
KiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLmFic29sdXRl
Qm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNz
KCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlz
UnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxB
bmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9y
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVuZGVyZXIoKS5k
b2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdl
TGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2FnZSk7Cit9CisK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlm
ICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5kZXJlcigpLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwg
IW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRs
ZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG8oY29uc3Qg
U2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRIX1NU
UkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxU
byAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMg
dXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2Vy
KSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Ig
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNv
ZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVt
b3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhP
ZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0
aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBj
YXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsK
KyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09m
ZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAobV9zY3JvbGxQ
b3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9
PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgLy8gRklY
TUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFu
Z2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAgICAgIC8vIFRo
ZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWlu
IHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRp
bmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBt
X3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0g
cmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIg
Y2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGlt
cGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcg
bGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21w
b3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4
dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhl
IG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBo
YXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQ
b3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsK
KyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGln
aGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgorICAgICAgICAg
ICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxs
IHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAgICAgLy8gaW4g
dGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBk
YXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNv
bXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Cisg
ICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24g
b2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1v
cmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBm
cm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
aW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAgICAgICBwYWlu
dFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9u
cywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4K
KyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRl
bnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVy
ZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZy
YW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJl
bmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5l
ZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0UmVjdCByZWN0
Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJl
cigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBw
ZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRR
dWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQp
OworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92
ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFr
ZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VN
b3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAg
ICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7
CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2
ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFp
bnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEg
ZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAg
ICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwg
cmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xs
LXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVy
KCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3Jv
bGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCisg
ICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2
aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAgZnJhbWUuZWRp
dG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAg
aWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgeworICAgICAg
ICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwg
b2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmlu
Zywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5j
bG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNv
bXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRp
b25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlU
cmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNl
c3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFNpemUgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4g
dG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYg
KCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAg
ICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwor
CisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRl
c3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmll
dy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0g
b3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3Rp
bmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxl
VG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBB
U1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Ny
b2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUpIHsKKyAgICAg
ICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAg
ICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFkZGVkT3JSZW1v
dmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAgICBpZiAoaXNT
Y3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBy
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5h
Y2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQorICAgICAgICAg
ICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0
ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFSSUFCTEUoYWRk
ZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7
CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Cisg
ICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAg
ICB9CisgICAgCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVj
dChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxD
b3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xs
Q29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJh
bWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byBjb3Ju
ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxS
ZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3JuZXIpIHsKKyAgICAg
ICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUo
KmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5k
ZXJlcigpKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAg
IH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVy
KSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclNjcm9sbENvcm5lcigp
Cit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Ny
b2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxDb3JuZXIgPSBudWxs
cHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlUmVzaXplclN0eWxl
KCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Ny
b2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBz
ZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwor
CisgICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVu
dCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNo
b3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFy
ZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVy
KSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIoKQorewor
ICAgIGlmICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQ
YXJlbnQobnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAg
IFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJl
c2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6
ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFS
ZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9
IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVz
aXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUo
MC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdl
Kj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0
ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lcklt
YWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUg
PSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAgIGlmIChzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgY29udGV4dC5zYXZl
KCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNv
cm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJD
b3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOworICAgICAg
ICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgaWYgKHJlc2l6
ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5l
ckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOworICAg
ICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0
IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29y
bmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6
ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAg
IGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwor
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNj
cm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRo
ZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9
IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJh
cigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1f
aEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1f
dkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9s
bGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAgIHJldHVybiBz
Y3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKwor
ICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5
U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2Fs
U2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9v
bCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigp
LnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2
b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9u
T3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVy
bGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFy
KSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhl
IGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAg
ICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDog
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJX
aWR0aAorICAgICAgICB9OworICAgIH0KKworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3Vs
dDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFy
UmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAg
ICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdl
VG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAgICBp
ZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgw
LCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxi
YXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXpl
IGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBj
b3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZ
Q29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlmIChz
Y3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3Ju
ZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJl
c3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzY3Jv
bGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25l
c3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJh
clRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJm
bG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QK
K3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2Vj
dHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Ny
b2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6dXBkYXRlTWFycXVlZSgpCit7CisgICAgaWYgKG1fbWFycXVlZSkgeworICAgICAg
ICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24n
dCB3b3JrIHdpdGggYml0ZmllbGRzLgorICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBv
c2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBv
c2l0aW9uKCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCku
aXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAh
PSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAg
IGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5k
ZXJNYXJxdWVlPih0aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUo
KTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0
cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0
QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAg
IC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVy
KiBwb3NpdGlvbmVkUGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlv
bihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChhdXRvKiBw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbGFibGVM
YXllcigpKSB7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRy
YWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0Lgor
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRT
aXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAg
ICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzSW5G
bG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNjcm9s
bGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQg
PSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5k
ZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNldDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRTY3Jv
bGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3Jv
bGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0g
cGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExheWVyU2Nyb2xsYWJsZSA9IHBh
cmVudExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudExh
eWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgICAg
ICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXllclNjcm9sbGFibGUtPnNj
cm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXJTY3JvbGxh
YmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hTY3JvbGxp
bmdTY29wZSA9IHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0xheWVyID0gcGFyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgY29uc3QgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBudWxscHRyOwor
ICAgICAgICAgICAgd2hpbGUgKGVuY2xvc2luZ0xheWVyKSB7CisgICAgICAgICAgICAgICAgaWYg
KChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmNs
b3NpbmdMYXllciA9IGVuY2xvc2luZ0xheWVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7CisgICAgICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IGVuY2xvc2luZ0xh
eWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKSkgeworICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgICAgIG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIH0gZWxz
ZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRl
Y3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJz
YSkuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAg
ICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVkNmQ3NzE4MDcwNzQwMDQ2ZDIxNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFi
bGUuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwg
MjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUG9ydGlv
bnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3Jh
dGlvbi4KKyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAgIFJvYmVydCBPJ0NhbGxhaGFu
IDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQu
ZWR1PgorICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KKyAqICAg
UmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAqICAgUm9sYW5kIE1haW56IDxyb2xh
bmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4uZGU+CisgKiAgIEpvc2ggU29yZWYg
PHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2Yg
dGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBN
b3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3
dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5
bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRo
b3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24g
b2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAq
IGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRv
IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNh
dGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQg
cmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVx
dWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5
b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVz
ZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRo
ZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
clNjcm9sbGFibGUpOworCit1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OworCitjbGFz
cyBSZW5kZXJMYXllclNjcm9sbGFibGUgZmluYWwKKyAgICA6IHB1YmxpYyBSZW5kZXJMYXllcgor
ICAgICwgcHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworcHVibGljOgor
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5
ZXJCYWNraW5nOworCisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGUoKTsK
KworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUu
Z2V0KCk7IH0KKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJ
bnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxl
VG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGludCBzY3JvbGxXaWR0aCgp
IGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Ny
b2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9k
cyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNj
cm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiog
c2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpV
c2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcg
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNj
cm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVk
U2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisg
ICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zm
c2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Ny
b2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQg
eSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQor
CisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9z
aXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQo
KTsKKworICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMg
c2Nyb2xsYWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3
J3MgbGF5ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNj
cm9sbGFibGVBcmVhLgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsK
KworICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFu
Z2VSZWFzb24pIGZpbmFsOworCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAg
ICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29s
IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3Jv
bGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQorICAgIHZvaWQgc2V0
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9s
bGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKworICAgIGJvb2wg
aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgLy8g
U2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3Jv
bGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIu
Z2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3Qg
ZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBP
ZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9u
UmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsg
fQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jikg
ZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2
b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmlu
YWw7CisjZW5kaWYKKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBk
byB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBh
Y3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0OworCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29u
c3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBi
b29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGlzUG9pbnRJblJlc2l6
ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3Zl
cmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
OworICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJv
b2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9s
bENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CisKKyAgICB2
b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwor
CisgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJlc2l6ZShjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAgYm9vbCBpblJlc2l6ZU1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQorICAgIHZvaWQgc2V0SW5SZXNp
emVNb2RlKGJvb2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0KKworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAgIHZvaWQgYWRkQmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgdm9pZCByZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCk7CisKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBj
b25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZv
aWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAg
Ym9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNl
c0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBMYXllcnMgd2l0aCB0aGUg
c2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Ig
c2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KKyAgICBPcHRpb25hbDxTY3JvbGxp
bmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGlu
Z1Njb3BlOyB9CisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KKworICAg
IGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAgYm9vbCBj
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICBib29sIHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5k
ZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQorCisg
ICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgZW51bSBV
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7CisgICAgICAgIElzT3ZlcmZsb3dT
Y3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAgICAgICAgSGFzU2VlblZp
ZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAxLAorICAgICAgICBIYXNTZWVu
QW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8IDIsCisgICAgICAgIEhhc0No
YW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMywKKyAgICB9OworICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCos
IE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwor
CisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYp
IGNvbnN0OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVu
c2lvbnMoKTsKKyAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCk7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKKyAgICBib29sIGlzUmVuZGVy
TGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNp
YmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Qg
ZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJl
Y3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAg
ICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJ
bnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwor
ICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hh
bmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmlu
YWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxB
bmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVz
c2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOworICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCk7CisjZW5kaWYKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5
IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAg
IHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsgIAorCisgICAgSW50U2l6ZSBzY3JvbGxiYXJP
ZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFi
bGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9pZCB1cGRhdGVSZXNp
emVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAgdm9pZCBkcmF3UGxh
dGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVz
aXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKKyAg
ICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHZlcnRp
Y2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKKyAgICAgICAgSW50
UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3Qo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0Vt
cHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9CisgICAgfTsKKyAgICBP
dmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgYm9vbCB1cGRhdGVMYXllclBvc2l0
aW9uKE9wdGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogPSBu
dWxscHRyKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFw
KiwgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKKwor
ICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3BhcmVuY3lMYXllckNv
bnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlS
ZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzQ29udGV4
dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0
cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBS
ZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4s
IFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOworCisgICAgdm9pZCBwYWlu
dExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKKyAgICB2b2lkIHBhaW50TGF5ZXJCeUFwcGx5
aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRlckxheWVyOjpMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc+LCBjb25z
dCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNpemUoKSk7CisKKyAgICBi
b29sIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGJvb2wm
IGRpZFF1YW50aXplRm9udHMpOworI2VuZGlmCisKKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWUoKTsK
KyAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgdm9pZCBzdWJ0
cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3BlcyhMYXlvdXRQb2ludCYgbG9j
YWxQb2ludCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJTdHlsZSgpOworCitwcml2YXRlOgor
ICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNp
emluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KKyAg
ICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorCisgICAgYm9vbCBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7CisgICAgYm9vbCBtX2NvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9vbCBtX3VwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uIDogMTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Cisg
ICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwor
CisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBJbnRT
aXplIG1fc2Nyb2xsU2l6ZTsKKworICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2Ug
aGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7
CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIElu
dGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Nj
b3BlOworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRz
PFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1
ZWU+LgorCisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVy
IGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9s
bENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwor
CisgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKK307CisKK30KKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGUp
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyJiBsYXll
cikgeyByZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkgPT0gV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Okxh
eWVyVHlwZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDdlOWYzODMyZDM2
ZWZkMTkxM2NmNzM5NzAxMWViYjNkMjE5NDhlMjQuLmU0NTZjNmM4YTU1ODMyMDRmNjNhZWZiNjhl
OGJjMDMwYjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg3OSwxMCArODc5LDkgQEAgYm9vbCBSZW5kZXJMaXN0Qm94
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmco
KSBjb24KIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiB7CiAgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwotICAg
IGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJM
aXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0
Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1
cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXll
cigpOworICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmhh
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKIH0KIAogSW50UmVjdCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5NmU2
YmZiZTQwYTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFiYTVhNjAyMWU4ZDIxM2FiZDQyNGU3ZWVmNTIz
ODRiZjQwMTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHAKQEAgLTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IkhUTUxNYXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXIqIGxheWVyKQorUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllclNjcm9s
bGFibGUqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMs
ICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmgKaW5kZXggMWM3ODg0OTVlMGU4ODU3NWU4MGJmOTMwOGEyZjQ5NGZiNGE2
MjhkNS4uMDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2Njg1NDUyYzQ3Yjk4MjMzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCkBAIC00OSwxMyArNDksMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTsKIAogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBhdXRvLXNjcm9sbGlu
ZyBmb3IgPG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJNYXJxdWVlIGZpbmFsIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShSZW5kZXJNYXJxdWVlKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJMYXllciopOworICAgIGV4
cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKik7CiAgICAgflJlbmRl
ck1hcnF1ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3Q7CkBAIC04MCw3ICs4
MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsKIAotICAgIFJlbmRlckxh
eWVyKiBtX2xheWVyOworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9sYXllcjsKICAgICBU
aW1lciBtX3RpbWVyOwogICAgIGludCBtX2N1cnJlbnRMb29wIHsgMCB9OwogICAgIGludCBtX3Rv
dGFsTG9vcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5k
ZXggNzExM2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3NzliMTJmOC4uOTU3NTQxYTZiZTgx
ZjFjMGM2Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1
YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlck9iamVj
CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2Jq
ZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2ls
bCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRo
ZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNjI2MGE4MTU3OWY1ODRmNThjYzQw
ZjdjZTA5MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUyYTIyMmJiZDM4NWM4YjZkM2M4OTZkNjJkMjRj
MDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MDAsMTcgKzQwMCwy
MiBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bAogICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYg
KCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXll
ciA9IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXll
cigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQ
b2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewot
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+
bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNh
bChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJl
bmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
KSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZTA1NjBkN2E1MmE5
NTI2NGQ2YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4uMWY2ZDMxZjBkNDhhYzA2N2UxNWIzOWQwY2I1
NDRlNjlkZDQzN2ExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVl
QXNUZXh0LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29u
dGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRl
cmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5LDIwICs1OTksMjEgQEAgc3RhdGljIHZvaWQg
d3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25z
dCBMYXlvdXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8IGFkanVzdGVkQ2xpcFJl
Y3Q7CiAgICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
IHsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkKLSAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgaWYg
KGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAi
IDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJv
eCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IGxh
eWVyLnNjcm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwg
bGF5ZXIuc2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJv
dW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBsYXllci5zY3Jv
bGxIZWlnaHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbGF5ZXIu
c2Nyb2xsSGVpZ2h0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xs
YWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLngoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKS55KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgaWYgKGxheWVyLnJl
bmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkp
ICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCk7CisgICAgICAg
IGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5j
bGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxI
ZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3Jv
bGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgICAgICBpZiAoIXNjcm9s
bGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkg
eworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgICAgICBTY3JvbGxiYXJU
aGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Ny
b2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9u
UlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIGlmIChtYWNUaGVt
ZS5pc0xheW91dERpcmVjdGlvblJUTCgqc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cigpKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVj
dGlvbiI7CiAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAppbmRleCAxNzI0OGNkYTM0YWE2YjZhNzE5NmY3ZjAwNmYyMDg1ZmE5YWI0MjZj
Li4zNDcwNmQ2NmVlMDAzMzUzMDFlYTA2ZDEwMjU0MjE1NzczNjY4ZWJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMyOSw4ICszMjksOCBAQCB2b2lk
IFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChz
bmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSk7CiAgICAgfQogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkp
Ci0gICAgICAgIGxheWVyKCktPnBhaW50UmVzaXplcihwYWludEluZm8uY29udGV4dCgpLCByb3Vu
ZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBp
ZiAoaGFzTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+
Y2FuUmVzaXplKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludFJlc2l6ZXIocGFp
bnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBw
YWludEluZm8ucmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRPdmVybGFwVGVzdFJl
c3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCBjMDUzYTRkZGEyMDA4ZWZkN2E2Njg4ZDM0NDhmZmJmM2JmY2JlMWY1Li44MmI5YmU0YTcw
YWU5N2Q4NWY2YzkxZDI0MTNjZTZiYmY3ODBlNzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC0xNTUsNiArMTU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9i
amVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xOTA2LDcgKzE5MDcsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYg
ZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xs
YWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9IGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI5MDEsNyArMjkwMiw3IEBAIEV4Y2VwdGlvbk9y
PFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSog
bm9kZSkgY29uc3QKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCkpCiAg
ICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94PihyZW5k
ZXJCb3gpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRl
ckJveC5sYXllcigpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3guc2Ny
b2xsYWJsZUxheWVyKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmlu
ZGV4IGJmNjhhNzE0NWRhODk4ZWQ0ZTdjZTc0ZTYxNTdmMDBiZDcwZjdhNjMuLmE0ZTc2M2I0NTg5
MmI5OTBiMzNjNjYzOGQ5ZDAyZjY5MjBiOGY3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
cm9ncmVzc1RyYWNrZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDM1LDEwICsyMDM1LDEyIEBAIGJv
b2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAg
ICBmbG9hdCBzY2FsZUZhY3RvciA9IGRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgICAgIEludFNp
emUgbG9naWNhbFNjcm9sbERlbHRhKC1kZWx0YVggKiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNj
YWxlRmFjdG9yKTsKIAotICAgICAgICBSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gbnVs
bHB0cjsKKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIgPSBu
dWxscHRyOwogICAgICAgICBpZiAobV9nZXN0dXJlVGFyZ2V0Tm9kZSAmJiBtX2dlc3R1cmVUYXJn
ZXROb2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dl
c3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAg
ICAgICAgIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMp
OworICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKSB7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggOTcwZDAwZWM4NWYzMzM5NjJmODU2N2MyN2ZhMzFhZWNiMzhkMjk0Mi4uZGE0OGQ3
NDNjY2JiZDRhZmQ4YzBjZTUzZTk3NmMxZDMwMjJmMDI3OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDIwLTA4LTE0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCB1cCBS
ZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisg
ICAgICAgIFJlbW92ZSB0d28gd3JvbmcgZXhwZWN0YXRpb25zLCB0aGF0IHdpbGwgbGVhZCB0byBs
YXlvdXQgdGVzdAorICAgICAgICBmYWlsdXJlcyAodW5yZWxhdGVkIHRvIHRoaXMgcGF0Y2gpLgor
CisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1l
eHBlY3RlZC50eHQ6CisgICAgICAgIHMvUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LyBpbiBjb25zb2xlIG1lc3NhZ2VzCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25z
L3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0
b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgcy9SZW5kZXJMYXllci9SZW5k
ZXJMYXllclNjcm9sbGFibGUvIGluIGNvbnNvbGUgbWVzc2FnZXMKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0
ZWQudHh0OiBSZW1vdmVkLgorCiAyMDIwLTA4LTE0ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHN1c3BlbmRpbmcgLyByZXN1bWluZyBh
biBPZmZsaW5lQXVkaW9Db250ZXh0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9s
bGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQu
dHh0CmluZGV4IDkzNmJlZDI1YzI3MTdmNTIxZGM1NmQ1MzI2MzA5ZGI4Njk0YTI2MTUuLjlhMzQ2
NzVkMWY0NjI3NDcwMGJkNDdmMmJkZmVjNTI3Y2NjMWI2OWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNp
Yy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC0xLDE0ICsxLDE0IEBACiBDT05TT0xFIE1FU1NBR0U6
IE1haW5GcmFtZVZpZXc6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCiBDT05TT0xFIE1FU1NBR0U6
IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6
IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBS
ZW5kZXJMYXllcjogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FH
RTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09M
RSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Ny
b2xsYmFyCiBDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRl
bnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc0Rvd25JblZlcnRpY2Fs
U2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzVXBJblZlcnRp
Y2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZFZl
cnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTog
bW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05T
T0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRWZXJ0aWNhbFNj
cm9sbGJhcgogQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRDb250ZW50
QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVk
Q29udGVudEFyZWEKIFRoaXMgaXMgYSBzY3JvbGxhYmxlIGRpdi4KIAogUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9h
bmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJl
bmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggODViMmEzOGNhMjczYzZkNzAwNjg3ODZlMzM5ZGY3NDFlNjRjYTRlOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVk
LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotUEFTUyBjb3VudCBpcyAwCi1QQVNT
IGNvdW50IDwgNiBpcyB0cnVlCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRF
U1QgQ09NUExFVEUKLQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9m
YXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1h
dG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggNjBjZGI2NmMxZjBhMmIxMDdmNTg0
MTdiMzMyZWY4N2Y2MTUxZjk0Mi4uNDU4N2Y5YjVkNGUxNTlkYjhjMzVjOTI0YzA0MDZlZWFmZWQ2
M2NlMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9s
bGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1i
YXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CkBAIC0xLDExICsxLDExIEBACi1DT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCi1DT05T
T0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCitDT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkQ29udGVudEFyZWEK
K0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRWZXJ0
aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1v
dXNlTW92ZWRJbkNvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09M
RSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVh
CitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRWZXJ0
aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1v
dXNlRXhpdGVkQ29udGVudEFyZWEKIFRoaXMgaXMgYSBzY3JvbGxhYmxlIGRpdi4KIAogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9hbmltYXRpb25zL3N0ZXBzLXRyYW5z
Zm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDg1YjJhMzhjYTI3M2M2ZDcwMDY4Nzg2ZTMzOWRmNzQxZTY0Y2E0ZTkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4
cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotUEFTUyBjb3VudCBpcyAw
Ci1QQVNTIGNvdW50IDwgNiBpcyB0cnVlCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
Ci0KLVRFU1QgQ09NUExFVEUKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406636</attachid>
            <date>2020-08-14 16:54:21 -0700</date>
            <delta_ts>2020-08-15 15:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200815015418.patch</filename>
            <type>text/plain</type>
            <size>345501</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY1ODE2MGFmM2NjYTY0
NDI4ZTcyMDM3M2JlZGNhNTRlZDE5OTRlNy4uNjcyM2IxZTg4MTcxOTdmNGE1ZDdlNjM5MjQ4OWE5
NTQ3ZDg3YmZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NiBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OmFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6
OnJlbW92ZUxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1
ZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxh
dGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0x
NCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0
IGZvciBzdXNwZW5kaW5nIC8gcmVzdW1pbmcgYW4gT2ZmbGluZUF1ZGlvQ29udGV4dApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDYyZGFkMTUxZjY0M2IwMTc1MDU2NmVhMDBiZGJiYjQw
YWNhMTE0YWMuLjFmYjIyMGI5MzhjNmUwMTVkNmU4NDExZDZhOGU2MjAyYjgxYTNmMDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAyMC0wOC0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICAqIERPTS9ET01I
VE1MLm1tOiBVc2UgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpLgorICAgICAgICAoLVtE
T01IVE1MRWxlbWVudCBzY3JvbGxYT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50
IHNjcm9sbFlPZmZzZXRdKToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2V0U2Nyb2xsWE9m
ZnNldDpzY3JvbGxZT2Zmc2V0OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorICAgICAgICAqIFdlYlZp
ZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOndp
dGhJbnNldDpdKToKKwogMjAyMC0wOC0xMiAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBuZWVkIGZvciBkZWZpbmluZyBVU0VfTkVXX0JVSUxE
X1NZU1RFTQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGI5OGI3YWIzZTdiODBkMWNm
NzRmMmUzZThhYmU5ZmM5OGM1NTA2MjMuLjBjMGE4ZDA1ZjJhYTVlZDY2YmZjNTk5MWMwMTQzN2Ex
YzFmNDM1ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAyMC0wOC0xNCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4K
KworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVu
ZGVyTGF5ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6IFVzZSBSZW5k
ZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyKCkuCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFuZCBtYW55
IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggYTZjYTU0MTBj
NDFhZmZlYjFiYjVlZDEwNmE2YWQxOTNiM2JhZjM3OC4uYzJmNzNiYjJjOWRkN2UyYzcxOTljNDU1
MDQxMDU0M2U4ZmI1MzE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMzkxLDYgKzEzOTEsNyBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggZDE4MDFhYTAxZmU5MjgzMGIzZWE4MjZlNjk3YmRhYjg1ZmM4
NGY5Ny4uZWFiZWIwZWJhMjhmMjA1MjI5MzAyNjY1NWZiMDcyMmY0ODk5MjRhYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTIxMjgsNiArMjEyOCw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKK3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
aW5lQm94TGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBiYzY4ODFiZTgyMDhlMjBkMzNlMjQ2ZDI1NmU3NjliZmQyN2Y0
ZjBhLi5hOWM3OGNkMzFiMDQyNzhiOWJjOTY0Y2I5OGNkMzY4Yjc3ZmU1MDI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDgs
NiArMzA4LDcgQEAKIAkJMEY1ODBCMEUwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkQwRjEyREU5
QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRjkwRjEyREU5QjAwNTFENjg5IC8qIFJl
bmRlckxheWVyQ29tcG9zaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJh
Y2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjU4MENGRjBGMTNBQjlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY1ODBGQTMxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2lu
Z0xheWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAqLzsgfTsK
IAkJMEY1ODBGQUYxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQUUxNDk4MDBE
NDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QjdBNTMxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTU5MjUsNiArNTkyNiw4IEBACiAJCTBGNTgwQ0ZBMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllckJhY2tpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyQmFja2luZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5k
ZXJMYXllckJhY2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjU4MENG
QjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUaWxlZEJhY2tpbmdMYXllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGls
ZWRCYWNraW5nTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJUaWxlZEJhY2tpbmdMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1ODBGQUUxNDk4MDBENDAwRkI1QkQ4IC8qIEFuaW1hdGlvblV0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25VdGlsaXRpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4Nzc2LDYgKzI4Nzc5LDggQEAKIAkJCQkwRjUzRkI4OTIx
M0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVB
Mzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTND
MjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJ
CQkJMEY1ODBDRkMwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAg
Ki8sCisJCQkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0
ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0
YXRlLmggKi8sCiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hM
aXN0LmNwcCAqLywKQEAgLTMzMTM3LDYgKzMzMTQyLDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4
MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFE
NDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUw
MzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMGQ4MzhkNTc0ODFmYjQ3YmQ5ZmUy
OWQ5N2E1ZGMwOWFiMWQ4Y2FiNi4uNTJiNDNhMDgyNmY2YjJhZjBiMzkzZDQwMTAwNzBmN2QwYjMy
YzQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTE2
LDcgKzM5MTYsOCBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJl
U2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBBU1NFUlQoYm94LnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKQEAgLTM5MjksNyArMzkzMCw4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/
IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChw
b2ludCk7CisgICAgQVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYm94LnNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFU
SE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3
MTYyNDQ1MWVjNDQ0Y2QuLjg4MDRhMTZiZWMxNGNkMDJmMDdhZWZhNjliZjliMTIwNmQyNmQzMWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1
ZG9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1
ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUcmVlVXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRT
Y3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRv
SW50ZWdlcihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xs
QmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Ny
b2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVk
KTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkp
Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVk
U3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJl
ci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNj
cm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTMzMiw4
ICsxMzMyLDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAg
ICAgaW50IGNsYW1wZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5
bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9
IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRl
ZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0
U2Nyb2xsVG9wKGNsYW1wZWRUb3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVB
cmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0
U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApp
bmRleCBkOTdlNjZmOGY4YWYwNWZhMDI3NzZhMDA4NTBmNWY1NWFlODYxZjNmLi4wODZmNjkzMWMx
OGJlMTA5MDJmOWIxNWRkZWI3YzNiOWE5NzYxODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTYsNyArNTYsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCkBAIC0yNDEyLDkgKzI0MTIsMTIgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3Qg
U2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAg
ICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRy
dWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3Jv
bGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAg
ICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlz
aWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVu
dCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAg
ICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAg
ICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsK
ICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYg
KG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFn
ZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5n
RnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFy
cXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNmMDNhMWJkM2E3M2My
NzEyNzUuLjA0OGYwNTBmODFhODYxYzE0NDcxMDQ5Y2Q2MjU1M2RhMDBlOTgxMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDcgQEAK
ICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVl
ZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3ICsxNzUs
OCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBj
b25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0
KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBBU1NFUlQocmVuZGVyQm94TW9kZWxPYmplY3Qo
KS0+c2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgp
LT5zY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggMmRl
NDNkYWQ1YTlmYjZkOGM1OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uNzIyMjRmOTUxMGE5NjlmN2Q0
YWRhYTQxYzY4Yjk1NzgxZWNiOTBkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHls
ZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpA
QCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1
cigpCiAgICAgaWYgKCFpbm5lclRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpOworICAgIGF1dG8q
IGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCk7CiAgICAg
aWYgKCFpbm5lckxheWVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBlMGU1MWZmNzYxMzky
Li5iNTAyZWRhYWE5ZGE0NzhjOWQwNzcxOGY2ODEzNmE2NjUzMDg4YWVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5jbHVkZSAiUGx1Z2lu
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQzLDEy
ICszNDMsMTQgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNs
b3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGlsZSAoY3VycmVudEVu
Y2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVu
dEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50
ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAgICAgICAgICAgYm9v
bCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1FdmVudC0+Y29weVdp
dGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lkdGgoKSwgZmlsdGVy
ZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsKLSAgICAgICAgICAg
ICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdoZWVsRXZlbnQoY29w
aWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgc2Nyb2xsaW5n
V2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExheWVyLCB3aGVlbEV2
ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGZhbHNlOworICAg
ICAgICAgICAgaWYgKGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGJveExheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29waWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0
aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRlcmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJl
ZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCksIGZpbHRlcmVkVmVsb2NpdHkpOworICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXJTY3JvbGxhYmxlLT5oYW5kbGVX
aGVlbEV2ZW50KGNvcGllZEV2ZW50KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFy
ZWEoKmJveExheWVyU2Nyb2xsYWJsZSwgd2hlZWxFdmVudCk7CisgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChzY3JvbGxpbmdXYXNIYW5kbGVkKSB7CiAgICAgICAgICAgICAgICAgc3Rv
cEVsZW1lbnQgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5lbGVtZW50KCk7CkBAIC0xNTY4LDcgKzE1
NzAsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICBib29sIGluUmVzaXplciA9
IGZhbHNlOwogICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwg
dGhlIHJlbmRlcmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRz
IHNob3dpbmcgdGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCi0gICAgICAg
ICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0Pigq
cmVuZGVyZXIpLmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCkp
IHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29u
dHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAg
ICAgIGlmIChpblJlc2l6ZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXpl
Q3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKQEAgLTE4MTIsMTIgKzE4MTQsMTQg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91c2UKIAogICAgIFJlbmRlckxheWVyKiBsYXllciA9IG1f
Y2xpY2tOb2RlLT5yZW5kZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0xheWVyKCkgOiBudWxscHRyOwogICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChtb3VzZUV2ZW50LmhpdFRlc3RSZXN1bHQoKS5sb2NhbFBvaW50KCkpOwotICAgIGlmIChsYXll
ciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChsb2NhbFBvaW50KSkgewotICAgICAg
ICBsYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOwotICAgICAgICBtX3Jlc2l6ZUxheWVyID0g
bGF5ZXI7Ci0gICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IGxheWVyLT5vZmZzZXRG
cm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwotICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyID8gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0cikgeworICAgICAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsKKyAgICAg
ICAgICAgIG1fcmVzaXplTGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgICAgICBtX29m
ZnNldEZyb21SZXNpemVDb3JuZXIgPSBzY3JvbGxhYmxlTGF5ZXItPm9mZnNldEZyb21SZXNpemVD
b3JuZXIobG9jYWxQb2ludCk7CisgICAgICAgICAgICBpbnZhbGlkYXRlQ2xpY2soKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRDYXJldEJsaW5raW5nU3VzcGVuZGVkKHRydWUpOwpAQCAtMTkxOCwxMCArMTky
MiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYShOb2RlKiBub2RlKQogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGF5ZXIgPSByZW5k
ZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYg
KCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5l
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
KSB7CiAgICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRleCA2MTc5MDVlMDFiMWRkZjBkMWUwYzFkNGVl
YjgzNDhlNzllYWJiMmExLi44NzE5YmEwMzY1NmJhNzg3ODk0YjM1NWUxZTUwMzQ0NWEwOWUyMmQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKQEAgLTgzLDcgKzgzLDcgQEAgY2xhc3Mg
UGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xhc3MgUmVu
ZGVyQm94OwogY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlckxheWVyOworY2xhc3Mg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogY2xhc3MgUmVuZGVyV2lkZ2V0OwogY2xhc3MgU2Nyb2xs
YWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxiYXI7CkBAIC01NTAsNyArNTUwLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9zdmdQYW4geyBmYWxzZSB9OwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fcmVz
aXplTGF5ZXIgeyBudWxscHRyIH07CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBtX3Jlc2l6
ZUxheWVyIHsgbnVsbHB0ciB9OwogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fY2FwdHVyaW5nTW91
c2VFdmVudHNFbGVtZW50OwogICAgIGJvb2wgbV9ldmVudEhhbmRsZXJXaWxsUmVzZXRDYXB0dXJp
bmdNb3VzZUV2ZW50c0VsZW1lbnQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CmluZGV4IGY5YjFhNWQ3MTViNzU0NzI5NDI4NTg5YWU1ODFlNjljNWI3ZGUxMWMuLjJlYTBmMjg1
YmRkZWJlZTY5NmM5Mzc3ODc1MjAwNWFmZmM2NmQzZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKQEAgLTc3LDkgKzc3LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVuLmgiCiAj
aW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVy
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU2Miw3
ICsyNTYyLDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGxpbmcoKQogICAgIGlmICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFz
Vmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyog
cmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBkYXRlV2lk
Z2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAgICAgIEFTU0VSVChy
ZW5kZXJWaWV3LT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5z
Y3JvbGxhYmxlTGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zODQwLDEwICszODQxLDEwIEBAIFNjcm9sbGFi
bGVBcmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvKiBsYXllciA9IG93bmVyUmVuZGVyZXItPmVu
Y2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFsYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0
dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5j
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGxheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogfQogCiBJbnRSZWN0
IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAgLTQz
MTgsOCArNDMxOSwxMCBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5kZXJl
ciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4dCwg
ZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsgfSwg
c2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3Jp
Z2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2libGVP
cmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAg
ICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3Qs
IG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lv
bkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50T3ZlcmxheVNjcm9s
bGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAg
ICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdT
dGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4
IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLmRiMWE0ZWJkZWQyZmFk
ZDFmZmYwYjViZGIyYTk4MDA0MWRmYWY4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlh
bE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiTm9kZS5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTQsMTEgQEAg
Ym9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9uIGRp
cmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAg
IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVjdXJz
aXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBj
b250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAgICAgICBBU1NFUlQo
ZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllclNjcm9s
bGFibGUgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBl
bmNsb3NpbmdMYXllclNjcm9sbGFibGUtPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwg
ZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0Zy
YW1lSU9TLm1tCmluZGV4IDliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNjZjIxNTQwYWZmNDMu
LmQxNjI2ZWMzYzI3YjFmYjYzZWZiNTNhODBmMDJlNmM4NjgwNmVjNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNiBAQCB2b2lkIEZyYW1lOjpvdmVy
Zmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
LCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNMYXllcigpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRv
d25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigp
OworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb2xkU2Nyb2xs
VHlwZSA9IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNj
cm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBv
c2l0aW9uKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
KyAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAg
ICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6
VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgbGF5ZXItPnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgbGF5ZXItPnNldEN1cnJlbnRTY3Jv
bGxUeXBlKG9sZFNjcm9sbFR5cGUpOwogCi0gICAgbGF5ZXIuZGlkRW5kU2Nyb2xsKCk7IC8vIEZJ
WE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KKyAgICBsYXllci0+ZGlkRW5kU2Nyb2xs
KCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFt
ZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGMwOTMwYjYzNDk1ZTcxODE1OTkxYTQwNmE0ZDY2
NWEyN2JhNzcxNGIuLmY4NDNlOWUzZmM3ZjVjM2NhYTE4NjRlNWVlZmM3ODU1ZWNkYTE0MjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTUyLDcgKzUy
LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKLSNpbXBvcnQgIlJlbmRlckxheWVyLmgi
CisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RC
b3guaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpA
QCAtNzgyLDcgKzc4Miw3IEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFG
b3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVy
biBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LnNjcm9sbGFibGVMYXllcigpOwogfQogICAg
IAogc3RhdGljIENvbnRhaW5lck5vZGUqIGZpbmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVy
KENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVu
dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0
N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlhZmQ3ZmRkZTQzLi5hZWU1MGIwOWE5MzBkYzM5NTUz
MDZmZWMxNDUwY2I3N2FkYzcwMjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hs
aWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQg
SGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24s
IFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24o
KQogewotICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCk7CisgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgbV9y
ZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7
CiAgICAgc2V0U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01p
bnVzT2xkKTsKIH0KIApAQCAtMzE5LDggKzMyMCwxMCBAQCB2b2lkIEhpZ2hsaWdodERhdGE6OmFw
cGx5U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2Rl
CiAgICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUpOwogICAgIH0KIAotICAgIGlmIChibG9j
a1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZp
ZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICBpZiAoYmxv
Y2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykgeworICAgICAgICBBU1NFUlQo
bV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgbV9yZW5kZXJWaWV3LnNj
cm9sbGFibGVMYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworICAgIH0K
IAogICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJlZW4gdXBkYXRlZCBm
b3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCiAgICAgLy8gcHV0IHRoZW0g
aW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAppbmRleCA2YjUzY2JhODVjOGU5ZGM1OTcxNWI2MzhjYWU1NzVmODBlNDhmOTU0Li5h
NjdjYjIyYzIzZDMzZjMzOGM4YTBhNjY0ZmViNTkyZTBmOTA2YzU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU4LDcgKzU4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlz
dC5oIgpAQCAtNTUzLDcgKzU1Myw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byog
YmxvY2sgOiBibG9ja3NUb1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJm
bG93Q2xpcCgpKTsKLSAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCgpOworICAgICAgICBpZiAoYmxvY2stPnNjcm9sbGFibGVMYXllcigpKQorICAgICAg
ICAgICAgYmxvY2stPnNjcm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBA
IC01ODQsOCArNTg1LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
bGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dCgpCkBAIC0xMTA5LDEyICsxMTEwLDE1IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAg
aWYgKHB1c2hlZENsaXApCiAgICAgICAgIHBvcENvbnRlbnRzQ2xpcChwYWludEluZm8sIHBoYXNl
LCBhZGp1c3RlZFBhaW50T2Zmc2V0KTsKIAorICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIC8vIE91ciBzY3JvbGxiYXIgd2lkZ2V0cyBwYWludCBleGFj
dGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0IHRoZXkgd29yayBwcm9wZXJseSB3aXRo
CiAgICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3Vu
ZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0
aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9j
a0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQp
ICYmIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKICAgICAgICAgJiYgc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRX
aXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkp
Ci0gICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4
dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0
KHBhaW50SW5mby5yZWN0KSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludE92ZXJm
bG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDczLDE2IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPCiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNl
bGVjdGlvbkdhcHMoKnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxh
c3RMZWZ0LCBsYXN0UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBS
ZWN0c0JvdW5kcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5
ZXIgPSBlbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXJTY3Jv
bGxhYmxlID0gZW5jbG9zaW5nTGF5ZXIoKSA/IGVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFibGVM
YXllcigpIDogbnVsbHB0cikgewogICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVC
eSgtcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkgewogICAg
ICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRzKTsK
ICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChG
bG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5pc0Jv
eCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVy
LT5yZW5kZXJCb3goKS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGdh
cFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGxvY2FsQm91bmRz
KSwgJmxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGxheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5pc0Jv
eCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KGxheWVy
U2Nyb2xsYWJsZS0+cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBsYXllci0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRz
KGdhcFJlY3RzQm91bmRzKTsKKyAgICAgICAgICAgICAgICBsYXllclNjcm9sbGFibGUtPmFkZEJs
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMDAxLDcgKzIwMDUsMTAgQEAgYm9vbCBSZW5kZXJCbG9jazo6
aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG8KICAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBy
b3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVs
YXRlZE9mZnNldCkpKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0
b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIE5vZGUqIFJlbmRlckJsb2Nr
Ojpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNDk4LDkgKzI1MDUsMTEgQEAgaW50IFJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wg
Zmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8gKHRoZSBjb250ZW50IGluc2lkZSB0aGVtIG1vdmVz
KS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxsLCB3aGljaCBqdXN0IGJvdHRvbS1hbGlnbnMg
dGhlbS4KICAgICAgICAgLy8gV2UgYWxzbyBnaXZlIHVwIG9uIGZpbmRpbmcgYSBiYXNlbGluZSBp
ZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBvciBpZiB3ZSBhcmUgc2Nyb2xsZWQKICAg
ICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4gb3ZlcmZsb3c6aGlkZGVuIGJsb2NrIHRoYXQg
aGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0g
KGxheWVyKCkgJiYgKGxheWVyKCktPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250
YWxMaW5lID8gKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xs
T2Zmc2V0KCkueSgpICE9IDApCi0gICAgICAgICAgICA6IChsYXllcigpLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDApKSkpIHx8IChpc1dy
aXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7Ci0gICAgICAgIAorICAgICAgICBib29s
IGhhc01hcnF1ZWUgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5tYXJx
dWVlKCkgOiBudWxscHRyOworICAgICAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Ny
b2xsYWJsZUxheWVyKCkgPyAoc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkg
fHwgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSkgOiBmYWxzZTsKKyAgICAg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyKCkgPyAoc2Ny
b2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIo
KS0+c2Nyb2xsT2Zmc2V0KCkueCgpKSA6IGZhbHNlOworICAgICAgICBib29sIGlnbm9yZUJhc2Vs
aW5lID0gKGhhc01hcnF1ZWUgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyIDogaGFzSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IChpc1dyaXRpbmdN
b2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7CisKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNl
bGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tC
YXNlbGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZs
ZXhpYmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uYzUx
YzUwY2U1N2JkYWUwMDM1NGFkZDI5NDJkMWNjZTc0OGRjMzgyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJ
dGVtLmgiCkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJ
bnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAg
IGlmICghc3R5bGUoKS5hdXRvV3JhcCgpICYmIGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAg
Ly8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmlt
dW0gd2lkdGguCi0gICAgICAgIGlmIChsYXllcigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBs
YXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpvbnRhbCgpKQorICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5
ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxX
aWR0aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmlu
ZGV4IDYxMjM3NmJhYWQ2MWJkNjJmYTNjZWRhOGRkYTJhYTI2NDNiNzk5ZGIuLmQxMjhkMTRhNjhm
MjQ3MGY5YTg2OTYxYmZkOTUyNWU3MjlmMThiYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCkBAIC01OCw4ICs1OCw4IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgog
I2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMzE5LDExICszMTksMTEgQEAgdm9pZCBSZW5kZXJC
b3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKIAogICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBo
YXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1
ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3Jv
bGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpICYmIG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgp
KSB7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9
IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxh
eWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAg
ICAgIHNjcm9sbGFibGVMYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24pOwogICAgIH0KIAogICAgIC8vIE91ciBvcGFxdWVuZXNzIG1pZ2h0IGhhdmUgY2hh
bmdlZCB3aXRob3V0IHRyaWdnZXJpbmcgbGF5b3V0LgpAQCAtNTQyLDggKzU0Miw4IEBAIExheW91
dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94Ojpz
Y3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVy
KCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxXaWR0aCgpOworICAgIGlmIChoYXNP
dmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpOwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlz
aWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdv
cmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLmlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSkgewpAQCAtNTU1LDggKzU1NSw4IEBAIGludCBSZW5kZXJCb3g6OnNjcm9s
bFdpZHRoKCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsK
LSAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxh
eWVyKCktPnNjcm9sbEhlaWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxI
ZWlnaHQoKTsKICAgICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMg
bWF0Y2hlcyBJRS4KICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGlu
ZyBtb2Rlcy4KICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkg
aW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgpAQCAtNTY1LDEyICs1NjUsMTIgQEAg
aW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Ny
b2xsTGVmdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAgcmV0dXJuIGhhc092
ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVy
KCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVm
b3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTc5LDcgKzU3OSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpy
ZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCiAgICAgICAgIHNldExvZ2lj
YWxIZWlnaHQoMF9sdSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3Io
UmVuZGVyTGF5ZXImIGxheWVyKQorc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihS
ZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIFBhZ2UmIHBhZ2UgPSBsYXllci5y
ZW5kZXJlcigpLnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMo
KSkKQEAgLTU4OSwyNiArNTg5LDI2IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0
b3IoUmVuZGVyTGF5ZXImIGxheWVyKQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChp
bnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxl
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxh
eWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Ny
b2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxUb1hQb3NpdGlv
bihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJl
bmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3Np
dGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHNjcm9sbGFibGVMYXll
cigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmlt
YXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3Jv
bGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewotICAgIGlmICghaGFzT3Zl
cmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNldFNj
cm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MDgsMjQg
KzgwOCwzMCBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091dFJlbGF0aXZlVG9G
cmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJlbmRlckJveDo6aW5j
bHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJm
bG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkK
LSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBz
dHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKTsKKyAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCkt
Pmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkg
PT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3Zl
cmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBzdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1go
KSA9PSBPdmVyZmxvdzo6QXV0bzsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNp
emUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgcmV0dXJu
IGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNj
cm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQg
UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9s
bGJhclNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5ob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5z
aWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM0LDEyICs4NDAsMTIgQEAgaW50
IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcigpICYmIHNj
cm9sbGFibGVMYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJu
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICB9CiAKICAgICBpZiAoIWlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVy
KCkgJiYgbGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJU
KHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwog
ICAgIH0KIApAQCAtODQ4LDE1ICs4NTQsMTQgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Ny
b2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbExheWVy
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVy
TGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIgJiYgYm94TGF5ZXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewotICAgICAgICBp
ZiAoc3RvcEVsZW1lbnQpCi0gICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7Ci0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8qIGJveExheWVyID0gc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFib3hMYXllcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChzdG9wRWxlbWVudCkKKyAgICAgICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
LCBFbGVtZW50Kiogc3RvcEVsZW1lbnQsIFJlbmRlckJveCogc3RhcnRCb3gsIGNvbnN0IEludFBv
aW50JiB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCkKQEAgLTg3OCwxNSArODgzLDE0IEBAIGJvb2wg
UmVuZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksCiBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKICAgICBib29sIHNj
cm9sbGVkID0gZmFsc2U7Ci0gICAgCi0gICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwotICAg
IGlmIChsKSB7CisgICAgYXV0byogbGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAo
bGF5ZXIpIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkgd2Ug
cmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3VtZW50
IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxhcml0
eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwo
bG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSks
IFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQgPSBs
YXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3
YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAg
ICAgICBpZiAobC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICBpZiAobGF5ZXItPnNjcm9sbChsb2dp
Y2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KSkKICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
Y3JvbGxlZCkgewpAQCAtODk5LDkgKzkwMyw5IEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0CiAg
ICAgaWYgKHN0b3BFbGVtZW50ICYmICpzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgPT0gZWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlbmRlckJsb2NrKiBiID0gY29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGIgJiYgIWItPmlzUmVuZGVyVmlldygpKQotICAgICAg
ICByZXR1cm4gYi0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyLCBzdG9wRWxlbWVudCk7CisgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Js
b2NrKCk7CisgICAgaWYgKGJsb2NrICYmICFibG9jay0+aXNSZW5kZXJWaWV3KCkpCisgICAgICAg
IHJldHVybiBibG9jay0+bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBzdG9wRWxlbWVudCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC05MzIsNyAr
OTM2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBj
b25zdAogCiBib29sIFJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAog
ewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCkt
PnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgp
ICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT51c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9sbChjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24pCkBAIC05OTEsOCArOTk1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6
OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRl
ckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVy
KCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhblNjcm9s
bEZyb21Qb2ludChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNj
cm9sbGJhcnMoKSBjb25zdApAQCAtMTAxNywxMSArMTAyMSw5IEBAIGJvb2wgUmVuZGVyQm94Ojpu
ZWVkc1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlv
biBSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXll
cigpKQogICAgICAgICByZXR1cm4geyAwLCAwIH07Ci0KLSAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7
Ci0gICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJv
eDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTY5LDcgKzE1NzEsNyBA
QCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dyb3VuZFBhaW50ZWRF
eHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCgpKQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIo
KS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gZm9yZWdyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGJhY2tncm91
bmRSZWN0LCBiYWNrZ3JvdW5kT2JzY3VyYXRpb25UZXN0TWF4RGVwdGgpOwpAQCAtMTg4OCwxMCAr
MTg5MCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUo
Y2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgp
LCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQg
c2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKICAgICAg
ICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAg
ICAgICAgIGNsaXBSZWN0Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxl
dmFuY3kpLCAwKTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KHJlbGV2YW5jeSkpOworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShzY3JvbGxhYmxlTGF5
ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7CisgICAgICAgIGNsaXBS
ZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxl
dmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZh
bmN5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNWRkZmMzMTE4NDdi
YWZkOTNmMzM5NDhjMTEyNWJlZWU4YzI4Mzk4Ny4uYzBkYTdlYTExMzRmOTY2MDM1OGM5OTIxM2Rk
MzNhODZmZTVhNTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwCkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRmxl
eGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZVJvdy5oIgpAQCAtNDkwLDggKzQ5MCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3Bv
CiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5n
QW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLmxvY2F0
aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRl
ckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAg
ICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94
LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29u
dGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYm
IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAg
Y29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgICAg
ICBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNv
bnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAg
Y29uc3RyYWludHMuc2V0Q29udGFpbmluZ0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlv
blZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNr
eUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3Np
bmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5n
TGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2lu
Z0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0
aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNv
bnRhaW5pbmdCbG9jayAmJiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSkKKyAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9y
ICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZz
ZXQoKTsKICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlzfCBp
cyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0FuZWNz
dG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9y
KTsKQEAgLTU0OCwxMSArNTQ4LDEzIEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBGbG9h
dFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9Db250
YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7CiAK
LSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgRmxvYXRQb2ludCBzY3Jv
bGxPZmZzZXQ7CisgICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICBmbG9hdCBz
Y3JvbGxiYXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFz
TGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBlbmNsb3Np
bmdDbGlwcGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xh
eWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Nyb2xsYWJsZUxheWVyKCkgJiYgZW5jbG9z
aW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KQorICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2Ny
b2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxvYXRQ
b2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQueSgp
KSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQ0LDggKzg0NiwxMCBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjbwogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRo
ZSBwYWludCByZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRl
cnMgYXQgdGhlIGVuZHMuCiAgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtdGhpc0Jv
eC5zY3JvbGxQb3NpdGlvbigpKTsKLSAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgo
YkxlZnQgKyBsYXllcigpLT5zY3JvbGxXaWR0aCgpICsgYlJpZ2h0KTsKLSAgICAgICAgc2Nyb2xs
ZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0
KCkgKyBib3JkZXJCb3R0b20oKSk7CisgICAgICAgIGF1dG8gc2Nyb2xsV2lkdGggPSBzY3JvbGxh
YmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxXaWR0aCgpIDogMDsKKyAgICAg
ICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBzY3JvbGxXaWR0aCArIGJSaWdo
dCk7CisgICAgICAgIGF1dG8gc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50
UmVjdC5zZXRIZWlnaHQoYm9yZGVyVG9wKCkgKyBzY3JvbGxIZWlnaHQgKyBib3JkZXJCb3R0b20o
KSk7CiAgICAgfQogICAgIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgYmFja2dyb3Vu
ZENsaXBTdGF0ZVNhdmVyKGNvbnRleHQsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDk5ZTgyNGQxMzU3MDYzOWUzZTRkNDQzYzk2NWYxNDRlOWQ0
OGY0NDYuLmRhNzQ3OTM3YWNjMzA2ZWQwYjRhNDIxMjViNDY2ZTQ0NDU0NzIyMTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMjg3LDE2ICsyODcsMTEgQEAg
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENsaXBS
ZWN0cyYgY2xpcFJlY3RzKQogCiAjZW5kaWYKIAotc3RhdGljIFNjcm9sbGluZ1Njb3BlIG5leHRT
Y3JvbGxpbmdTY29wZSgpCi17Ci0gICAgc3RhdGljIFNjcm9sbGluZ1Njb3BlIGN1cnJlbnRTY29w
ZSA9IDA7Ci0gICAgcmV0dXJuICsrY3VycmVudFNjb3BlOwotfQotCiBERUZJTkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIAotUmVuZGVyTGF5ZXI6OlJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkK
LSAgICA6IG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzUmVu
ZGVyVmlldygpKQorUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCwgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZSBsYXll
clR5cGUpCisgICAgOiBtX2xheWVyVHlwZShsYXllclR5cGUpCisgICAgLCBtX2lzUmVuZGVyVmll
d0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKICAgICAsIG1f
Zm9yY2VkU3RhY2tpbmdDb250ZXh0KHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc01lZGlhKCkp
CiAgICAgLCBtX2lzTm9ybWFsRmxvd09ubHkoZmFsc2UpCiAgICAgLCBtX2lzQ1NTU3RhY2tpbmdD
b250ZXh0KGZhbHNlKQpAQCAtMzA0LDE5ICsyOTksMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxh
eWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAg
ICAsIG1fek9yZGVyTGlzdHNEaXJ0eShmYWxzZSkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0
eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCi0gICAgLCBtX2lu
UmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAg
ICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFu
c3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkK
LSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVz
KE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0
cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURl
c2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQo
ZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1f
aXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhl
ZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVl
KQpAQCAtMzMwLDE1ICszMjEsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9pbnNpZGVT
VkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkK
ICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21w
b3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
ZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VS
VF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlm
CkBAIC0zNTMsNTMgKzMzNSwyMiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgIHNldElzTm9ybWFs
Rmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKICAgICBzZXRJc0NTU1N0YWNraW5n
Q29udGV4dChzaG91bGRCZUNTU1N0YWNraW5nQ29udGV4dCgpKTsKIAotICAgIG1faXNTZWxmUGFp
bnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgIGlmIChpc1Jl
bmRlclZpZXdMYXllcigpKQotICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gbV9jb250ZW50
c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgLy8gbV9pc1NlbGZQ
YWludGluZ0xheWVyIGlzIGluaXRpYWxpemVkIGluIFJlbmRlckxheWVyU1ZHL0hUTUwsIGV2ZW4g
dGhvdWdoCisgICAgLy8gaXQgYmVsb25ncyB0byBSZW5kZXJMYXllciAtLSB3ZSBjYW5ub3QgY2Fs
bAorICAgIC8vICJtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xh
eWVyKCk7IgorICAgIC8vIGhlcmUsIGluIHRoZSBjb25zdHJ1Y3RvciAtLSBzaW5jZSB0aGUgUmVu
ZGVyTGF5ZXJTVkcvSFRNTCBjbGFzc2VzIGFyZW4ndCBpbml0aWFsaXplZCB5ZXQuCiAKICAgICBp
ZiAoIXJlbmRlcmVyKCkuZmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgbV9zY3JvbGxQ
b3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBp
ZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRv
cigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgZWxlbWVu
dC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAog
UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiB7Ci0gICAgaWYgKGluUmVzaXplTW9kZSgpKQot
ICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0
cm95ZWQoKTsKLQotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsK
LQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9yZWZsZWN0aW9u
KQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9sbENvcm5lcigp
OwotICAgIGNsZWFyUmVzaXplcigpOwotCiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAg
IGlmIChwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxOCw2ICszNjksMjAgQEAg
UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8
ICFmaXJzdENoaWxkKCkpOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVy
OjpzY3JvbGxhYmxlTGF5ZXIoKQoreworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KHRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0
aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyKCkgY29uc3QKK3sKKyAgICBpZiAoaXM8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZv
aWQgUmVuZGVyTGF5ZXI6OmFkZENoaWxkKFJlbmRlckxheWVyJiBjaGlsZCwgUmVuZGVyTGF5ZXIq
IGJlZm9yZUNoaWxkKQogewogICAgIFJlbmRlckxheWVyKiBwcmV2U2libGluZyA9IGJlZm9yZUNo
aWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDogbGFzdENoaWxkKCk7CkBAIC05
MzUsNyArOTAwLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklm
TmVlZGVkKCk7CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxl
TGF5ZXIoKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChn
ZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3Io
dGhpcywgcGFyZW50KCkpOwpAQCAtOTQzLDcgKzkxMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAg
Y2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmZsb3dDb250
cm9scygpKSB7CiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlm
IChnZW9tZXRyeU1hcCkKICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0
b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBA
IC05NTIsNyArOTIwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8v
IGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3Ig
bGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihy
b290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3Vu
ZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwog
ICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAyOSwx
MyArOTk3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgY2hpbGQtPnVwZGF0
ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBv
dXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVk
IHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2Ug
dG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4K
LSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwot
ICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3Vw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAg
fQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkp
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTWFycXVlZSgpOwogCiAgICAgaWYgKHJl
bmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAg
Ym9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2Vj
dHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTE1LDkyICsxMDc4LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0
UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXco
KS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlN
YXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIo
KS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRv
IG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAv
LyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBI
YXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJH
ZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJl
IG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQotICAgIC8vIHRo
ZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93
IGlzIHZhbGlkLgotICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwotCi0gICAg
Ly8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFu
dHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29tcHV0aW5nCi0gICAgLy8gb3VyIHJlY3RhbmdsZXMg
YXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUg
ZXhwZWN0ZWQgdG8KLSAgICAvLyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5Lgot
ICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXll
clBvc2l0aW9uKCk7Ci0gICAgaWYgKHBvc2l0aW9uQ2hhbmdlZCkKLSAgICAgICAgZmxhZ3MuYWRk
KEhhc0NoYW5nZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXND
aGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3Zl
cmZsb3dTY3JvbGwgfSkpCi0gICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7Ci0KLSAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQotICAgICAg
ICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7Ci0KLSAgICBp
ZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1Nl
ZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXApOwotICAgIAotICAgIGJvb2wgc2hvdWxkQ29tcHV0
ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5l
ZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1Nl
ZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsK
LSAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKLSAgICBi
b29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29t
cHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOwot
ICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5w
dXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKLQotICAgIGlmIChzaG91bGRD
b21wdXRlUmVwYWludFJlY3RzKSB7Ci0gICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24n
dCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCi0g
ICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkpCi0gICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0
cygpOwotICAgICAgICBlbHNlIC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBj
b250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRoZSB0cmVlLgotICAgICAgICAgICAgY29tcHV0ZVJl
cGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXAp
OwotICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3Jt
V2lkZ2V0KCkpIHsKLSAgICAgICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVD
b250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBh
aW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQotICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92
ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21l
IGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9i
LzE4ODEyMSkuCi0gICAgICAgIC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29y
cmVjdC4KLSAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygp
IHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5k
ZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVy
Rm9yUmVwYWludCgpKSk7Ci0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5
b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJv
eCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFp
bmVyRm9yUmVwYWludCgpKSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNo
aWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlN
YXAsIGZsYWdzKTsKLQotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBz
Y3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUo
KQotICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVw
YWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwotICAgIC8vIHVw
ZGF0ZWQgYWJvdmUuCi0KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAg
ICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51
cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlv
biA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmIChzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5j
ZXN0b3IocGFyZW50KCkpOwotCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5p
bnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBP
U0lUSU5HKQogCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVCbGVuZE1vZGUoKQpAQCAtMTY5MSwz
NCArMTU2OCwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRp
b25PZmZzZXQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyBTdWJ0cmFjdCBvdXIg
cGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KLSAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVu
dDsKLSAgICBpZiAocmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRp
b25lZFBhcmVudCA9IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHls
ZSgpLnBvc2l0aW9uKCkpKSkgewotICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdl
IHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zm
c2V0LgotICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9u
ZWRQYXJlbnQtPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKHBvc2l0
aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVy
SW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5
b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNT
Y3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9u
ZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8q
IHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xh
eW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAgICAgIEFTU0VSVChw
YXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3Jv
bGxpbmdTY29wZSA9IHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAg
fQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewotICAgICAg
ICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxp
bmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3Jv
bGxpbmdTY29wZSkKLSAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3Jv
bGxpbmdTY29wZTsKKyAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4K
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVT
Y3JvbGxpbmdTY29wZXMobG9jYWxQb2ludCk7CiAKICAgICBib29sIHBvc2l0aW9uT3JPZmZzZXRD
aGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkp
IHsKQEAgLTE4NDAsODYgKzE2OTMsMjggQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQotewotICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGxh
eWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVy
RWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBvd25lclJlbmRl
cmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpOwotICAgIGlmICghb3duZXJSZW5kZXJlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5j
bG9zaW5nTGF5ZXIoKTsKLX0KLQotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFy
aWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1l
Qm91bmRhcmllcykgY29uc3QKIHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNs
b3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0
b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0
dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7Ci19Ci0KLVJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAot
ewotICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRp
b25EaXNhbGxvd2VkU2NvcGU7Ci0KLSAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBb
XShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJv
eD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJl
cigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAg
aWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29u
c2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpOwotICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExh
eWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNj
cm9sbGFibGUoKm5leHRMYXllcikpCi0gICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3Jt
cyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVy
KiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAg
YXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAo
IW93bmVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxh
eWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0
dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ3
LDMzMSArMjI0Miw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rv
cihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5
b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgp
LCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIo
KS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChy
ZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVT
VkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUo
T1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xs
c092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xs
aW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZs
b3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3
ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxl
ZCBvdXRzaWRlIG9mIFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICgh
cmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIo
KS5lbGVtZW50KCkpOwotICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nID0gZmFsc2U7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0K
LS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1i
b29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsK
LX0KLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVy
cy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlz
KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5u
aW5nRGVsdGEpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3Mu
Ci0gICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2Nv
bnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNl
ciA9IDEyOwotCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVk
UmVkdWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVs
dGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRv
dWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8
IC0xKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERl
bHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQot
ICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRq
dXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50
U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZy
b21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFz
dEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5s
YXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBp
ZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hl
biB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVy
ZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAo
bGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24u
eSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQ
b3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RL
bm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQ
b3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBT
Y3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhl
IHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAo
YWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAg
ICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1
c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBz
Y3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Ny
b2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVy
ZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVy
KCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0g
ICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRl
bHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBp
ZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAg
ICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4
dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAg
ICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFy
ZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJh
bWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAg
ICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3Jv
bGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2Ug
YXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3Jh
bW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVy
ZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNh
biBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Ny
b2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNj
cm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAv
LyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRv
IHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Ny
b2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
ID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBT
Y3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9u
LngoKSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNs
YW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0g
ICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChz
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7
Ci19Ci0KLVNjcm9sbE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9m
ZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgp
KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAg
ICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1
cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAg
ICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZz
ZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAg
ICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xs
VHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYg
KCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNs
YW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7
Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdElu
QW5pbWF0aW9uKTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlw
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihj
b25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxD
bGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJl
bnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0K
LSAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAg
IGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1
czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2Vs
QW5pbWF0aW9ucygpOwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zm
c2V0KCkpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRp
b24obmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3Vz
U2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9u
IDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8
PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0g
ICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+
aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25z
IHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVu
IGJsb2NrcykuCi0gICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAg
ICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRv
IGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAg
ICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVu
dFdpZHRoKCkpOwotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9m
ZnNldCA9IG5ld09mZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1h
eE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9
IGNhcmV0V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRX
aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0
V2lkdGgpCi0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0g
ICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5l
d1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQ
b3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlv
clN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3Vh
cmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0
IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29y
ZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEg
Z2VzdHVyZSBlbmRzLgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0
ZSgpOwotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9u
ID0gbmV3UG9zaXRpb247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3
KCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChp
ZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Ny
b2xsKS4KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNl
IHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rv
ci4KLSAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJU
cmVlTGF5b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlv
dXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0g
ICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAg
ICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQot
ICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8v
IEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFj
aywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25z
LiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8t
ZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3Jl
IHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5n
IGxheWVycyBsYXRlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAg
ICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVk
IGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAg
ICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1v
cmRlciBwYXJlbnQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFp
bnRPcmRlclBhcmVudCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVz
Y2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1h
eSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVy
ZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0g
ICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsK
LSAgICB9Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFp
bmVyRm9yUmVwYWludCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFs
aWRhdGVkIGFmdGVyIHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVj
dE5lZWRzVXBkYXRlKCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJl
bmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlv
dXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBh
aW50Q29udGFpbmVyKQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWlu
dENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50
KTsKLSAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNv
b25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVz
UmVwYWludCA9IHRydWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAg
ICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERl
c2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAg
ICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRT
Y3JvbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9m
IG91ciBvYmplY3QuCi0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIo
KS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQp
OwotCi0gICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2
ZW50cy4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQot
ICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgq
ZWxlbWVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJh
bWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygp
LnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5
ZXJEaWRTY3JvbGwoKnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50
QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFz
ZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3Qg
ZXhwbGljaXRseSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODE2LDMwICsyMjg2
LDMzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0
UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3Qg
PSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1
dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKTsKICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJl
bmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwog
CiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllcik7CisKICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVy
ZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBw
cm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcg
dGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgICAgICBBU1NFUlQoYm94KTsKICAgICAgICAgTGF5
b3V0UmVjdCBsb2NhbEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVh
ZChGbG9hdFJlY3QoYWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAo
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkgewogICAgICAgICAgICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6
IGhvcml6b250YWwtdGIgYm94LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBU
aGUgdmlzaWJsZSByZWN0CiAgICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lk
ZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0
IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0
Lm1vdmVCeShMYXlvdXRQb2ludCgtdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAg
ICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5
ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExh
eW91dFJlY3QgbGF5ZXJCb3VuZHMoMF9sdSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gt
PmNsaWVudEhlaWdodCgpKTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVj
dFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRp
b25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0lu
dFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBp
ZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxh
YmxlTGF5ZXItPmNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0
KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwor
ICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpIHx8IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxP
ZmZzZXQoKTsKICAgICAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRT
Y3JvbGw6Ok5vOwogICAgICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVz
ZVNtb290aFNjcm9sbGluZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCiAgICAg
ICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAg
c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
LCBhbmltYXRlZCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0
aW9uKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3Jv
bGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBhbmltYXRlZCk7CiAgICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVu
Y2UgPSBjbGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwogICAgICAgICAgICAg
bG9jYWxFeHBvc2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwogICAgICAgICAg
ICAgbmV3UmVjdCA9IExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVh
ZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94
KCkpOwpAQCAtMjg1Nyw3ICsyMzMwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3Qg
dGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAgICBT
Y3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7
CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2li
bGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAgICAg
ICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdChT
Y3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCBh
YnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkp
OwogCiAgICAgICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBv
aW50KGV4cG9zZVJlY3QubG9jYXRpb24oKSkpOwpAQCAtMjg3Myw4ICsyMzQ2LDEwIEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQp
OwogCiAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dDcm9zc09yaWdpblNj
cm9sbGluZyA9PSBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfHwgZnJhbWVW
aWV3LnNhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBl
bmNsb3NpbmdMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6
OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgICAgICAgICAgICAg
ICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxhYmxlTGF5ZXItPmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ug
b2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgogICAgICAgICAgICAgICAgICAgICBuZXdS
ZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2lu
Z0ludFJlY3QobmV3UmVjdCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZh
bHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+
IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KQEAgLTI5MzEsMjQgKzI0MDYsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRl
UmVjdCwgYm9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJs
ZShuZXdSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3Np
dG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0
YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNj
ZW5kYW50cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0
ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVy
KiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCi0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
KENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0Fu
Y2VzdG9yKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3
b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFm
ZmVjdGVkIGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9y
LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7
Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENv
bXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1MYXlvdXRSZWN0IFJlbmRlckxheWVy
OjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdu
bWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKK0xheW91
dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwg
Y29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxp
Z25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJWaWV3KCkgJiYgaW5z
aWRlRml4ZWQpIHsKQEAgLTMwMjYsMTE1NSArMjQ4NCw5NyBAQCBMYXlvdXRSZWN0IFJlbmRlckxh
eWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0
IExheQogICAgICAgICAvLyBJZiB0aGUgcmVjdCBpcyBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBh
cmVhLCBkb24ndCBib3RoZXIgdHJ5aW5nIHRvIGNlbnRlci4gT3RoZXIgYWxpZ25tZW50cyB3aWxs
IHdvcmsuCiAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFZpc2libGVCZWhh
dmlvcihhbGlnblkpOwogICAgICAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJl
aGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1l
bnQ6OkJlaGF2aW9yOjpOb1Njcm9sbDsKLSAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+
IDApCi0gICAgICAgIC8vIElmIHRoZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVz
ZSB0aGUgc3BlY2lmaWVkIHBhcnRpYWwgYmVoYXZpb3IKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9s
bEFsaWdubWVudDo6Z2V0UGFydGlhbEJlaGF2aW9yKGFsaWduWSk7Ci0gICAgZWxzZQotICAgICAg
ICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwot
ICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQg
dGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciBkb3duCi0gICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJl
Y3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRo
IHRoZSBib3R0b20uCi0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlv
cjo6QWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3Qu
bWF4WSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKLSAg
ICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwot
Ci0gICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4K
LSAgICBMYXlvdXRVbml0IHk7Ci0gICAgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6Tm9TY3JvbGwpCi0gICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7Ci0gICAgZWxz
ZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkK
LSAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0g
ICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNl
bnRlcikKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkg
LSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwotICAgIGVsc2UKLSAgICAgICAgeSA9IGV4cG9z
ZVJlY3QueSgpOwotCi0gICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQoeCwgeSksIHZp
c2libGVSZWN0LnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCi17Ci0gICAgSW50UG9pbnQgY3VycmVudERv
Y3VtZW50UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0Nv
bnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cpOwotICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0
UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7
IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRn
ZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFs
bG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
Y2FuUmVzaXplKCkgY29uc3QKLXsKLSAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8
aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQotICAgIC8vIGhhc092ZXJmbG93Q2xpcCgp
LiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBzbwot
ICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgotICAgIHJldHVybiAo
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZyYW1l
KCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0IG5vdy4K
LSAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5l
bGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGUgb25seSBjYXNl
IHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0
aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPwotICAgIC8vIElmIHRoZXkgZG8g
aXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0g
ICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOwotICAgIGF1dG8qIHJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsKLQotICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1
bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKTsKLQotICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXcoKS0+d2lu
ZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7Ci0gICAgYXV0byBsb2NhbFBvaW50ID0gcm91
bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBM
YXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2ludCk7
Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9y
KTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShyZW5kZXJl
ci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwotICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6ZUZvclJl
c2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOwotICAgIGVsZW1lbnQtPnNldE1pbmltdW1T
aXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwotICAgIAotICAgIExheW91dFNpemUgYWRqdXN0
ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwg
b2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBuZXdPZmZzZXQuc2V0V2lk
dGgoLW5ld09mZnNldC53aWR0aCgpKTsKLSAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lk
dGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOwotICAgIH0KLSAgICAKLSAgICBMYXlvdXRT
aXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9m
ZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKLQotICAgIFN0eWxl
ZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PihlbGVtZW50
KTsKLSAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCkuYm94U2l6
aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7Ci0KLSAgICBSZXNpemUgcmVzaXplID0gcmVu
ZGVyZXItPnN0eWxlKCkucmVzaXplKCk7Ci0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRp
Y2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1h
cmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJn
aW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5S
aWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRl
cmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jp
em9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZVdpZHRoID0gYmFz
ZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZl
cmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChy
ZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAg
ICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAg
ICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChz
ZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBl
OjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8g
em9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5
b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9y
ZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7
Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAg
c3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwg
cm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBl
OjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAg
Ly8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3
aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4g
dmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdO
b2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3Jv
bGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVy
Ojp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Nj
cm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJm
bG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMp
Ci0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0g
ICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsg
c2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Ny
b2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0g
c2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6
b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJs
ZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRT
aXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwg
b3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNj
cm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsK
LSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwot
ICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQo
c2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAm
JiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFj
aGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xs
T2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0Lngo
KSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54
KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3Ry
ZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAt
IHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0
dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgp
OwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFT
U0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgp
LmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJh
clJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVy
TGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJ
bnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVj
dC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19
Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxi
YXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50Owot
ICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWlu
aW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50
Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBS
ZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShz
Y3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRl
bnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6
Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAg
ICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRz
U2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6
ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5n
ZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRT
aXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hh
bmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRl
cmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVu
ZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygp
OwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0
YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVy
Zmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewot
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQot
ICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5k
IHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBr
ZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRM
YXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRl
ckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbklu
VmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hh
bmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVj
dHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5z
aWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Nj
cm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJh
ciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3Zlcmxh
eVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJl
dHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAg
fTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25P
dmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0g
ICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xs
YmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVO
b25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Ny
b2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNB
dm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2Vu
dCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsK
LSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3Jv
bGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3Rz
IHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdl
VG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAg
aWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGlj
YWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdl
VG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVj
dDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2Fs
U2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlm
dFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAg
ICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250
cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxT
Y3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJ
bnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55
KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1h
eFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIg
PSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAg
ICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXpl
ciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0
byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJU
aGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNj
cm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xs
YmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09
IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNj
cm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7
IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFy
ID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRl
ZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFi
b3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkp
Ci0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0
aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3Qg
PSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWlu
dFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3Jv
bGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAg
ICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9y
ZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0K
LXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50
KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikK
LXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAg
ICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFk
b3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93
Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5k
ZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsK
LSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94Pihh
Y3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5
bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94
PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0
ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3Jp
bmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0g
ICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAg
cmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpk
ZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAg
IFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAg
ICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsK
LQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51
bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxz
T3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9s
bGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGlj
aXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0j
ZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25l
KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJh
ciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVk
IHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJh
cikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAg
ICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Ny
b2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNj
cm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0g
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3Rp
Y2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0
eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcg
b25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBX
ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYg
KG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFy
KQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSog
UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAo
bmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkK
LXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTog
RXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVt
ZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJv
eCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxl
QXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAq
Ym94LCBib3gtPnN0eWxlKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBj
b25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1h
dG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNz
YWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5n
IFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUo
KS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAo
aGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0K
LSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBo
YXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0
ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5n
Il9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0
dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0
cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QK
LXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkK
LSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0
ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJh
ci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAg
ICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0
VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVp
Z2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIo
Y29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVj
dCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3Ju
ZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVy
UmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAg
ICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBt
X3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9
IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFy
ICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNl
dEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlm
IChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNl
dEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBt
X3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBp
ZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNp
emVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVu
c2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkg
aW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNp
emUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAot
ewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50
U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9z
Y3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxv
d1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBM
YXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBi
b3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxv
d1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgo
cm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Ny
b2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dU
b3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92
ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3Zl
cmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9w
T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsK
LSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1z
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZs
b3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5k
ZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFT
U0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRo
KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiBy
b3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29s
IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBT
Y3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93
WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtl
QXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0
eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNP
dmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Ny
b2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5
bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Ny
b2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMg
PT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVy
Zmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3Rz
TGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRz
IGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0
byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlz
LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cg
PSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1
aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUu
Ci0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5
bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCho
YXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAg
bV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xs
YmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3Jv
bGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3Jv
bGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlv
cigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93
KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
ICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlm
IChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAg
ICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0g
ICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQot
ICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7
Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJl
cigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93
WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9
PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91
dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVu
ZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1
dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdl
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgp
OwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50
ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlz
RmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxk
KCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBh
Z2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVu
dFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFy
LT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lk
dGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdo
dCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3Rl
cCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAg
ICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdo
dCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7
Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVM
YXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
YXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFi
b3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1
ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVw
ZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25h
cE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAh
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2Ug
dXMgdG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBu
ZWVkCi0gICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1h
eCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xh
bXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9u
Zy4gVGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGlu
ZyByZWxhdGVkIGVudHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0
byBmaXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5
cyBiZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQg
d2hvc2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0v
MTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9m
ZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1w
ZWRTY3JvbGxPZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQot
ICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Ny
b2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBv
c2l0ZWQoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKLSAgICB9
Ci0KLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVk
c1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0
YXRlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RS
ZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9s
bGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMo
bG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBzY3JvbGxZID0g
U2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGw7CisgICAgfSBlbHNlIGlmIChpbnRl
cnNlY3RIZWlnaHQgPiAwKQorICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIGlzIHBhcnRpYWxs
eSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9yCisgICAgICAgIHNj
cm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihhbGlnblkpOworICAg
IGVsc2UKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZp
b3IoYWxpZ25ZKTsKKyAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nl
c3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgorICAgIC8vIHRoYW4g
dGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRo
ZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgorICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdu
bWVudDo6QmVoYXZpb3I6OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+
IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3Qu
aGVpZ2h0KCkpCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpB
bGlnbkJvdHRvbTsKIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNv
bXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KKyAgICBMYXlvdXRVbml0IHk7CisgICAgaWYgKHNjcm9s
bFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGwpCisgICAgICAgIHkgPSB2
aXNpYmxlUmVjdC55KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGln
bm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgp
ICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOworICAg
IGVsc2UKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwogCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXpl
KCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25z
dAordm9pZCBSZW5kZXJMYXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25J
bldpbmRvdykKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhl
IHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOworICAg
IEludFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkud2luZG93VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKKyAgICBzY3JvbGxS
ZWN0VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExheW91dFNp
emUoMSwgMSkpLCBmYWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFs
aWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRn
ZUlmTmVlZGVkLCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiB9CiAK
LXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK1N0cmluZyBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcg
aWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBp
biBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwg
cGFpbnQKLSAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBu
b3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxs
IGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRo
ZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRl
ZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVl
IHRvIHJ1biwKLSAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4g
dGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25k
IHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCBy
aWdodC4KLSAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpIHsKLSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFp
bnRPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNv
bmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYg
KChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYg
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFt
Z2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJv
bHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdM
YXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5n
Um9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7Ci0KLSAgICAgICAgcGFpbnRpbmdSb290
LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50
aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5
Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAo
cGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBt
X2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxi
YXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lk
Z2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92
ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwg
YSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50
T2Zmc2V0KSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFy
ZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4
dCwgZGFtYWdlUmVjdCk7Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpKQotICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0g
ICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9z
LCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcs
IHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICAvLyBXZSBmaWxs
IG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0
IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJv
eC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBk
YW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBp
dCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29u
dGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKHRyYW5z
Zm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12
b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCkKLXsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRh
bWFnZVJlY3QpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIo
KSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAot
ICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJ
bnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyBibGVuZCBtb2RlIl9zKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBj
b3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAv
LyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFy
cygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihj
b250ZXh0LCBhYnNSZWN0KTsKLX0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotdm9pZCBSZW5kZXJM
YXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdl
PiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0g
ICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VI
aVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAy
eCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVy
SW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFn
ZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3Ju
ZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXpl
Q29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVD
b3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5l
ckltYWdlLT5zaXplKCk7CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9o
IGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAg
ICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygp
OworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAg
ICAgIGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29y
bmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVj
dC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhl
aWdodCgpKTsKLSAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0g
ICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVz
aXplclNpemUpKTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91
dFJlY3QocmVzaXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJT
aXplLCBjb3JuZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGlt
YWdlUmVjdCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQorTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAogewotICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlv
dXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVj
dC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0
cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAg
ICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJB
YnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6
ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUg
YXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9s
bGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFu
ZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxi
YXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6
ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJz
UmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3Ju
ZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAg
ICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcg
fSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNv
bnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAog
ewotICAgIGlmICghY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQp
OworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3Jp
dGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsK
IH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK0xheW91dFVuaXQgUmVu
ZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1f
dkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29u
dHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6
Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2gg
dGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29u
dGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92
QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5m
bGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0
LngoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQor
TGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcik7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0
IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBG
b3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4
WCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBp
eGVsT2Zmc2V0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50
RmxhZ3MsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9u
Q29udGV4dCogZXZlbnRSZWdpb25Db250ZXh0KQpAQCAtNDE5MiwxNyArMjU5Miw2IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChm
YWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRp
b25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290KQotewotICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0
aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRT
aXplKCksIHN1YnRyZWVQYWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAg
ICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJl
bmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBh
aW50QmVoYXZpb3IsIGNvbnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBp
bmdSdWxlIHJ1bGUpCiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigp
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyMjUsNyArMjYxNCw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93
LiBUaGUgY29uZGl0aW9uIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRo
YXQgdGhlIG92ZXJmbG93IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBi
bG9jayBjaGFpbiBzbyB3ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5
ZXIqIGxheWVyID0gcnVsZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBw
YXJlbnQoKTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBp
ZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZs
b3dTY3JvbGxDb250ZW50KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAg
ICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBv
c2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAm
JiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5y
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCku
aGFzQm9yZGVyUmFkaXVzKCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFp
bigqbGF5ZXIpKSB7CkBAIC00NDI3LDcgKzI4MTYsOCBAQCBib29sIFJlbmRlckxheWVyOjpzZXR1
cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGJvb2wm
CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGhhdmUgdG8gZGlzYWJsZSBzdWJwaXhlbCBx
dWFudGl6YXRpb24gZm9yIG92ZXJmbG93IGNsaXBzIG9yIHN1YmZyYW1lcyBvbmNlIHdlIHNjcm9s
bCB0aG9zZQogICAgIC8vIHRoaW5ncyBvbiB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KLSAgICBib29s
IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93
bmVyRWxlbWVudCgpKTsKKyAgICBib29sIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0g
IXNjcm9sbGFibGVMYXllcigpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKTsKKyAgICBib29sIGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyA9IChyZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpICYmIGRvZXNOb3RVc2VDb21wb3NpdGVkU2Nyb2xsaW5nKSB8
fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWlu
ZyA9ICFwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7
CiAgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRp
bmcgfHwgaXNab29taW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOwpAQCAtNDcyMiw4ICszMTEyLDggQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxh
eWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFn
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJz
ICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvKTsKKyAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBzY3JvbGxh
YmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAog
ICAgICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxs
ZWQgY29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0
IHRvIHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODEsNiBAQCB2
b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgbG9jYWxQYWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVu
dCA6IGxheWVyRnJhZ21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChj
b250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7
Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQo
dG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94
TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAg
ICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVl
KTsKLSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxl
Y3RFdmVudFJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFn
bWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IGxvY2FsUGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
cikKIHsKICAgICBBU1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsK
QEAgLTUyMzYsNyArMzYxNCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAg
ICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAg
ICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3Qp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxl
QXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRl
ckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU0Njcs
OSArMzg0NSwxMSBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5k
ZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAgICBvZmZzZXRGcm9t
QW5jZXN0b3Iocm9vdExheWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAg
IGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIHJlbmRlcmVyKCku
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwotICAgICAgICByZXR1cm4g
dGhpczsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxh
eWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkgJiYgc2Ny
b2xsYWJsZUxheWVyLT5oaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBo
aXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZW5kZXJlcigpLnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIHJldHVy
biB0aGlzOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gTmV4dCB3ZSB3YW50IHRvIHNlZSBp
ZiB0aGUgbW91c2UgcG9zIGlzIGluc2lkZSB0aGUgY2hpbGQgUmVuZGVyT2JqZWN0cyBvZiB0aGUg
bGF5ZXIuIENoZWNrCkBAIC01NTQyLDM1ICszOTIyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0
VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdt
ZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5G
cmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50
UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3Ju
ZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29u
c3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRG
cm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdt
ZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNp
emUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAg
ICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJv
eFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0g
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAt
IG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5G
cmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lmxh
eWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdt
ZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAg
ICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50
KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNv
bnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0
ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjAxMSwzNiArNDM2Miw2IEBAIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OmxvY2FsQ2xpcFJlY3QoYm9vbCYgY2xpcEV4Y2VlZHNCb3VuZHMpIGNvbnN0
CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCi12b2lkIFJlbmRlckxheWVyOjphZGRCbG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYgYm91bmRzKQotewotICAgIG1fYmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKLXsK
LSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKLSAgICBmb3IgKFJl
bmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkK
LXsKLSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7Ci0KLSAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7
Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8v
IEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmIChyZW5kZXJlcigpLmhh
c0NsaXAoKSkKLSAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdp
b25zIG5vdCBhY2NvdW50ZWQgZm9yLgotICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQogYm9vbCBSZW5kZXJMYXll
cjo6aW50ZXJzZWN0c0RhbWFnZVJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBjb25zdCBPcHRpb25hbDxMYXlvdXRS
ZWN0PiYgY2FjaGVkQm91bmRpbmdCb3gpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIGV4YW1pbmUg
dGhlIGNhbnZhcyBhbmQgdGhlIHJvb3QuCkBAIC02MzM3LDIxICs0NjU4LDYgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aGFzQ29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcg
JiYgbV9iYWNraW5nLT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVy
TGF5ZXI6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBu
dWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXll
ciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0
cjsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1Rv
V2luZG93ID0gIWlzQ29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygp
OwpAQCAtNjM4MiwxMSArNDY4OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xp
cFBhdGgoT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0
dXJuIHBhaW50RmxhZ3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRp
bmdDbGlwUGF0aFBoYXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2
ZWFsQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8
IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWlu
dGluZ0xheWVyRGVzY2VuZGFudCgpKQpAQCAtNjUxMCw4ICs0ODExLDEyIEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OnNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXNOb3Jt
YWxGbG93T25seSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNPdmVy
bGF5U2Nyb2xsYmFycygpCi0gICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKQor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAg
IGJvb2wgaGFzT3ZlcmxheVNjcm9sbGJhcnMgPSBzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xsYWJs
ZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZyA9IHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKKworICAgIHJldHVybiBoYXNPdmVybGF5U2Nyb2xsYmFycwor
ICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nCiAgICAgICAgIHx8IHJlbmRlcmVy
KCkuaXNUYWJsZVJvdygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAg
ICB8fCByZW5kZXJlcigpLmlzVmlkZW8oKQpAQCAtNjYyOCw3ICs0OTMzLDcgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zp
c2libGVDb250ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNW
aXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xz
KCk7CisgICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8
IChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250
cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50
ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2MzgsNyArNDk0Myw3IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3Qq
IHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJl
cigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
cmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7
CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChzY3JvbGxhYmxlTGF5
ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAg
ICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY2Mywz
OCArNDk2OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVk
Q29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hp
bGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0g
ICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlz
dCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExp
c3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBi
b3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5z
dHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBp
biB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0
aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5
bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2Fs
U2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVy
dGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwg
VmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRz
SG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNW
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNj
cm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4K
LSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVu
YWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpv
bnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAg
bV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRp
Y2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBt
X3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0K
IHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hv
dWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3MTcsNiArNDk5MCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlCiAKICAgICAvLyBGSVhNRTogUmVuZGVyTGF5ZXIgYWxyZWFkeSBoYW5kbGVz
IHZpc2liaWxpdHkgY2hhbmdlcyB0aHJvdWdoIG91ciB2aXNpYmlsaXR5IGRpcnR5IGJpdHMuIFRo
aXMgbG9naWMgY291bGQKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVkIGFsb25nIHdpdGggdGhlIHJl
c3QuCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7
CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBv
bGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7
CiAgICAgICAgIGlmIChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUo
KS51c2VkWkluZGV4KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMDAs
MTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZp
c2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAg
ICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYg
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJl
cigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9y
KCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAg
ICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8
UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0
eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51
bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0K
IAotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNv
IHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2
ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAs
MTUgKzUwMjEsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7
CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBj
dXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9o
QmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHls
ZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQog
CiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNm
b3JtKCk7CkBAIC02Nzc5LDk4ICs1MDQ3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNl
bmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRl
cmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlz
U2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7
Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
LSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVk
KSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRv
dWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYg
d2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBh
cyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAg
YXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0s
ICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIp
IHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCks
IFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQg
YmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFy
ZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
LXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVz
aXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICgh
cmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92
ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBj
aGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAg
bV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZs
ZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxl
Y3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MTc4LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJu
IHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29s
IFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0
CkBAIC03MjQ4LDExICs1NDI0LDEzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVl
UmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBz
dHJlYW0gPDwgIiAiOwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7
Ci0gICAgc3RyZWFtIDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxp
bmdTY29wZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxh
YmxlTGF5ZXIoKSkgeworICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLT5ib3hTY3Jv
bGxpbmdTY29wZSgpOworICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgICAgICBzdHJlYW0gPDwg
c2Nyb2xsYWJsZUxheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKLSAgICBzdHJlYW0g
PDwgIiAiOworICAgICAgICBzdHJlYW0gPDwgIiAiOworICAgIH0KIAogICAgIG91dHB1dElkZW50
KHN0cmVhbSwgZGVwdGgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmlu
ZGV4IGQ4MzczYWFlODE5ZDRlYjk5ZDZiMjdkY2NlNWVlZTA5NGZlZTliZjQuLjA0NDFkZGFiNzJk
MmFlZWI4NmMyNTQ0ZmUwMjVjMjA4NTY0OTdlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCkBAIC01MSw3ICs1MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNs
dWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYv
TWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtMTQwLDIwICsxMzksMjkg
QEAgc3RydWN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKICAgICBTY3JvbGxCZWhhdmlv
ciBiZWhhdmlvciB7IFNjcm9sbEJlaGF2aW9yOjpBdXRvIH07CiB9OwogCi11c2luZyBTY3JvbGxp
bmdTY29wZSA9IHVpbnQ2NF90OwotCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihSZW5kZXJMYXllcik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3Jv
bGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxS
ZW5kZXJMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVw
bGljYTsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29t
cG9zaXRvcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOworCisgICAg
ZW51bSBjbGFzcyBMYXllclR5cGUgeworICAgICAgICBTdGF0aWMsCisgICAgICAgIFNjcm9sbGFi
bGUKKyAgICB9OwogCiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBMYXllclR5cGUgbGF5
ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclR5cGU7IH0KKworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIoKSBj
b25zdDsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0
aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2
b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAtMjIzLDYgKzIzMSw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RN
dXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworCiBwcml2YXRlOgog
ICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVl
KS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjIsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wg
Y2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDIsMTQgQEAgcHVibGlj
OgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2Nh
dGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmlu
YWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXpl
IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Ny
b2xsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xs
aW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0g
ICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxh
YmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Ny
b2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkg
ZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNj
cm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNj
cm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQg
eCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9Z
UG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2
b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwg
PSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBt
YXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0
KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lP
ZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgp
LngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xh
bXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bklmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXll
ciB0aGF0IGlzIHNjcm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUg
UmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZp
ZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsK
LQotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFu
Z2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRv
Y3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBM
YXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJl
Y3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0
OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAg
IGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhh
c1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9p
ZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIo
U2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxi
YXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAg
Ym9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAg
IFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
aEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBj
b25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRl
U25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9y
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0
aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5h
bDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Ny
b2xsKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXll
ciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0
aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJl
IGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1
cC10by1kYXRlKS4KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBj
b25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xz
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2Fs
UG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJl
c3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZy
b21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAg
dm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9p
bnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lk
IHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29u
c3QgSW50UG9pbnQmKTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBy
ZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAg
IGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAg
ICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0K
ICAgICBib29sIGlzUmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZp
ZXdMYXllcjsgfQogICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGlj
U3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2lu
Z0NvbnRleHQ7IH0KQEAgLTU1NSw5ICs0NjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxs
UmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNo
YWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVD
b21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVy
cyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBl
IHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0
cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2
b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAg
dm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJs
b2NrU2VsZWN0aW9uR2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1f
dmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJs
ZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hh
c1Zpc2libGVDb250ZW50OyB9CkBAIC02MzcsNiArNTQwLDggQEAgcHVibGljOgogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7
CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tP
cmRlcigpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcihDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2
ZSB0byB3aGljaCBjbGlwcGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAg
ICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgs
NyArNjAzLDYgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJv
b3QgPSBudWxscHRyLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9y
aWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBF
dmVudFJlZ2lvbkNvbnRleHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsK
LSAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVj
dHNDb250ZXh0IHsKICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciog
aW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0
T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg4LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3Np
dGlvbikgeyBtX3N0YXRpY0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNl
dFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2Nr
UG9zaXRpb24gPSBwb3NpdGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBi
b29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsg
bV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmc7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJl
dHVybiByZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMg
dHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0
KCk7IH0KQEAgLTg1OCwyMCArNzU3LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2lu
ZyogZW5zdXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWlu
Z0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkg
Y29uc3QgZmluYWw7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAg
dm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBo
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRo
ZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3Rv
ciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9s
bGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xs
aW5nU2NvcGU7IH0KLSAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxp
bmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAg
ICAgYm9vbCBwYWludHNXaXRoVHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBw
YWludEJlaGF2aW9yKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50
KCkgfHwgaGFzQmxlbmRNb2RlKCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIo
KS5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWlu
dEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7
CkBAIC04ODUsMTEgKzc3Myw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBn
aXZlbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9s
bGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnM7IH0KLSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyA9IGRpcnR5U2Nyb2xsYmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNv
bnN0OwogICAgIGJvb2wgcmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsK
IApAQCAtOTE4LDggKzgwMSw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdGcmFnbWVudGVkRmxvd0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5k
ZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAg
ICAgdm9pZCBzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJh
Y2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0Zy
ZXF1ZW50bHkoKSBjb25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGlu
Z0ZyZXF1ZW50bHkoKTsgfQogCkBAIC05MzAsNyArODExLDcgQEAgcHVibGljOgogICAgIGVudW0g
Y2xhc3MgRXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENo
YW5nZSwgU3R5bGUsIE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2
ZW50UmVnaW9uKEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBk
ZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRp
b24oKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtMTAxMCw5ICs4OTEsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwot
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0
ZUxheWVyUG9zaXRpb25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAg
ICAgICAgICAgID0gMSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAg
ICAgICAgICA9IDEgPDwgMSwKQEAgLTEwMzAsMTYgKzkwOCw2IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVw
ZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsRmxhZyB7Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAg
ICAgICAgICAgICA9IDEgPDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRB
bmNlc3RvciAgICAgID0gMSA8PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZs
b3dDbGlwICAgICAgICAgPSAxIDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0
IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJM
YXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBM
YXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9u
KCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDcyLDcgKzk0MCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhh
dmVUcmFuc3BhcmVuY3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2
b2lkIHBhaW50Rm9yZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25z
dCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9v
dEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZv
clJlbmRlcmVyKTsKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJik7CiAgICAgdm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
cik7CiAgICAgdm9pZCBwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWlu
dExheWVyRmxhZz4pOwpAQCAtMTA5OSw2NCArOTY2LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Ym9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYs
IEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5z
aWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50
JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNm
b3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVy
KiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwK
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUq
IHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7
CiAKICAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29s
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVB
cmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29u
dGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZp
bmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lk
ZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwot
I2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0
IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xs
T2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAg
IHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTEx
OTYsMTQgKzEwMTMsNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNv
bHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNj
b3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50
U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2
b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwot
CiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0
aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsg
fQpAQCAtMTIxNywyMCArMTAyNiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxv
d0xlZnQoKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAot
ICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpv
bnRhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxDb3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAg
ICAgSW50UmVjdCBzY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVy
IDogcmVzaXplcjsKLSAgICAgICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMg
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJv
bHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBM
YXllclR5cGUgbV9sYXllclR5cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBv
c2l0aW5nRGlydHlCaXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDog
MTsKQEAgLTEyNDQsMTAgKzEwNDAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93
TGlzdERpcnR5OiAxOwogICAgIGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0g
ICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6
aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAg
IGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSA6IDE7CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8g
SWYgaGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdh
bGsgb3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1
OSwxNCArMTA1MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMg
KGFuZCB0aGVyZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYmxlbmQpLgogICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8g
QSBzdGF0ZSBiaXQgdHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2Eu
Ci0gICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBh
aW50U3RhdHVzIDogMjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250
ZW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAg
ICAgYm9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9o
YXNWaXNpYmxlRGVzY2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA6IDE7CiAgICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAg
ICAgYm9vbCBtX2JlaGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8g
SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29t
cG9zaXRlZFJlYXNvbgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKLSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3Np
dGlvblJlY29uY2lsaWF0aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzIDogMTsKLSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwot
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2Vk
IDogMTsKICNlbmRpZgpAQCAtMTMzOCwyNSArMTExNyw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhl
IGxheWVyJ3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNj
cm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRp
b24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdo
dCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAg
IC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFy
cy4KLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4g
bV92QmFyOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0
c0NhY2hlOwogICAgIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dDsKLQotICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRz
PFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxT
Y3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+
IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJN
YXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBD
YWNoZWQgbm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRz
IHdpdGggc3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5s
aW5lUG9zaXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0x
MzY2LDEwICsxMTI4LDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRl
bmRlZCB0byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAg
UmVuZGVyUHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVy
cyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5k
ZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRy
PFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhl
IGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0
IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4g
bV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0
Mjc4Yzg4M2EyZjM5MDYxZS4uY2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKQEAgLTUzLDEzICs1MywxNCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVu
dC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFj
a2VyLmgiCisjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93Lmgi
CiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5o
IgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAK
ICAgICBBU1NFUlQobV9vd25pbmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9z
aXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsK
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRl
ZExheWVycygqc2Nyb2xsYWJsZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXll
cnMoKTsKIH0KQEAgLTQyMSwxMSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVD
b3ZlcmFnZSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAK
ICAgICBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tp
bmc6OkNvdmVyYWdlRm9yVmlzaWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJp
bmdMaXZlUmVzaXplID0gZnJhbWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWlu
aW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xs
YWJsZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5n
TGl2ZVJlc2l6ZSAmJiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkK
ICAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9y
aXpvbnRhbFNjcm9sbGluZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9
IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAg
cmV0dXJuIHRpbGVDb3ZlcmFnZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJl
bmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJl
bmRlckxheWVyKgogICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRl
ZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBM
YXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFu
Y2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNv
bXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNz
TGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0
b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlv
dXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAg
ICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0
b3ItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlv
dXRTaXplKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNl
dCgpKTsKKyAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3Jv
bGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0
ZWRCb3VuZHMubG9jYXRpb24oKSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3gu
c2l6ZSgpKTsKICAgICB9CiAKICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBA
IC0xMjg1LDcgKzEyODksOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0
cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVu
dHJ5LmNsaXBwaW5nTGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUo
KSk7CiAKICAgICAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7
Ci0gICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBE
YXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VS
VChlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAg
ICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNs
aXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAg
ICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZz
ZXQpOwogICAgICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zm
c2V0KTsKQEAgLTEzOTAsNyArMTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAg
ICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENv
bnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwog
ICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExh
eW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5o
ZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25p
bmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFi
bGVMYXllcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyAr
MTQxMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0Jv
eE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9s
bFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhl
aWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsV2lkdGgoKSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlm
IChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGlu
Z0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+
c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNl
dChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1
cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFz
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAv
LyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8g
dG91Y2ggdGhlIGxheWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVz
ZSBqaXR0ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9m
ZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3du
aW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwor
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbih0cnVlKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1w
bGVtZW50IHRoZSBjb250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMg
bGF5ZXIsIHJhdGhlciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBz
ZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVy
UG9zaXRpb25BY3Rpb246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAg
IH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1pl
cm8oKSk7CkBAIC0xOTExLDEyICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIo
KSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5n
TGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Ny
b2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWly
ZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWly
ZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNM
YXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAg
IGlmICghbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0
LDEyICsxOTM5LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENv
cm5lckxheWVyKCkgY29uc3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5y
ZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0
ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJl
c2l6ZXJSZWN0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYg
KGNvcm5lclJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRv
IHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwot
ICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJh
ciA6IG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGlj
YWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAg
YXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDog
c2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVp
cmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwx
MiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRl
T3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJM
YXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAg
ICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFu
Z2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgq
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAg
ICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdl
KG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293
bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQog
CiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRz
SG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xs
YmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXll
ci0+aGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAg
ICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94
UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXll
ci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQo
c2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29u
dGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5
ZXIsIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBs
YXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3ND
b250ZW50KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVz
ZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVy
cykKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7
CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29u
dGVudHNMYXllcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1v
dmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAg
ICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21w
b3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUxheWVyKCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVy
KG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVy
KG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNT
Y3JvbGxpbmdMYXllcnMpCiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIo
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRh
aW5lckxheWVyKQotICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9v
d25pbmdMYXllcik7Ci0gICAgCisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAg
ICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBj
b21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUxheWVyKCkpOworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMw
MTAsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUlu
UmVjdChjb25zdCBMYXlvdXRSZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9s
bGVkQ29udGVudHNMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50
KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwog
ICAgICAgICBGbG9hdFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFp
bnRpbmc7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xh
eWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNj
cm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBs
YXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJl
bmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAg
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0
eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciog
Z3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVy
KSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAg
ICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFp
bnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Ny
b2xsYmFycyk7CisgICAgICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAg
ICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBh
aW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNj
cm9sbGJhcnMpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxh
eWVyLnBhaW50TGF5ZXJXaXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50Rmxh
Z3MpOwogCkBAIC0zMzIzLDE3ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpw
YWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAg
ICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAK
ICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFs
U2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25p
bmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0
LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXll
ci52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NF
UlQobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xs
YmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCks
IGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxh
eWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25p
bmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0
KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUxheWVyKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAg
IGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVk
Q2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnko
Y29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9s
bENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENs
aXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9p
bnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1l
ZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwg
SW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAg
IHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2
NjY5MDY4NWZjZTZiMWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi5lNTZmYzJkNzY1ZGRhODkyOTQ1M2U3
M2VhOTgyYTFjZWMwOTI2ZGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJM
YXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29t
cG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJl
cXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXll
ci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxl
TGF5ZXIoKSB8fCAhbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlv
dXRVcFRvRGF0ZSA9PSBMYXlvdXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBA
IGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zvckxh
eWVyKGNvbnN0IFJlbmRlckxheWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJm
bG93U2Nyb2xsTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXll
ciYgb3ZlcmZsb3dTY3JvbGxMYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5n
U2NvcGUoKSA9PSBvdmVyZmxvd1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
KyAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxv
d1Njcm9sbExheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xs
YWJsZUxheWVyKCktPmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5z
Y3JvbGxhYmxlTGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9v
bCYgc2F3SW50ZXJtZWRpYXRlTGF5ZXIpCkBAIC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAg
ICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5n
RGVzY2VuZGFudHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZy
b21TY3JvbGxDb29yZGluYXRlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5
LDExIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9s
bGluZ05vZGVGb3JWaWV3cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8v
IEZJWE1FOiBhbmNlc3RvckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hv
dWxkIGJlY29tZSBhIHJlZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7
CisgICAgaWYgKCFhbmNlc3RvckxheWVyKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnZpc2libGVTaXplKCkpKTsK
KyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNj
cm9sbGFibGVSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpA
QCAtNDU4OCwxMSArNDU5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
U2Nyb2xsaW5nTm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAg
ICAgZml4ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNM
YXllcigpLAogICAgICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpLCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxz
ZSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXll
cigpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdy
YXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIo
KSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIs
IG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKSA6IG51bGxwdHIsCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBz
Y3JvbGxhYmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHIgfSk7
CiAgICAgfQogfQogCkBAIC00NjMwLDggKzQ2MzgsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVu
ZGUKICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVy
KQogICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVy
LCAqc2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xs
aW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2Rl
SUQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNj
cm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFu
Z2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0
ZS5wYXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlTGF5
ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9k
ZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ3Njcs
MjAgKzQ3NzcsMjEgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9u
b3VzU2Nyb2xsaW5nTm9kZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBy
ZWxldmFudFNjcm9sbGluZ1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwg
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7CisgICAgYXV0byByZWxldmFudFNjcm9sbGluZ1Nj
b3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlJiBsYXllcikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJl
bmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CiAg
ICAgICAgIHJldHVybiBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfTsKIAot
ICAgIGF1dG8gcm9vdFNjcm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVM
YXllcigpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5zY3Jv
bGxhYmxlTGF5ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCiAgICAgZm9yIChhdXRv
JiByZW5kZXJlciA6ICpzbG93UmVwYWludE9iamVjdHMpIHsKICAgICAgICAgYXV0byBsYXllciA9
IHJlbmRlcmVyLmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAg
IGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGlu
Z1Njb3BlKHJlbmRlcmVyLCAqbGF5ZXIpOworICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0g
cmVsZXZhbnRTY3JvbGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xsaW5nU2NvcGUpIHsK
ICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0gYXN5bmNTY3JvbGxh
YmxlQ29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFTU0VSVChlbmNsb3Np
bmdTY3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMCBAQCBTY3JvbGxhYmxlQXJl
YSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbGluZ05vZGVJ
RChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNj
cm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdl
dCgpOworICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdl
dCgpLT5zY3JvbGxhYmxlTGF5ZXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwg
UmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM0LDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhC
YWNraW5nKFJlbmRlckxheWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxs
eSBiZSBjYWxsZWQgZnJvbSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5
ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDkzOCw3ICs0OTQ5LDcgQEAgdm9pZCBMZWdhY3lX
ZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25z
dHJhaW5lZExheWUKICAgICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVk
TGF5ZXJzKGxheWVyTWFwLCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xh
eWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikK
K3ZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNr
aW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIg
KzQ5NzYsMTIgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1
bnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2Vi
S2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5
ZXImIGxheWVyKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjph
ZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1f
c2Nyb2xsaW5nTGF5ZXJzLmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9s
bGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBs
YXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNj
cm9sbGFibGUmIGxheWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYg
KG1fc2Nyb2xsaW5nTGF5ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9s
bENvbnRhaW5lckxheWVyID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9y
bUxheWVyKCk7CkBAIC00OTc5LDcgKzQ5OTAsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGlu
Z0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQog
ICAgIH0KIH0KIAotdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpy
ZW1vdmVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGlu
Z0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5
ZXIpCiB7CiAgICAgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgKaW5kZXggN2E4NWIyNjk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVh
OWVmNTYwNGY0NzdhMzBjYmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAog
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
VXBkYXRlci5oIgogI2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApA
QCAtMTIxLDIwICsxMjEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxp
bmdMYXllcnMoKTsKICAgICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAg
ICAKLSAgICB2b2lkIGFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCBy
ZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOwor
ICAgIHZvaWQgYWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAg
dm9pZCByZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJM
YXllckJhY2tpbmcmKTsKIAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJl
bmRlckxheWVyJik7CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVu
ZGVyTGF5ZXImKTsKIAotICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2
b2lkIHJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAg
IHZvaWQgdXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0
ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xp
ZW50JiBtX2Nocm9tZUNsaWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9s
bGluZ0xheWVyczsKKyAgICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xs
aW5nTGF5ZXJzOwogICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllcnM7CiAKICAgICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWlu
ZWRMYXllcnM7CkBAIC0zNTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBj
b25zdDsKIAotICAgIHZvaWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRl
ckxheWVyJik7CisgICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9p
ZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92
ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVy
TGF5ZXJCYWNraW5nJik7CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXll
clNjcm9sbGFibGUmKTsKIAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAg
ICAgdm9pZCBzZXRUcmFja3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFj
a2luZ1JlcGFpbnRzID0gdHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0
NDc1NWVmNzMxMDRhYWY0YTA4MTUxYThjYjFkLi5kM2VjNDNhZGNhMzNjMjY1YzhjMGUwZjIzMGQ2
MDQwMGJmNjM0MTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9pZCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpkZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
OjpjcmVhdGVMYXllcigpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBtX2xheWVyID0g
bWFrZVVuaXF1ZTxSZW5kZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1FOiBIb29rIGluIG9w
dGltaXphdGlvbiB0byBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUsIGlmIG5lY2Vz
c2FyeS4KKyAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGU+KCp0
aGlzKTsKICAgICBzZXRIYXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5pbnNlcnRPbmx5VGhp
c0xheWVyKFJlbmRlckxheWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVDaGFuZ2UpOwogfQog
CitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNjcm9sbGFi
bGVMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKSA6IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVyICYmIG1f
bGF5ZXItPmlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTIwOCw5ICsyMTQsOSBAQCB2b2lkIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xkU3R5bGUgJiYgc2Ny
b2xsU25hcENvbnRhaW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUoKm9sZFN0eWxlLCBu
ZXdTdHlsZSkpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGxheWVy
KCkpIHsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAg
ICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAg
ICAgICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAg
ICAgICAgIGZyYW1lVmlldy51cGRhdGVTbmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyOSwxMCBA
QCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBz
Y3JvbGxTbmFwQm94LT5sYXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUgPSBzY3JvbGxTbmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNj
cm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkg
ewotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZz
ZXRzKCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Ny
b2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IHNjcm9sbFNuYXBCb3gtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlzQm9keSgpIHx8
IHNjcm9sbFNuYXBCb3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yU2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4
IGEzYjNkY2FkY2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2YzA4MmY5YWI0
ZTFhNjZlM2JkYmM3ZWJkMzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOwor
Y2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3Rz
IHsKICAgICBMYXlvdXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVk
IGJ5IGVuY2xvc2luZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiAr
NDgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0Owog
ICAgIFJlbmRlckxheWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0K
IAorICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxh
eWVyKCkgY29uc3Q7CisKICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2Us
IGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kYzY1YWEwM2UwMmZjMDU4ZjU2ZWRkNDdiNDg3M2E4ODUxNGFhNjEwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5j
cHAKQEAgLTAsMCArMSwyMDAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2Jl
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMp
IDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3RoZXIg
Y29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1Pgor
ICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFu
IEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1
cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0aWsu
bWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29tPgor
ICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
KgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNl
ZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5z
ZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAo
dGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24g
Mi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0
aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhl
IEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3
aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVu
ZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBv
ciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkK
KyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRo
ZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3Ig
dGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhl
IHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0
U2Nyb2xsaW5nU2NvcGUoKQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2Nv
cGUgPSAwOworICAgIHJldHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5FX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCitSZW5kZXJM
YXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXllcihyZW5kZXJl
ckxheWVyTW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisg
ICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNl
KQoreworICAgIG1faXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKKworICAgIGlmIChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBtX2JveFNjcm9s
bGluZ1Njb3BlID0gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3Bl
KCk7CisKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7
CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFz
IHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Ny
b2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAg
ICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGVs
ZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICB9Cit9
CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpCit7Cisg
ICAgaWYgKGluUmVzaXplTW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWlu
c1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgZWxl
bWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlz
KTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisK
K0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0lu
dFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAg
IHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50
U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkg
Y29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgp
OworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAg
IGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlz
aWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVu
dHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4g
Y29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0
aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Kj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGlu
YXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGlu
c3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXpl
LmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGlu
dCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZp
cmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rv
b2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3Bl
ZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRh
IC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3Rl
ZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFk
anVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkg
KyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50
U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJl
dHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVk
U2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7
CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8g
V2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQg
b2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBw
b3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQ
b3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RL
bm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlv
biA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91
c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRTaXplIGRlbHRh
ID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAgaWYgKGFicyhk
ZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhl
IGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRX
aWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xs
QnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisKKy8vIEZJWE1F
OiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUm
IGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEu
aXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNs
YW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCisgICAgICAgIHJlc3Ry
aWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFt
cCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQo
bmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAg
ICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3Qg
ZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRv
IHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9m
ZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNl
dC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQorICAgICAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxP
ZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBh
IHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vz
bid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBp
dCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNj
cm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwg
dGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93
bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24s
IFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYg
RU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBz
dHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVyKj4odGhpcykgPDwgIiByZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
KnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2
aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9u
KQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKKworICAgIFNj
cm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zm
c2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJl
bnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisK
KyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKKyAgICAg
ICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNs
YW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1
czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNT
Y3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zm
c2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3Vz
U2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5
cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xh
bXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZz
ZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBT
Y3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQg
IT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxU
b09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAg
U2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50
IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Ny
b2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZ
ZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9t
UG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAg
ICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0
aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRp
b24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OworfQorCitSZW5kZXJMYXllclNjcm9sbGFi
bGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVC
b3VuZGFyaWVzKSBjb25zdAoreworICAgIFJlbmRlclRyZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29w
ZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGU7CisKKyAgICBhdXRvIGlzQ29uc2lk
ZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpIHsKKyAgICAgICAg
cmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICB9OworCisgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6Oklu
Y2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQorICAgICAgICByZXR1
cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKTsKKworICAgIGZvciAo
YXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFt
ZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5n
Q29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgICAgIGlm
IChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIpKSB7CisgICAgICAgICAgICBBU1NF
UlQobmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gbmV4
dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAg
IFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKwor
ICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0No
YW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKKyAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJl
bGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQo
KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZs
b3coKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1go
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYm
IHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQor
eworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9
IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNP
dmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Ny
b2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Ny
b2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFs
U2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAg
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAg
Ly8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFy
IGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNj
cm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVD
aGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVy
dGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJh
cikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIp
OworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBl
bGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1
YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0
aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgor
ICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIp
OworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNl
dFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYK
KyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNl
IG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0
aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAg
bV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXIt
PnN0eWxlQ2hhbmdlZCgpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAg
IGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlm
IChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3Qo
KSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9k
ZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCkt
PnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOwor
fQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZVNjcm9sbGJh
cihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xs
YmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkp
KTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94
PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlciku
c3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFz
Q3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6
Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lk
Z2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJh
cih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0
b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVl
bEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9
CisgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Cisg
ICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Ny
b2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBv
cmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBz
Y3JvbGxiYXIgPSBudWxscHRyOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0
eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Ny
b2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhj
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXI7CisKKyAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6
WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChu
ZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigpICYmIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVy
KCktPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVy
ZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTbmFwT2Zmc2V0cygpCit7Cisg
ICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisgICAgaWYg
KCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3gg
PSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRz
Rm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5n
RWxlbWVudCgpKSwgKmJveCwgYm94LT5zdHlsZSgpKTsKK30KKyNlbmRpZgorCisKKyNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYW5kbGVU
b3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAv
LyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUg
aGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkU3Rh
cnRTY3JvbGwoKQoreworICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJm
bG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRFbmRTY3Jv
bGwoKQoreworICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9s
bCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRlU2Nyb2xsKCkK
K3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0
aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIHBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QKK3sKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmls
aXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5n
cygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgp
OworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElO
R19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChy
ZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dz
T3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGU6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFz
aG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBt
X2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0Cit7Cisg
ICAgaWYgKCFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhI
aXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNv
bnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBh
c3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1
bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Ny
b2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNj
cm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpIGNvbnN0Cit7CisgICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnJlc2l6ZXI7CisgICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDog
cmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJl
c2l6ZUNvcm5lcjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZs
b3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlD
b250cm9scykKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJm
bG93LgorICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhy
b3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAorICAgIC8vIG9uIHRv
cCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNz
LCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBz
aG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Ny
b2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2Ug
dGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAorICAgIC8vIGFu
ZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hl
IHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQg
dG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNP
dmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAgICAg
ICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAg
ICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3Jv
bGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFt
Z2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWlu
dE9mZnNldCk7CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9j
YWxEYW1nZVJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVy
KiBwYWludGluZ1Jvb3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlm
ICghcGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFp
bnRpbmdSb290LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWlu
dGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYg
KHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0g
bV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xs
YmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lk
Z2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92
ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwg
YSBkb2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50
cykuCisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50
T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFy
ZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4
dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisg
ICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xs
YmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBv
ZiB0aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRP
ZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIAorICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3Qs
IHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50UmVz
aXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsK
KyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVy
c2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0Lmlu
dmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0
eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIp
IHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRP
ZmZzZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywg
c2luY2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAo
IWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
KQoreworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25l
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsK
KyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXpl
ckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRl
UmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1f
cmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFp
bnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAg
ICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0
aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4
Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAo
IWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAg
Y29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJD
b3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5
b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQo
KSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90
PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29y
bmVyKSk7CisgICAgfQorfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChi
ZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9s
bE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0
aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHls
ZSBjaGFuZ2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzU5NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJv
eC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKKyAgICAg
ICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3Np
dGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xs
IG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisg
ICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8v
IEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9u
bHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAv
LyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNl
cnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAg
ICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5k
cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAg
ICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAg
ICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAg
ICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpOworI2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
CisKKyAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQo
KSkpOworCisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIHNldE5lZWRzQ29tcG9z
aXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCisgICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisK
KyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6ZSgpIGNvbnN0Cit7CisgICAgLy8g
V2UgbmVlZCBhIHNwZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhh
dmUKKyAgICAvLyBoYXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRs
eSIgY2xpcCB0aGVpciBjb250ZW50cywgc28KKyAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6
aW5nIHRoZW0gYWxzby4KKyAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
fHwgcmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBv
bGRPZmZzZXQpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdl
bmVyYXRlZCBjb250ZW50IGJ1dCBpcyBub3QgcmlnaHQgbm93LgorICAgIGlmICghaW5SZXNpemVN
b2RlKCkgfHwgIWNhblJlc2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVs
ZW1lbnQoKS0+cmVuZGVyZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERv
IHRoZXkgbWF0dGVyIGhlcmU/CisgICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBi
ZXR0ZXIgdG8gZGVhbCB3aXRoIHRoZW0gZXhwbGljaXRseS4KKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KGVsZW1lbnQtPnJlbmRlcmVyKCkpOworCisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLm1vdXNlUHJlc3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB6
b29tRmFjdG9yID0gcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOworCisgICAgYXV0
byBhYnNvbHV0ZVBvaW50ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5w
b3NpdGlvbigpKTsKKyAgICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1
dGVUb0NvbnRlbnRzKGFic29sdXRlUG9pbnQpKTsKKworICAgIExheW91dFNpemUgbmV3T2Zmc2V0
ID0gb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICBuZXdPZmZzZXQuc2V0
V2lkdGgobmV3T2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKKyAgICBuZXdPZmZzZXQuc2V0
SGVpZ2h0KG5ld09mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIAorICAgIExheW91
dFNpemUgY3VycmVudFNpemUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZh
Y3RvciwgcmVuZGVyZXItPmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgTGF5b3V0U2l6ZSBt
aW5pbXVtU2l6ZSA9IGVsZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhj
dXJyZW50U2l6ZSk7CisgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5p
bXVtU2l6ZSk7CisgICAgCisgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91
dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpKSB7CisgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRo
KCkpOworICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZz
ZXQud2lkdGgoKSk7CisgICAgfQorICAgIAorICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChj
dXJyZW50U2l6ZSArIG5ld09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1p
bmltdW1TaXplKSAtIGN1cnJlbnRTaXplOworCisgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxl
bWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOworICAgIGJvb2wgaXNCb3hT
aXppbmdCb3JkZXIgPSByZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6
OkJvcmRlckJveDsKKworICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNp
emUoKTsKKyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53
aWR0aCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVt
ZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFy
Z2luUmlnaHQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9
CisgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNC
b3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRk
aW5nRXh0ZW50KCkpOworICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9y
OworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3Bl
cnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NT
VW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQorCisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhv
cml6b250YWwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXIt
Pm1hcmdpblRvcCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQg
PSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVy
ZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZUhlaWdo
dCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWln
aHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQor
CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CisKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDEx
ODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nhcnkg
dG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgorfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1z
KTsKKyAgICBpZiAodGhpcyAhPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBn
ZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsKKwor
ICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2Yg
dGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0Ns
aXAgZmxhZ3M/CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlN
YXAsIElzT3ZlcmZsb3dTY3JvbGwpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQo
dGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcs
ICJSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCIpOworCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNm
b3Jtcyk7CisgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YWRkQmxvY2tTZWxlY3Rpb25HYXBz
Qm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykKK3sKKyAgICBtX2Jsb2NrU2VsZWN0aW9u
R2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcykpOworfQorCitzdGF0aWMg
dm9pZCByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKFJlbmRlckxheWVy
KiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCkKK3sKKyAgICBtX2Jsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyA9IEludFJlY3QoKTsKKyAgICByZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxl
Y3Rpb25HYXBzQm91bmRzKHRoaXMpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVu
ZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZWN1cnNpdmVseVJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQor
eworICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBp
ZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAg
ICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJl
Y3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlw
UmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2Nv
dW50ZWQgZm9yLgorICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5p
bnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQ
b2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgor
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3Rh
bmdsZShyZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZv
IHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJl
aGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIo
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Ny
b2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNl
OworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFj
a2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFw
aGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxs
cHRyOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUg
bGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5o
YXNTY3JvbGxpbmdMYXllcigpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFm
dGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNB
c3luY1Njcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29y
ZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJl
dHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQor
CitTdHJpbmcgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3Rh
dGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBh
eGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUu
b3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xs
QWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMg
Ym9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93
ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0
eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxl
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3gg
Y29uY2VwdC4KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNj
cm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYg
KGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsK
KyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAg
ICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxh
eW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxy
ZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURl
ZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJm
bG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAg
IHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAg
IC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdh
eXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRv
IGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUp
LgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93
WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7
CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUg
JiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZ
ICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsK
KworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9s
bGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRz
IGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0
byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlz
LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cg
PSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1
aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUu
CisgICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5
bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCho
YXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAg
bV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xs
YmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3Jv
bGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3Jv
bGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlv
cigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93
KTsKKyAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
ICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlm
IChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAg
ICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Cisg
ICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQor
ICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7
CisKKyAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJl
cigpLnJlcGFpbnQoKTsKKworICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93
WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9
PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91
dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVu
ZGVyZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1
dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdl
ZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgp
OworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50
ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlz
RmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxk
KCpyZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBh
Z2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVu
dFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFy
LT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAg
ICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lk
dGgoKSk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdo
dCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3Rl
cCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdo
dCgpKTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJMYXllciogbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwg
T3B0aW9uU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbEZsYWc+IGZsYWdzKQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5
ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNoaWxkLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbChnZW9tZXRyeU1hcCwgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZWN1cnNpdmVseVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoY2hpbGQsIGdlb21l
dHJ5TWFwLCBmbGFncyk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0
cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxh
Z3MpCit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJl
IGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQorICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGls
bCBkaXJ0eS4gVXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgorICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOworCisgICAgLy8gSWYgd2UgaGF2ZSBubyB2
aXNpYmxlIGNvbnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBv
aW50IHJlY29tcHV0aW5nCisgICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVt
cHR5LiBJZiBvdXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KKyAgICAv
LyByZWNvbXB1dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgorICAgIGlmICghbV9oYXNWaXNp
YmxlRGVzY2VuZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7CisgICAg
aWYgKHBvc2l0aW9uQ2hhbmdlZCkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rv
cik7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhh
c1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCisg
ICAgICAgIGNsZWFyQ2xpcFJlY3RzKCk7CisKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhh
c1ZpZXdwb3J0Q29uc3RyYWluZWRQb3NpdGlvbigpKQorICAgICAgICBmbGFncy5hZGQoSGFzU2Vl
blZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rvcik7CisKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVy
Zmxvd0NsaXApOworICAgIAorICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChm
bGFncy5jb250YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFn
cy5jb250YWluc0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVy
Zmxvd0NsaXAgfSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKKyAgICBib29sIGlzVmlzdWFs
bHlFbXB0eSA9ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKKyAgICBib29sIHNob3VsZFB1c2hBbmRQ
b3BNYXBwaW5ncyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAm
JiAhaXNWaXN1YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOworICAgIGlmIChzaG91bGRQdXNo
QW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2Vz
dG9yKHRoaXMsIHBhcmVudCgpKTsKKworICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3Rz
KSB7CisgICAgICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQg
cmVjdHMgZm9yIHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCisgICAgICAgIGlmIChpc1Zpc3Vh
bGx5RW1wdHkpCisgICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOworICAgICAgICBlbHNl
IC8vIEZJWE1FOiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2Fs
ayBkb3duIHRoZSB0cmVlLgorICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJl
cigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOworICAgIH0gZWxzZSBpZiAo
IXJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAg
ICAgLy8gV2hlbiBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBz
IGR1ZSB0byBsYXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlv
bnMgZnJvbQorICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMg
aGFwcGVucyB0aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkg
bmVlZCB0byBiZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCisgICAgICAg
IC8vIENoZWNrIHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KKyAgICAgICAgQVNT
RVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVw
YWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Cisg
ICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5k
ZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91
dGxpbmVCb3VuZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7
CisgICAgfQorCisgICAgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KHRoaXMsIGdlb21ldHJ5TWFwLCBmbGFncyk7ICAgIAorCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRl
IG91ciByZWZsZWN0aW9uIGFzIHNjcm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMg
bm90IGNoYW5nZSB0aGUgc2l6ZSgpCisgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJl
cGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9z
aXRpb24gd2FzCisgICAgLy8gdXBkYXRlZCBhYm92ZS4KKworICAgIGlmIChtX21hcnF1ZWUpIHsK
KyAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwor
ICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAgICBtX3Vw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAg
fQorCisgICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAgZ2VvbWV0cnlN
YXAtPnBvcE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSk7CisKKyAgICByZW5kZXJlcigpLmRv
Y3VtZW50KCkubWFya2VycygpLmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKK30KKwor
U2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xhbXBTY3JvbGxPZmZzZXQoY29u
c3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9s
bE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNl
dCgpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmZsb3dDb250
cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFp
bnRpbmdJbmZvKQoreworICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdt
ZW50cykgeworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgICAgICBwYWlu
dE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBs
b2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICAgICAgc25hcHBlZElu
dFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CisgICAgICAgIHJl
c3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5k
UmVjdCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpv
bnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3go
KS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNW
ZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVy
Qm94KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9j
ZXNzLgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRl
c3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRz
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBv
aW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFw
cGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0
byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5k
cywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJl
c2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7
IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAt
IEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkg
fTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJv
cmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3Ju
ZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXpl
clJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJS
ZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdt
ZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJ
bkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAg
ICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9u
LnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisK
KyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXpl
LnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsK
KyAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAt
IG92ZXJmbG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91
bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxh
YmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Ny
b2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3Jk
ZXJUb3AoKSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92
ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAg
ICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7
CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAg
ICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBu
byBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5
KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAg
c2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
KworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJv
eCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVw
YWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAg
ICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAg
bV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXND
b250cm9sbGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCku
aXNCb3goKSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQor
CitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30K
KworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
c2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0
OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29u
dGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAorewor
ICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAg
ICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVj
dDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNj
cm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJl
bmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2lu
dCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCks
IHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7CisgICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9s
bFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9k
ZUlEIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBi
YWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6
U2Nyb2xsaW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVD
b250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBz
Y3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAorewor
ICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9s
cygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAg
c2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZp
c2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3Np
dGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFj
ZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJT
cGFjZS5oZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAg
ICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJs
ZVJlZ2lvbnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRT
aXplIHN0cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwg
b3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNj
cm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsK
KyAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwor
ICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQo
c2Nyb2xsT2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAm
JiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFj
aGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xs
T2Zmc2V0LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0Lngo
KSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54
KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3Ry
ZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAt
IHZpc2libGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0
dXJuIEludFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5k
ZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwg
aXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxp
bmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNz
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxz
T3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVT
Y3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFp
blRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0g
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3It
PmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tT
Y3JvbGxBbmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7Cisg
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsg
bWVzc2FnZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCku
ZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIo
KS5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3Zl
VG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVy
ZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8v
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKwor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9z
aXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBT
Y3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRp
b24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAg
IC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBu
ZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xl
YXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25h
YmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxX
aWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Ny
b2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlv
bik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAg
ICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAg
ICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAg
ICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAg
c2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQg
PCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Ny
b2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChz
Y3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25G
cm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAg
ICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsK
KyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygp
IHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUu
CisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBt
ZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAo
cmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNl
dE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5k
ZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBv
c2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXll
cnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRh
dGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0
ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3
KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8g
SWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVy
cyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1
bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJx
dWVlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5n
IGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBs
YXllcgorICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMg
cmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAg
ICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0
aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAg
Ly8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVj
dCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBh
IHNpYmxpbmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRl
c2NlbmRhbnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAg
ICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRh
dGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0
aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVS
ZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpk
aWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUg
PSByZW5kZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRo
ZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAg
TGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJl
Y3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiBy
ZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIp
OworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQo
cmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFk
Rm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRl
UXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIo
KS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1v
dmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdB
bmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2lu
ZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBK
dXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVp
cmVzUmVwYWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVw
YWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNj
cm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgp
LmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xs
c092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7
CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpCit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXll
cnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQg
dG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAg
Ly8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJl
LgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2lu
Z0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBp
ZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9y
KCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBv
c2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXll
cnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAg
ICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tp
bmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCku
dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwg
Y29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQor
ICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9u
KCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1
cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAg
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNP
dmVyZmxvdykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigp
LnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2li
bGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZp
c2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZs
b3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxz
ZTsKKyAgICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVW
aWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9s
bGFibGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAg
ICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhp
cyk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAg
ICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OworICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKwor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgewor
ICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CisgICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBs
aXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJl
Y2FtZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0
b3VjaCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zm
c2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICB9CisgICAgCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hC
YXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJl
Y3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1f
cmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIFJlbmRlckVs
ZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7
CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFs
UmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29y
bmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFj
b3JuZXIpIHsKKyAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3Vt
ZW50KCksIFdURk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBz
aG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+
c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxp
emVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUo
V1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clNjcm9sbENvcm5lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3Jv
bGxDb3JuZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBk
YXRlUmVzaXplclN0eWxlKCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9
IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8gcmVzaXplciA9IHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUo
KSkgOiBudWxscHRyOworCisgICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXpl
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAg
ICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVu
ZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1F
OiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1f
cmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0
aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShX
VEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIoKQoreworICAgIGlmICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAg
bV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3Ju
ZXJSZWN0KQoreworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxv
YXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNp
emVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVz
aXplclNpemUuc2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAg
IHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29y
bmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAg
IGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAg
ICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3Ju
ZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0
LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVp
Z2h0KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAg
ICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNp
emVyU2l6ZSkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47
CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0
UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNp
emUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1h
Z2VSZWN0KTsKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpPdmVyZmxvd0NvbnRyb2xSZWN0
cyBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFy
cyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdElu
Y2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlz
Tm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Cisg
ICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFy
ID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9u
T3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5n
ZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6
ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJv
b2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9s
bGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIg
JiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyKSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIg
aXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJ
bnRTaXplIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVy
dGljYWxTY3JvbGxiYXJXaWR0aAorICAgICAgICB9OworICAgIH0KKworICAgIE92ZXJmbG93Q29u
dHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5z
aGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsK
KyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5z
aGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0
aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFy
UmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0
aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFy
UmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFy
UmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQu
dmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVj
dCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVm
dENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAg
fTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3Jv
bGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVy
KSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxv
Y2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2Fs
UmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Ny
b2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVj
dCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTWFycXVlZSgpCit7CisgICAgaWYgKG1fbWFy
cXVlZSkgeworICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8
PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgorICAgICAgICBib29sIG9sZFVw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAg
ICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+
dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAg
aWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJx
dWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0Jv
eCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0g
bWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRh
dGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9t
YXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRy
YWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2Nh
bFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0Lgor
ICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5j
ZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAg
ICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZSA9IHBvc2l0aW9uZWRQYXJl
bnQtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBs
YXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBz
Y3JvbGwgb2Zmc2V0LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxl
LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9p
bnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3Np
dGlvbigpKTsKKworICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5y
ZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRp
b25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5
b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBv
aW50ICs9IG9mZnNldDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0
aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAg
ICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8q
IHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudExheWVy
U2Nyb2xsYWJsZSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICAg
ICAgaWYgKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXll
clNjcm9sbGFibGUtPnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBBU1NFUlQocGFy
ZW50TGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAg
ICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNT
Y3JvbGxpbmdTY29wZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVyID0gcGFyZW50TGF5ZXItPnBhcmVudCgpOworICAgICAg
ICAgICAgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdMYXllclNjcm9sbGFi
bGUgPSBudWxscHRyOworICAgICAgICAgICAgd2hpbGUgKGVuY2xvc2luZ0xheWVyKSB7CisgICAg
ICAgICAgICAgICAgaWYgKChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBlbmNsb3NpbmdMYXllciA9IGVuY2xvc2luZ0xheWVyLT5wYXJlbnQoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAgICAgICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29w
ZSA9IGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdT
Y29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkK
KyAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29w
ZSgpOworICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKKyAgICAgICAgbV9jb250
ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJhclN0eWxlKCkKK3sKKyAgICAvLyBGSVhN
RTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJz
IChhbmQgdmljZSB2ZXJzYSkuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHls
ZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdl
ZCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTZjNzZiYjJiMzI3OWJhZGIwNmVkNmQ3NzE4MDcwNzQw
MDQ2ZDIxNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGUuaApAQCAtMCwwICsxLDM2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5p
Y2F0aW9ucyBDb3Jwb3JhdGlvbi4KKyAqCisgKiBPdGhlciBjb250cmlidXRvcnM6CisgKiAgIFJv
YmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+CisgKiAgIERhdmlkIEJhcm9uIDxkYmFy
b25AZmFzLmhhcnZhcmQuZWR1PgorICogICBDaHJpc3RpYW4gQmllc2luZ2VyIDxjYmllc2luZ2Vy
QHdlYi5kZT4KKyAqICAgUmFuZGFsbCBKZXN1cCA8cmplc3VwQHdnYXRlLmNvbT4KKyAqICAgUm9s
YW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRpay5tZWQudW5pLWdpZXNzZW4uZGU+Cisg
KiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+CisgKiAgIEJvcmlzIFpiYXJza3kgPGJ6
YmFyc2t5QG1pdC5lZHU+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICog
b2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93
d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJs
ZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlv
dXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBv
ZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8g
YWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBt
YXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkg
b2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCit1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVp
bnQ2NF90OworCitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGUgZmluYWwKKyAgICA6IHB1Ymxp
YyBSZW5kZXJMYXllcgorICAgICwgcHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFi
bGUpOworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOworCisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXll
clNjcm9sbGFibGUoKTsKKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJl
dHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25z
dCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIElu
dFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGlu
dCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKwor
ICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBT
Y3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxv
dy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNj
cm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBib29sIHJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUg
PSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkKSBmaW5hbDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29u
c3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0
JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcg
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9u
KGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3Jv
bGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwor
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNj
cm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9P
ZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9s
bFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsgfQorCisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0
aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uSWZOZWVkZWQoKTsKKworICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5n
IGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJsZS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJu
IHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZy
YW1lVmlldyBhcyBhIFNjcm9sbGFibGVBcmVhLgorICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSBjb25zdDsKKworICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOworCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZs
b3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsg
fQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxi
YXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBo
YXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7
IH0KKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZp
bmFsOworCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCisgICAgU2Nyb2xsUG9zaXRp
b24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9u
OyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFy
ZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBl
YXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworICAgIGJvb2wgcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0
cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNS
ZWNvbmNpbGlhdGlvbjsgfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZv
cm1Ub3VjaEV2ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwo
KSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBk
YXRlU2Nyb2xsKCkgZmluYWw7CisjZW5kaWYKKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRo
ZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hl
dGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wgY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworCisgICAgaW50IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkg
Y29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29s
IGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7CisgICAg
Ym9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpOworICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dD
b250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAg
dm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCk7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEpOworCisgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKKyAgICB2b2lkIHJl
c2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBMYXlvdXRTaXplJik7CisgICAg
Ym9vbCBpblJlc2l6ZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luUmVzaXplTW9kZTsgfQorICAg
IHZvaWQgc2V0SW5SZXNpemVNb2RlKGJvb2wgYikgeyBtX2luUmVzaXplTW9kZSA9IGI7IH0KKwor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAg
dm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAgIHZv
aWQgYWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmKTsKKyAgICB2
b2lkIGNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgdm9pZCByZXBhaW50Qmxv
Y2tTZWxlY3Rpb25HYXBzKCk7CisKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wg
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKwor
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBM
YXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBj
b21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KKyAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGU7IH0KKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0
OworCisgICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICBi
b29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKTsgfQorCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OworCisgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZyB7CisgICAg
ICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKKyAg
ICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAgID0gMSA8PCAxLAor
ICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAgICAgPSAxIDw8IDIs
CisgICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAgICAgICA9IDEgPDwg
MywKKyAgICB9OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5k
ZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
RmxhZz4gPSB7IH0pOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNG
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3co
KSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJv
b2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICBib29sIGhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCk7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKKyAg
ICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0
JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3Ju
ZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2lu
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsK
KyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29s
IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wg
dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Nj
cm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9s
bGFibGVBcmVhLgorICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAg
ICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsgIAorCisgICAgSW50
U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAgICB2b2lk
IHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAgdm9pZCBw
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgdXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAg
dm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisg
ICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29u
dHJvbFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAg
ICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5l
cjsKKyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5l
ck9yUmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNj
cm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9
CisgICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3Qg
SW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworI2lmIDAKK3ByaXZhdGU6CisgICAgYm9vbCB1
cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3Np
dGlvbnNGbGFnPiogPSBudWxscHRyKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+KTsKKworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFu
c3BhcmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFy
ZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxh
eWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVy
T2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50Rm9yZWdy
b3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYs
IEdyYXBoaWNzQ29udGV4dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBjb25z
dCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNw
YXJlbmN5LCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwor
CisgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKKyAgICB2b2lkIHBh
aW50TGF5ZXJCeUFwcGx5aW5nVHJhbnNmb3JtKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFJlbmRl
ckxheWVyOjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxSZW5kZXJMYXllcjo6UGFpbnRM
YXllckZsYWc+LCBjb25zdCBMYXlvdXRTaXplJiB0cmFuc2xhdGlvbk9mZnNldCA9IExheW91dFNp
emUoKSk7CisKKyAgICBib29sIHNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNz
Q29udGV4dCYsIGJvb2wmIGRpZFF1YW50aXplRm9udHMpOworI2VuZGlmCisKKyAgICB2b2lkIHVw
ZGF0ZU1hcnF1ZWUoKTsKKyAgICB2b2lkIGNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7
CisgICAgdm9pZCBzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGluZ1Njb3BlcyhM
YXlvdXRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJTdHlsZSgp
OworCitwcml2YXRlOgorICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxheWVyIGlz
IGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0byBzdGFy
dCBhbmQgc3RvcC4KKyAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKKyAgICBib29sIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDog
MTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYK
KyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgor
CisgICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Cisg
ICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9vbCBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Ny
b2xsUG9zaXRpb247CisgICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uOworCisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQg
YXJlYS4KKyAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKKworICAgIC8vIEZvciBsYXllcnMgd2l0
aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOworCisgICAgSW50
UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgTWFya2FibGU8U2Ny
b2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBt
X2JveFNjcm9sbGluZ1Njb3BlOworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3Jh
bE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8g
VXNlZCBmb3IgPG1hcnF1ZWU+LgorCisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3Rv
bSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4gbV9yZXNpemVyOworCisgICAgSW50UmVjdCBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsK
K307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJl
bmRlckxheWVyJiBsYXllcikgeyByZXR1cm4gbGF5ZXIubGF5ZXJUeXBlKCkgPT0gV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZTsgfQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmlu
ZGV4IDdlOWYzODMyZDM2ZWZkMTkxM2NmNzM5NzAxMWViYjNkMjE5NDhlMjQuLmU0NTZjNmM4YTU1
ODMyMDRmNjNhZWZiNjhlOGJjMDMwYjZkNzYxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9s
bGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg3OSwxMCArODc5LDkgQEAgYm9v
bCBSZW5kZXJMaXN0Qm94Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKSBjb24KIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiB7CiAgICAgYXV0byogbGF5ZXIgPSBlbmNsb3Np
bmdMYXllcigpOwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNj
cm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpF
eGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJM
aXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAg
QEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAog
Ym9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5o
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIg
PSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKIH0K
IAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4
IDc2ZTIzZTRkMDk5NmU2YmZiZTQwYTY0NDExNjQ0NTlhYTY3ODBkOGIuLjFiYTVhNjAyMWU4ZDIx
M2FiZDQyNGU3ZWVmNTIzODRiZjQwMTkwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAKQEAgLTQ5LDE0ICs0OSwxNCBAQAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkhUTUxNYXJxdWVlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLVJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQorUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShS
ZW5kZXJMYXllclNjcm9sbGFibGUqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAs
IG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKaW5kZXggMWM3ODg0OTVlMGU4ODU3NWU4MGJm
OTMwOGEyZjQ5NGZiNGE2MjhkNS4uMDg0YWQzMzc3NDg2ZGY5Y2U4MzI1NjY2Njg1NDUyYzQ3Yjk4
MjMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCkBAIC00OSwx
MyArNDksMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJMYXllcjsK
K2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIAogLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRo
ZSBhdXRvLXNjcm9sbGluZyBmb3IgPG1hcnF1ZWU+CiBjbGFzcyBSZW5kZXJNYXJxdWVlIGZpbmFs
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJNYXJxdWVlKTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyTWFycXVlZShSZW5kZXJM
YXllciopOworICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Kik7CiAgICAgflJlbmRlck1hcnF1ZWUoKTsKIAogICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29u
c3Q7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHRpbWVyRmlyZWQoKTsK
IAotICAgIFJlbmRlckxheWVyKiBtX2xheWVyOworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSog
bV9sYXllcjsKICAgICBUaW1lciBtX3RpbWVyOwogICAgIGludCBtX2N1cnJlbnRMb29wIHsgMCB9
OwogICAgIGludCBtX3RvdGFsTG9vcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKaW5kZXggNzExM2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3NzliMTJm
OC4uOTU3NTQxYTZiZTgxZjFjMGM2Y2NkN2NhNDZmNWNiZjFjM2I2ZDlkZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNzIFJl
bmRlck9iamVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFr
UHRyPFJlbmRlck9iamVjCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAgICBm
cmllbmQgY2xhc3MgUmVuZGVyRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7
CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIHB1YmxpYzoKICAgICAv
LyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9k
ZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMg
YW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggNjI2MGE4
MTU3OWY1ODRmNThjYzQwZjdjZTA5MDc1YjliMDg2NWFmOC4uZWUyYWU2NjUyYTIyMmJiZDM4NWM4
YjZkM2M4OTZkNjJkMjRjMDZlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBA
IC00MDAsMTcgKzQwMCwyMiBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bAogICAgIFJlbmRlclRl
eHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRl
cmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
bmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBs
YXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXIt
PnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVl
bEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0
b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChs
b2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24s
IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OmxvZ2ljYWxT
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5k
ZXggZTA1NjBkN2E1MmE5NTI2NGQ2YTNkNTY4MmQ3OTM1Njk1YzIzZjYwYy4uMWY2ZDMxZjBkNDhh
YzA2N2UxNWIzOWQwY2I1NDRlNjlkZDQzN2ExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDcsOCArNDcsOCBAQAogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5j
bHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJ
dGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNTk5LDIwICs1OTksMjEg
QEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5
ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIHRzIDw8ICIgY2xpcCAiIDw8
IGFkanVzdGVkQ2xpcFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkpIHsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkK
LSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLngo
KTsKLSAgICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsWSAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAgaWYg
KGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVu
dFdpZHRoKCkpICE9IGxheWVyLnNjcm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNj
cm9sbFdpZHRoICIgPDwgbGF5ZXIuc2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVyLnJl
bmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
KSAhPSBsYXllci5zY3JvbGxIZWlnaHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVp
Z2h0ICIgPDwgbGF5ZXIuc2Nyb2xsSGVpZ2h0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xs
WCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCkpCisgICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAg
ICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCkt
PmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdp
ZHRoKCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVy
LnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxI
ZWlnaHQoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9s
bGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAg
ICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGlj
YWxTY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1l
KCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAg
ICAgICBTY3JvbGxiYXJUaGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
VGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlz
TGF5b3V0RGlyZWN0aW9uUlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAg
ICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcigpKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhh
c1JUTExheW91dERpcmVjdGlvbiI7CiAgICAgICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCAxNzI0OGNkYTM0YWE2YjZhNzE5NmY3ZjAw
NmYyMDg1ZmE5YWI0MjZjLi4zNDcwNmQ2NmVlMDAzMzUzMDFlYTA2ZDEwMjU0MjE1NzczNjY4ZWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMjgsOCAr
MjgsOCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMyOSw4
ICszMjksOCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KCkpLCBzZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgfQogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIo
KS0+Y2FuUmVzaXplKCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50UmVzaXplcihwYWludEluZm8u
Y29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5m
by5yZWN0KTsKKyAgICBpZiAoaGFzTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKS0+Y2FuUmVzaXplKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5w
YWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0Ojpz
ZXRPdmVybGFwVGVzdFJlc3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCBjMDUzYTRkZGEyMDA4ZWZkN2E2Njg4ZDM0NDhmZmJmM2JmY2Jl
MWY1Li44MmI5YmU0YTcwYWU5N2Q4NWY2YzkxZDI0MTNjZTZiYmY3ODBlNzkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTUsNiArMTU1LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xOTA2LDcgKzE5MDcs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVs
RXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5s
YXllcigpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5zY3JvbGxhYmxlTGF5ZXIoKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI5MDEsNyArMjkwMiw3
IEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJl
YUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+
KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5k
ZXJMaXN0Qm94PihyZW5kZXJCb3gpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxh
YmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEg
PSByZW5kZXJCb3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDcz
ODg1M2RkNTAuLmEwNGIwYWM5OTBmOGZiODkyNWFmY2FkMGYyNGE1YjcxYjcwNDE3MWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL0F1dG9jYXBpdGFsaXplLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzcsMTEg
QEAgLSAoaW50KXNjcm9sbFhPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJl
cikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5
ZXIoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CiB9CiAKIC0gKGlu
dClzY3JvbGxZT2Zmc2V0CkBAIC04OCwxMCArOTIsMTUgQEAgLSAoaW50KXNjcm9sbFlPZmZzZXQK
IAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93PigqcmVuZGVyZXIpKQogICAg
ICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKKwogICAgIGlmICgh
aXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZs
b3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNv
cmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCk7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpLnkoKTsKIH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZ
T2Zmc2V0OihpbnQpeQpAQCAtMTEwLDcgKzExOSwxMCBAQCAtICh2b2lkKXNldFNjcm9sbFhPZmZz
ZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFk
agogICAgIGlmICghcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpIHx8ICFpczxXZWJDb3JlOjpS
ZW5kZXJCb3g+KCpyZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGxheWVy
ID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Ny
b2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCiAgICAg
aWYgKGFkanVzdEZvcklPU0NhcmV0KQogICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgIGxheWVyLT5zY3JvbGxUb09mZnNldChXZWJDb3Jl
OjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
V2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBlZjczNTAwNGVhNmQwNWU5MTI4NmVjZmE2
ZjBmOGQ0MDEwNWU2NmRlLi41ZTUwZDIyY2FmYWFjNjk5YjJlZDBlYzc0MjExMjU1M2IwN2VkZGZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTk0
LDcgKzk0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QcmludENvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIuaD4KQEAgLTczNywxMCArNzM3LDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNp
YmxlOihET01SYW5nZSAqKXJhbmdlCiAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGlu
c2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29y
ZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NP
cmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKICNlbHNlCiAgICAgICAgIGF1dG8qIGxheWVyID0gc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAobGF5ZXIp
IHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllciA/IGxheWVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAg
ICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVu
Y2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0
aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9F
ZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9CkBAIC03
NTcsMTAgKzc1NywxMCBAQCAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFu
Z2UgKilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQKIAogICAgIGlmIChzdGFydE5vZGUg
JiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnRO
b2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAobGF5ZXIpIHsK
LSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1
ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllciA/IGxheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAg
c3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xv
c2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9u
UmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
V2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKIAogICAgICAgICAgICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwog
ICAgICAgICAgICAgaWYgKGNvcmVGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAppbmRleCBiZjY4YTcxNDVkYTg5OGVkNGU3Y2U3NGU2MTU3ZjAwYmQ3MGY3YTYzLi5hNGU3NjNi
NDU4OTJiOTkwYjMzYzY2MzhkOWQwMmY2OTIwYjhmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1l
bnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUHJvZ3Jlc3NUcmFja2VyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjAzNSwxMCArMjAzNSwxMiBA
QCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKICAg
ICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcigpOwogICAgICAgICBJ
bnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVsdGFYICogc2NhbGVGYWN0b3IsIC1kZWx0YVkg
KiBzY2FsZUZhY3Rvcik7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9
IG51bGxwdHI7CisgICAgICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVy
ID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1fZ2VzdHVyZVRhcmdldE5vZGUgJiYgbV9nZXN0dXJl
VGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0g
bV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
WWVzKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGF5
ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXll
cikgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDk3MGQwMGVjODVmMzMzOTYyZjg1NjdjMjdmYTMxYWVjYjM4ZDI5NDIuLmRh
NDhkNzQzY2NiYmQ0YWZkOGMwY2U1M2U5NzZjMWQzMDIyZjAyNzggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MiBAQAorMjAyMC0wOC0xNCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlh
LmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQg
dXAgUmVuZGVyTGF5ZXIgaW50byBSZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4K
KworICAgICAgICBSZW1vdmUgdHdvIHdyb25nIGV4cGVjdGF0aW9ucywgdGhhdCB3aWxsIGxlYWQg
dG8gbGF5b3V0IHRlc3QKKyAgICAgICAgZmFpbHVyZXMgKHVucmVsYXRlZCB0byB0aGlzIHBhdGNo
KS4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVu
dHMtZXhwZWN0ZWQudHh0OgorICAgICAgICBzL1JlbmRlckxheWVyL1JlbmRlckxheWVyU2Nyb2xs
YWJsZS8gaW4gY29uc29sZSBtZXNzYWdlcworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvYW5pbWF0
aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0OiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFu
aW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgIHMvUmVuZGVyTGF5ZXIv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLyBpbiBjb25zb2xlIG1lc3NhZ2VzCisgICAgICAgICogcGxh
dGZvcm0vd2luL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4
cGVjdGVkLnR4dDogUmVtb3ZlZC4KKwogMjAyMC0wOC0xNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzdXNwZW5kaW5nIC8gcmVzdW1p
bmcgYW4gT2ZmbGluZUF1ZGlvQ29udGV4dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVj
dGVkLnR4dAppbmRleCA5MzZiZWQyNWMyNzE3ZjUyMWRjNTZkNTMyNjMwOWRiODY5NGEyNjE1Li45
YTM0Njc1ZDFmNDYyNzQ3MDBiZDQ3ZjJiZGZlYzUyN2NjYzFiNjljIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3It
YmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMSwxNCArMSwxNCBAQAogQ09OU09MRSBNRVNT
QUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQogQ09OU09MRSBNRVNT
QUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNT
QUdFOiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FH
RTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKK0NP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRWZXJ0aWNh
bFNjcm9sbGJhcgogQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29u
dGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3duSW5WZXJ0
aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc1VwSW5W
ZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0
ZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFi
bGU6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgor
Q09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVkVmVydGlj
YWxTY3JvbGxiYXIKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZElu
Q29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29u
dGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4
aXRlZENvbnRlbnRBcmVhCiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKIFBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9y
bS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg1YjJhMzhjYTI3M2M2ZDcwMDY4Nzg2ZTMzOWRmNzQxZTY0Y2E0ZTkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBl
Y3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVBBU1MgY291bnQgaXMgMAot
UEFTUyBjb3VudCA8IDYgaXMgdHJ1ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQot
Ci1URVNUIENPTVBMRVRFCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13
azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1h
bmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDYwY2RiNjZjMWYwYTJiMTA3
ZjU4NDE3YjMzMmVmODdmNjE1MWY5NDIuLjQ1ODdmOWI1ZDRlMTU5ZGI4YzM1YzkyNGMwNDA2ZWVh
ZmVkNjNjZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0
b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dApAQCAtMSwxMSArMSwxMSBAQAotQ09OU09MRSBN
RVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKLUNPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBN
RVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCi1DT05T
T0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCi1D
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9sbGJhcgot
Q09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRDb250ZW50QXJlYQorQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRB
cmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVk
VmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNj
cm9sbGFibGU6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5Db250ZW50
QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVk
VmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKIFBB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vYW5pbWF0aW9ucy9zdGVwcy10
cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA4NWIyYTM4Y2EyNzNjNmQ3MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRl
cy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVBBU1MgY291bnQg
aXMgMAotUEFTUyBjb3VudCA8IDYgaXMgdHJ1ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQotCi1URVNUIENPTVBMRVRFCi0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406678</attachid>
            <date>2020-08-15 15:14:19 -0700</date>
            <delta_ts>2020-08-16 15:45:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200816001416.patch</filename>
            <type>text/plain</type>
            <size>345019</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTcwOGI1NWZkMjI3YmRk
MDA1M2Q2YjdjZTEzZjUwZTZjMGMxMDhlZi4uNzczY2Q4ZmJhYzA1YTEzYTA0MjI5YTI3NzRiMWY1
ZmU3YzcyOWFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5NiBAQAorMjAyMC0wOC0xNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAg
KiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAg
ICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1h
cnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAg
ICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
Lmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9u
KToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVB
cmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1
dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVl
bEV2ZW50TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3Vy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNv
bnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlTGF5ZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVj
dFRvRXhwb3NlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVD
bGlwUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVS
ZWN1cnNpdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9s
c0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbGluZ0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21T
Y3JvbGxDb29yZGluYXRlZExheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3
aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmRpZEFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OmFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6
OnJlbW92ZUxheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQu
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1
ZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHA6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxh
dGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0x
NSAgQW5kcmVzIEdvbnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
ZXJ0IHVubmVjZXNzYXJ5IGNoYW5nZSBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTUyMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA2MmRhZDE1
MWY2NDNiMDE3NTA1NjZlYTAwYmRiYmI0MGFjYTExNGFjLi5jZGEwYzdhZDQxOTY1ZmIwNDgxMTVh
NjdiYzAzNTE2NjNkNTI5OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjAgQEAKKzIwMjAtMDgtMTUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGln
YWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRl
ckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNw
bGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFi
bGUuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbTogVXNlIFJlbmRlckxheWVyOjpzY3JvbGxh
YmxlTGF5ZXIoKS4KKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgor
ICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RP
TUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1ND
YXJldDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJG
cmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9z
Y3JvbGxET01SYW5nZVRvVmlzaWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMDgtMTIgIEtlaXRo
IFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgbmVlZCBm
b3IgZGVmaW5pbmcgVVNFX05FV19CVUlMRF9TWVNURU0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwppbmRleCBiOThiN2FiM2U3YjgwZDFjZjc0ZjJlM2U4YWJlOWZjOThjNTUwNjIzLi45ZDdlZjJk
ZDZmYTNlYmFiNWI1OGQ5OGZlZTI0MDAxOTU3YmU5NGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDgtMTUgIE5pa29sYXMgWmltbWVybWFubiAg
PG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNv
ZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5k
ZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YlZpZXc6Omdlc3R1cmUpOiBVc2UgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpLgorCiAy
MDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IGE2Y2E1NDEwYzQxYWZmZWIxYmI1ZWQxMDZhNmFkMTkzYjNiYWYzNzgu
LmMyZjczYmIyYzlkZDdlMmM3MTk5YzQ1NTA0MTA1NDNlOGZiNTMxOWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtMTM5MSw2ICsxMzkxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKICAgICByZW5k
ZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5oCiAg
ICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQxODAxYWEwMWZl
OTI4MzBiM2VhODI2ZTY5N2JkYWI4NWZjODRmOTcuLmVhYmViMGViYTI4ZjIwNTIyOTMwMjY2NTVm
YjA3MjJmNDg5OTI0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTI4LDYgKzIxMjgsNyBAQCByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAog
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXll
ckZpbHRlcnMuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcAogcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3Rh
dGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmM2ODgxYmU4MjA4
ZTIwZDMzZTI0NmQyNTZlNzY5YmZkMjdmNGYwYS4uYTljNzhjZDMxYjA0Mjc4YjliYzk2NGNiOThj
ZDM2OGI3N2ZlNTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMzA4LDYgKzMwOCw3IEBACiAJCTBGNTgwQjBFMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhp
Y3NMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgw
Q0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRjBGMTJERTlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVy
TGF5ZXJCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBD
RkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5NjkzOTEw
MEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRp
bGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAvKiBB
bmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRpZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVC
N0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUzMTBGNjVEN0EwMDM3
NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTI1LDYgKzU5MjYsOCBAQAogCQkwRjU4MENGQTBG
MTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5k
ZXJMYXllckJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
TGF5ZXJCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZDMEYx
MkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXll
clNjcm9sbGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkMwRjEz
QUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVGls
ZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQTIx
NDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmlt
YXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc3Niw2ICsy
ODc3OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmls
dGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovLAorCQkJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4
OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5
NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQw
MDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVFODUw
MDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi8sCkBAIC0zMzEzNyw2ICszMzE0Miw3
IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNGODhC
RTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNTgw
Q0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxp
bmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmlu
ZGV4IDBkODM4ZDU3NDgxZmI0N2JkOWZlMjlkOTdhNWRjMDlhYjFkOGNhYjYuLjUyYjQzYTA4MjZm
NmIyYWYwYjM5M2Q0MDEwMDcwZjdkMGIzMmM0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAt
NzksNyArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkxNiw3ICszOTE2LDggQEAgU2Nyb2xsYWJsZUFyZWEqIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkg
Y29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7CisgICAg
QVNTRVJUKGJveC5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgcmV0dXJuIGJveC5zY3JvbGxhYmxl
TGF5ZXIoKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0zOTI5LDcgKzM5MzAsOCBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IGlzIHBvaW50IGEgU2Nyb2xs
T2Zmc2V0IG9yIFNjcm9sbFBvc2l0aW9uPyBUZXN0IGluIFJUTCBvdmVyZmxvdy4KLSAgICBib3gu
bGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOworICAgIEFTU0VSVChib3guc2Nyb2xsYWJs
ZUxheWVyKCkpOworICAgIGJveC5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQocG9p
bnQpOwogfQogCiAjaWYgRU5BQkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA4
ODAyZWQwNGVhMzMzMGU5NTdkYmEwMWMxNzE2MjQ0NTFlYzQ0NGNkLi44ODA0YTE2YmVjMTRjZDAy
ZjA3YWVmYTY5YmY5YjEyMDZkMjZkMzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC04OSw5
ICs4OSw5IEBACiAjaW5jbHVkZSAiUHNldWRvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaCIKICNp
bmNsdWRlICJRdWlya3MuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKQEAgLTEzMDgsOCArMTMw
OCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKICAgICAgICAg
aW50IGNsYW1wZWRMZWZ0ID0gY2xhbXBUb0ludGVnZXIobmV3TGVmdCAqIHJlbmRlcmVyLT5zdHls
ZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0g
dXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVk
U2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRT
Y3JvbGxMZWZ0KGNsYW1wZWRMZWZ0LCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
QXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNl
dFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOworICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKICAgICB9CiB9CiAKQEAgLTEzMzIsOCArMTMzMiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Ny
b2xsVG9wKGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVn
ZXIobmV3VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZp
b3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpO
bzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRy
dWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPnNjcm9s
bGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91
bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggZDk3ZTY2ZjhmOGFmMDVmYTAyNzc2YTAwODUw
ZjVmNTVhZTg2MWYzZi4uMDg2ZjY5MzFjMThiZTEwOTAyZjliMTVkZGViN2MzYjlhOTc2MTg4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMjQxMiw5ICsyNDEy
LDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihTZWxlY3Rpb25SZXZl
YWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAgIGlmICghbV9zY3Jv
bGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgICAgICAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFs
TW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxp
bmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
KQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRl
MmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNjMjcxMjc1Li4wNDhmMDUwZjgxYTg2MWMxNDQ3MTA0OWNk
NjI1NTNkYTAwZTk4MTI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJx
dWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1l
bnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC0xNzUsNyArMTc1LDggQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVF
bGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwg
IXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgQVNT
RVJUKHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1
cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+c2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5ZmI2ZDhjNTkxZDdmZmZkNDRlMWM0NDI2
Nzg2YTMuLjcyMjI0Zjk1MTBhOTY5ZjdkNGFkYWE0MWM2OGI5NTc4MWVjYjkwZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAK
ICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIFRleHRGaWVs
ZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJUZXh0UmVuZGVyZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8qIGlubmVyTGF5ZXIgPSBpbm5lclRleHRSZW5k
ZXJlci0+bGF5ZXIoKTsKKyAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVyZXIt
PnNjcm9sbGFibGVMYXllcigpOwogICAgIGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYTZhNjJhYzlmNmVlY2E0
NTAxY2Q0N2E1ZjAwZTBlNTFmZjc2MTM5Mi4uYjUwMmVkYWFhOWRhNDc4YzlkMDc3MThmNjgxMzZh
NjY1MzA4OGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtNzksNyAr
NzksNyBAQAogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJv
eC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKQEAgLTM0MywxMiArMzQzLDE0IEBAIHN0YXRpYyBib29sIGhhbmRsZVdo
ZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5vZGUqIHN0YXJ0Tm9kZSwgY29uc3Qg
V2hlCiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdCb3gpIHsKICAgICAgICAgaWYgKFJlbmRl
ckxheWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKICAgICAg
ICAgICAgIGF1dG8gcGxhdGZvcm1FdmVudCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3Jt
RXZlbnQoKTsKLSAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKLSAgICAgICAg
ICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVu
dCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0
Zm9ybURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVy
ZWRWZWxvY2l0eSk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGJveExh
eWVyLT5oYW5kbGVXaGVlbEV2ZW50KGNvcGllZEV2ZW50KTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBkaWRTY3JvbGxJblNjcm9sbGFi
bGVBcmVhKCpib3hMYXllciwgd2hlZWxFdmVudCk7CisgICAgICAgICAgICBib29sIHNjcm9sbGlu
Z1dhc0hhbmRsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBib3hMYXllclNjcm9s
bGFibGUgPSBib3hMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocGxhdGZvcm1FdmVudCkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50
ID0gcGxhdGZvcm1FdmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRm
b3JtRGVsdGEud2lkdGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJl
ZFZlbG9jaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGJv
eExheWVyU2Nyb2xsYWJsZS0+aGFuZGxlV2hlZWxFdmVudChjb3BpZWRFdmVudCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQg
PSBkaWRTY3JvbGxJblNjcm9sbGFibGVBcmVhKCpib3hMYXllclNjcm9sbGFibGUsIHdoZWVsRXZl
bnQpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoc2Nyb2xsaW5nV2FzSGFuZGxl
ZCkgewogICAgICAgICAgICAgICAgIHN0b3BFbGVtZW50ID0gY3VycmVudEVuY2xvc2luZ0JveC0+
ZWxlbWVudCgpOwpAQCAtMTU2OCw3ICsxNTcwLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gK
ICAgICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2l0aCByaWdo
dC1hbGlnbmVkIHRleHQgaW4gYSBib3gsIHRoZSByZW5kZXJlciBoZXJlIGlzIHVzdWFsbHkgYSBS
ZW5kZXJUZXh0LCB3aGljaCBwcmV2ZW50cyBzaG93aW5nIHRoZSByZXNpemUgY3Vyc29yOiB3ZWJr
aXQub3JnL2IvMjEwOTM1LgotICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVu
ZGVyZXIpLnNjcm9sbGFibGVMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0g
bGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2Nh
bFBvaW50KCkpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29y
KCk7CkBAIC0xODEyLDEyICsxODE0LDE0IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1vdXNlCiAKICAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKSA/IG1fY2xpY2tO
b2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogbnVsbHB0cjsKICAgICBhdXRvIGxv
Y2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQobW91c2VFdmVudC5oaXRUZXN0UmVzdWx0KCkubG9j
YWxQb2ludCgpKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRy
b2wobG9jYWxQb2ludCkpIHsKLSAgICAgICAgbGF5ZXItPnNldEluUmVzaXplTW9kZSh0cnVlKTsK
LSAgICAgICAgbV9yZXNpemVMYXllciA9IGxheWVyOwotICAgICAgICBtX29mZnNldEZyb21SZXNp
emVDb3JuZXIgPSBsYXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKLSAg
ICAgICAgaW52YWxpZGF0ZUNsaWNrKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllciA/IGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6
IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+aXNQb2ludEluUmVzaXpl
Q29udHJvbChsb2NhbFBvaW50KSkgeworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRJ
blJlc2l6ZU1vZGUodHJ1ZSk7CisgICAgICAgICAgICBtX3Jlc2l6ZUxheWVyID0gc2Nyb2xsYWJs
ZUxheWVyOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tUmVzaXplQ29ybmVyID0gc2Nyb2xsYWJs
ZUxheWVyLT5vZmZzZXRGcm9tUmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOworICAgICAgICAgICAg
aW52YWxpZGF0ZUNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRCbGlua2luZ1N1c3BlbmRl
ZCh0cnVlKTsKQEAgLTE5MTgsMTAgKzE5MjIsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFu
ZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8qIGxheWVyID0gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAg
IGlmICghbGF5ZXIpCisgICAgICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5
ZXIoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkt
PmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewogICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllcjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXgg
NjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRlZWI4MzQ4ZTc5ZWFiYjJhMS4uODcxOWJhMDM2NTZiYTc4
Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC04Myw3ICs4Myw3IEBAIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRm
b3JtV2hlZWxFdmVudDsKIGNsYXNzIFJlbmRlckJveDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1j
bGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIGNsYXNzIFJl
bmRlcldpZGdldDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAt
NTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1fc3ZnUGFuIHsgZmFsc2UgfTsK
IAotICAgIFJlbmRlckxheWVyKiBtX3Jlc2l6ZUxheWVyIHsgbnVsbHB0ciB9OworICAgIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSogbV9yZXNpemVMYXllciB7IG51bGxwdHIgfTsKIAogICAgIFJlZlB0
cjxFbGVtZW50PiBtX2NhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudDsKICAgICBib29sIG1fZXZl
bnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVyaW5nTW91c2VFdmVudHNFbGVtZW50IHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCBmOWIxYTVkNzE1Yjc1NDcyOTQyODU4OWFl
NTgxZTY5YzViN2RlMTFjLi4yZWEwZjI4NWJkZGViZWU2OTZjOTM3Nzg3NTIwMDVhZmZjNjZkM2U0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC03Nyw5ICs3Nyw5IEBACiAjaW5jbHVk
ZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
Um9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhclBhcnQuaCIKQEAgLTI1NjIsNyArMjU2Miw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQo
KS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsK
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkp
IHsKICAgICAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVu
ZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+c2Nyb2xsYWJsZUxheWVyKCkpOwor
ICAgICAgICAgICAgcmVuZGVyVmlldy0+c2Nyb2xsYWJsZUxheWVyKCktPnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzg0
MCwxMCArMzg0MSwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byog
bGF5ZXIgPSBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgIGlmICghbGF5ZXIp
CisgICAgaWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pOworICAgIHJldHVybiBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKIH0KIAogSW50UmVjdCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3goYm9vbCopIGNvbnN0CkBAIC00MzE4LDggKzQzMTksMTAgQEAgdm9pZCBGcmFtZVZpZXc6
OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
aXJ0eVJlY3QKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICBy
b290TGF5ZXItPnBhaW50KGNvbnRleHQsIGRpcnR5UmVjdCwgTGF5b3V0U2l6ZSgpLCBtX3BhaW50
QmVoYXZpb3IsIHJlbmRlcmVyLCB7IH0sIHNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPT0gU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luID8gUmVuZGVyTGF5ZXI6OlNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA6IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5OjpBY2Nlc3NpYmxlT3JpZ2luT25seSwgZXZlbnRSZWdpb25Db250ZXh0KTsK
LSAgICBpZiAocm9vdExheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAh
ZXZlbnRSZWdpb25Db250ZXh0KQotICAgICAgICByb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9s
bGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcm9vdExheWVyLT5zY3JvbGxhYmxlTGF5ZXIo
KSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQorICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWlu
dEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgfQogCiAgICAgZGlkUGFpbnRDb250ZW50cyhjb250
ZXh0LCBkaXJ0eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRleCA0ZDhiNzJmOGU1YmNiMGU4MzJkM2VjM2RkYzJlZTky
OTJiNDlmZTg2Li5kYjFhNGViZGVkMmZhZGQxZmZmMGI1YmRiMmE5ODAwNDFkZmFmOGYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDAsNyArNDAsNyBA
QAogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOTQsNyArMzk0LDExIEBAIGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29u
dGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAotICAgICAgICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3Np
bmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAg
IGF1dG8qIGVuY2xvc2luZ0xheWVyID0gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5n
TGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGVuY2xvc2luZ0xheWVyKTsKKworICAgICAgICBpZiAo
YXV0byogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICAgICAgZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA5YmI4ZTkyY2FhYzVjZjUz
MmI3OWI5MGVlYWIzY2YyMTU0MGFmZjQzLi5kMTYyNmVjM2MyN2IxZmI2M2VmYjUzYTgwZjAyZTZj
ODY4MDZlYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4
MTksMTYgQEAgdm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2Rl
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFy
ZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXIm
IGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVy
KCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJl
bmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50U2Nyb2xsVHlwZSgp
OwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5
cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxheWVyLnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNj
cm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIt
PmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgbGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKGlz
VXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMp
OworICAgIGxheWVyLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwor
ICAgIGxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxh
eWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/
CisgICAgbGF5ZXItPmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNzaW9u
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCBjMDkz
MGI2MzQ5NWU3MTgxNTk5MWE0MDZhNGQ2NjVhMjdiYTc3MTRiLi5mODQzZTllM2ZjN2Y1YzNjYWEx
ODY0ZTVlZWZjNzg1NWVjZGExNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRI
YW5kbGVyTWFjLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgIlJhbmdlLmgi
Ci0jaW1wb3J0ICJSZW5kZXJMYXllci5oIgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
LmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAj
aW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAgLTc4Miw3ICs3ODIsNyBAQCBzdGF0aWMgU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRlckJveCYgYm94KQogICAgIGlmIChp
czxSZW5kZXJMaXN0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGlz
dEJveD4oJmJveCk7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5z
Y3JvbGxhYmxlTGF5ZXIoKTsKIH0KICAgICAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBmaW5kRW5j
bG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcihDb250YWluZXJOb2RlKiBub2RlLCBjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGln
aGxpZ2h0RGF0YS5jcHAKaW5kZXggZTVhNDdiNzA3NGRjYzkzMWRiMDAzNzc4M2EzZTI5YWZkN2Zk
ZGU0My4uYWVlNTBiMDlhOTMwZGMzOTU1MzA2ZmVjMTQ1MGNiNzdhZGM3MDI2OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcApAQCAtMzYsNyArMzYsNyBAQAog
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
ci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
QEAgLTIwOSw3ICsyMDksOCBAQCB2b2lkIEhpZ2hsaWdodERhdGE6OnNldFNlbGVjdGlvbihjb25z
dCBSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9jawogCiB2b2lkIEhpZ2hs
aWdodERhdGE6OmNsZWFyU2VsZWN0aW9uKCkKIHsKLSAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+
cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Ny
b2xsYWJsZUxheWVyKCkpOworICAgIG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKS0+cmVw
YWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwogICAgIHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdo
dERhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAg
QEAgdm9pZCBIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYg
bmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZQogICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNl
bGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRl
KTsKICAgICB9CiAKLSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90
aGluZykKLSAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzKCk7CisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5v
dGhpbmcpIHsKKyAgICAgICAgQVNTRVJUKG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7
CisgICAgICAgIG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKKyAgICB9CiAKICAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9u
IHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFn
YWluIGFuZAogICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggNmI1M2NiYTg1YzhlOWRjNTk3
MTViNjM4Y2FlNTc1ZjgwZTQ4Zjk1NC4uYTY3Y2IyMmMyM2QzM2YzMzhjOGEwYTY2NGZlYjU5MmUw
ZjkwNmM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01
OCw3ICs1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTU1Myw3ICs1NTMsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2Fj
dGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2NrIDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAg
ICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0NsaXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXll
cigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKyAgICAgICAgaWYgKGJsb2NrLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGJsb2NrLT5zY3JvbGxhYmxlTGF5ZXIoKS0+
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91
dE92ZXJmbG93KCk7CiAgICAgfQogfQpAQCAtNTg0LDggKzU4NSw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSkKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwog
fQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQpAQCAtMTEwOSwxMiArMTExMCwxNSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIGlmIChwdXNoZWRDbGlwKQogICAgICAgICBwb3BDb250
ZW50c0NsaXAocGFpbnRJbmZvLCBwaGFzZSwgYWRqdXN0ZWRQYWludE9mZnNldCk7CiAKKyAgICBp
ZiAoIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBPdXIgc2Ny
b2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhh
dCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVy
IHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJz
IHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgo
cGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhh
c2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigp
CiAgICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUg
JiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5w
YWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93
Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFp
bnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCks
IHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFp
bnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMTQ2
OSwxNiArMTQ3MywxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50TwogCiAgICAgICAgIExheW91
dFJlY3QgZ2FwUmVjdHNCb3VuZHMgPSBzZWxlY3Rpb25HYXBzKCp0aGlzLCBwYWludE9mZnNldCwg
TGF5b3V0U2l6ZSgpLCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCBjYWNoZSwgJnBhaW50
SW5mbyk7CiAgICAgICAgIGlmICghZ2FwUmVjdHNCb3VuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8qIGxheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNs
b3NpbmdMYXllcigpLT5zY3JvbGxhYmxlTGF5ZXIoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAg
ICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2Nh
bEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0
aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRz
ID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5y
ZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdh
cFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkp
OworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJR
dWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZsYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXllclNj
cm9sbGFibGUtPnJlbmRlcmVyKCkuaXNCb3goKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdh
cFJlY3RzQm91bmRzLm1vdmVCeShsYXllclNjcm9sbGFibGUtPnJlbmRlckJveCgpLT5zY3JvbGxQ
b3NpdGlvbigpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFk
ZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAg
ICAgbGF5ZXJTY3JvbGxhYmxlLT5hZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNC
b3VuZHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA1
LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3co
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWlu
ZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CisgICAgaWYgKCFzY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbGFi
bGVMYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2lu
dChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkp
OwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjQ5
OCw5ICsyNTA1LDExIEBAIGludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFz
ZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUg
Y29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwg
d2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1
cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwg
b3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92
ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAg
ICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkg
fHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAg
OiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNl
dCgpLngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkp
OwotICAgICAgICAKKyAgICAgICAgYm9vbCBoYXNNYXJxdWVlID0gc2Nyb2xsYWJsZUxheWVyKCkg
PyBzY3JvbGxhYmxlTGF5ZXIoKS0+bWFycXVlZSgpIDogbnVsbHB0cjsKKyAgICAgICAgYm9vbCBo
YXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllcigpID8gKHNjcm9sbGFibGVMYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZz
ZXQoKS55KCkpIDogZmFsc2U7CisgICAgICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9
IHNjcm9sbGFibGVMYXllcigpID8gKHNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSkgOiBmYWxzZTsK
KyAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChoYXNNYXJxdWVlIHx8IChkaXJlY3Rpb24g
PT0gSG9yaXpvbnRhbExpbmUgPyBoYXNWZXJ0aWNhbFNjcm9sbGJhciA6IGhhc0hvcml6b250YWxT
Y3JvbGxiYXIpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOworCiAg
ICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlv
bmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGUyMTNhYWM3MWE5NDQ1ODczZTIx
NjA0MTY0ZTQxNDQ1OGIwNmNhOTAuLmM1MWM1MGNlNTdiZGFlMDAzNTRhZGQyOTQyZDFjY2U3NDhk
YzM4MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
CkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzQ5LDcgKzM0OSw3IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGls
ZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5s
aW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAm
JiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwo
KSkKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5t
YXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkp
CiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA2MTIzNzZiYWFkNjFiZDYyZmEzY2VkYThkZGEy
YWEyNjQzYjc5OWRiLi5kMTI4ZDE0YTY4ZjI0NzBmOWE4Njk2MWJmZDk1MjVlNzI5ZjE4YmI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNTgsOCArNTgsOCBAQAog
I2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJN
dWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOSwx
MSArMzE5LDExIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9v
bSBmYWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdl
IG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNv
b3JkaW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYg
b2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3Rp
dmVab29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXll
cigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3Jv
bGxhYmxlTGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9
IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3Jv
bGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAg
ICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRT
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29t
U2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2V0UG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICB9CiAKICAgICAvLyBPdXIg
b3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4K
QEAgLTU0Miw4ICs1NDIsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y2xpZW50SGVpZ2h0KCkg
Y29uc3QKIAogaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKQotICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Ny
b2xsV2lkdGgoKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKTsKICAg
ICAvLyBGb3Igb2JqZWN0cyB3aXRoIHZpc2libGUgb3ZlcmZsb3csIHRoaXMgbWF0Y2hlcyBJRS4K
ICAgICAvLyBGSVhNRTogTmVlZCB0byB3b3JrIHJpZ2h0IHdpdGggd3JpdGluZyBtb2Rlcy4KICAg
ICBpZiAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKQEAgLTU1NSw4ICs1NTUs
OCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6
OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxh
eWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxIZWlnaHQoKTsKKyAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0
aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQg
dG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KQEAgLTU2NSwxMiArNTY1LDEyIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNv
bnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewotICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54
KCkgOiAwOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIo
KSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGlu
dCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7Cisg
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xs
YWJsZUxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVlZGVkKCkKQEAgLTU3OSw3ICs1
NzksNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZO
ZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDBfbHUpOwogfQogCi1zdGF0aWMgdm9p
ZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKK3N0YXRpYyB2b2lk
IHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsK
ICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdl
LmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBAIC01ODksMjYgKzU4OSwyNiBAQCBzdGF0aWMg
dm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlw
ZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewot
ICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYgKCFoYXNPdmVy
Zmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBz
ZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQ
b3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNl
dHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBzY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9w
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRl
ZFNjcm9sbCBhbmltYXRlZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXll
cigpKQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQog
ICAgICAgICByZXR1cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0g
ICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGlu
ZywgYW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9wLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmlt
YXRlZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1
cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqc2Nyb2xsYWJsZUxheWVyKCkpOworICAg
IHNjcm9sbGFibGVMYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVk
T2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MDgsMzAgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVk
RWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcp
IGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25z
dAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigp
LT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WSgp
ID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCktPmhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9yaXpv
bnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAg
ICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5v
dmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
c2Nyb2xsYWJsZUxheWVyKCktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Ny
b2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBp
bmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCkgOiAwOworICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6
ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKKyAgICByZXR1
cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkg
PyBzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0K
IAogaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QK
QEAgLTgzNCwxMiArODQwLDEyIEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxv
Z2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNj
cm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxh
eWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VS
VChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKS0+aGFzVmVydGljYWxTY3Jv
bGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAgICAg
fQogCiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkp
KSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxl
TGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg0OCwxNSArODU0LDE0IEBAIGlu
dCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIGJv
b2wgUmVuZGVyQm94OjpzY3JvbGxMYXllcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0
b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBib3hMYXllciA9IGxheWVyKCk7Ci0gICAg
aWYgKGJveExheWVyICYmIGJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcikpIHsKLSAgICAgICAgaWYgKHN0b3BFbGVtZW50KQotICAgICAgICAgICAgKnN0
b3BFbGVtZW50ID0gZWxlbWVudCgpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvKiBib3hMYXllciA9IHNjcm9sbGFibGVMYXllcigp
OworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWJv
eExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RvcEVsZW1lbnQpCisgICAgICAgICpzdG9wRWxl
bWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJC
b3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCkBA
IC04NzgsMTUgKzg4MywxNCBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LAogYm9vbCBSZW5kZXJC
b3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3Rv
cEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNlOwotICAgIAotICAgIFJlbmRl
ckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCkgeworICAgIGF1dG8qIGxheWVyID0gc2Ny
b2xsYWJsZUxheWVyKCk7CisgICAgaWYgKGxheWVyKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgICAgIC8vIE9uIE1hYyBvbmx5IHdlIHJlc2V0IHRoZSBpbmxpbmUgZGlyZWN0aW9uIHBvc2l0
aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVudCBzY3JvbGwgKGUuZy4sIGhpdHRpbmcgSG9tZS9FbmQp
LgogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAg
ICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURp
cmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsK
KyAgICAgICAgICAgIHNjcm9sbGVkID0gbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwg
bXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgaWYgKGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
LCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAgICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7
CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xsZWQpIHsKQEAgLTg5OSw5ICs5MDMsOSBAQCBi
b29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlmIChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1l
bnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmIChiICYmICFi
LT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJs
b2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgIGlmIChibG9jayAmJiAhYmxvY2st
PmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzkzNiw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVBy
b2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTkxLDggKzk5NSw4
IEBAIFJlbmRlckJveCogUmVuZGVyQm94OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIAogdm9pZCBSZW5kZXJCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYg
c291cmNlKQogewotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT5wYW5TY3JvbGxG
cm9tUG9pbnQoc291cmNlKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNj
cm9sbGFibGVMYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKIH0KIAogYm9vbCBS
ZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKQEAgLTEwMTcsMTEgKzEw
MjEsOSBAQCBib29sIFJlbmRlckJveDo6bmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9u
KCkgY29uc3QKIAogU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNv
bnN0CiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93
Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9Owot
Ci0gICAgQVNTRVJUKGhhc0xheWVyKCkpOwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3Np
dGlvbigpOworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsK
IH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBj
b25zdApAQCAtMTU2OSw3ICsxNTcxLDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3Jv
dW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBp
ZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVj
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVy
KCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKKyAgICBpZiAoc2Nyb2xsYWJsZUxh
eWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGZvcmVncm91bmRJc0tub3du
VG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFja2dyb3VuZE9ic2N1cmF0aW9uVGVz
dE1heERlcHRoKTsKQEAgLTE4ODgsMTAgKzE4OTAsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6
Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFn
bWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9y
ZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkp
OwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAg
IGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMtPnNj
cm9sbGFibGVMYXllcigpKSB7CiAgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNv
bnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIo
KS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNs
aXBSZWN0Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2
YW5jeSksIDApOworICAgICAgICBjbGlwUmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlw
UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCmluZGV4IDVkZGZjMzExODQ3YmFmZDkzZjMzOTQ4YzExMjViZWVlOGMyODM5ODcuLmMw
ZGE3ZWExMTM0Zjk2NjAzNThjOTkyMTNkZDMzYTg2ZmU1YTU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNDgsOSArNDgs
OSBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJh
Z21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTQ5MCw4ICs0OTAsOCBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJh
aW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBGbG9hdFBvaW50IGNvbnRhaW5lckxv
Y2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0gY29udGFpbmVyUmVjdFJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAgICAgICAgICAgIEZsb2F0U2l6ZShl
bmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5w
YWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9w
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVu
Y2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIGNvbnRh
aW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5n
Qm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxh
YmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigp
LT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxp
bmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxp
bmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRzLnNldENvbnRhaW5pbmdCbG9ja1Jl
Y3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01MDgsOCAr
NTA4LDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9u
Q29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBp
bmdMYXllcikgewogICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciAtPSBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5j
bG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgp
KTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2sp
Ci0gICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciAr
PSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZl
bmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Ig
bm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJv
eFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJl
Y3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlv
bigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRSZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3Np
bmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAm
dmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0
ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZz
ZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zm
c2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAgaWYg
KGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3gu
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAg
c2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlmIChl
bmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNj
cm9sbGFibGVMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9
IGVuY2xvc2luZ0NsaXBwaW5nQm94LnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5p
bmdSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJh
ck9mZnNldCwgc2Nyb2xsT2Zmc2V0LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5n
UmVjdDsKQEAgLTg0NCw4ICs4NDYsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRGaWxsTGF5ZXJFeHRlbmRlZChjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAg
ICAgCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0byByZWZsZWN0IGEgc2Nyb2xs
ZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRzLgogICAgICAgICBzY3JvbGxl
ZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIHNj
cm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgbGF5ZXIoKS0+c2Nyb2xsV2lkdGgoKSAr
IGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldEhlaWdodChib3JkZXJUb3Ao
KSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsgYm9yZGVyQm90dG9tKCkpOworICAgICAgICBh
dXRvIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsV2lkdGgoKSA6IDA7CisgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJM
ZWZ0ICsgc2Nyb2xsV2lkdGggKyBiUmlnaHQpOworICAgICAgICBhdXRvIHNjcm9sbEhlaWdodCA9
IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEhlaWdodCgpIDog
MDsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgc2Ny
b2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwogICAgIH0KICAgICAKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlcihjb250ZXh0LCBmYWxzZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA5OWU4MjRkMTM1
NzA2MzllM2U0ZDQ0M2M5NjVmMTQ0ZTlkNDhmNDQ2Li5kYTc0NzkzN2FjYzMwNmVkMGI0YTQyMTI1
YjQ2NmU0NDQ1NDcyMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKQEAgLTI4NywxNiArMjg3LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMmIGNsaXBSZWN0cykKIAogI2VuZGlmCiAKLXN0
YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQotewotICAgIHN0YXRpYyBT
Y3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwotICAgIHJldHVybiArK2N1cnJlbnRTY29w
ZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
cik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBy
ZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lzUmVuZGVyVmlld0xheWVyKHJlbmRl
cmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKK1JlbmRlckxheWVyOjpSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QsIFJl
bmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQorICAgIDogbV9sYXllclR5cGUobGF5ZXJU
eXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXllcihyZW5kZXJlckxheWVyTW9kZWxPYmplY3Qu
aXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dChyZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1hbEZsb3dPbmx5KGZhbHNl
KQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4dChmYWxzZSkKQEAgLTMwNCwxOSArMjk5LDE1
IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5k
ZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX3pPcmRlckxpc3RzRGlydHkoZmFsc2UpCiAg
ICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRpdmVaT3Jk
ZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2Nl
bmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5
KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGlu
Z0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxz
ZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAgLCBtX3Zp
c2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNvbnRlbnQo
ZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2UpCiAgICAg
LCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydChmYWxz
ZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMzMCwxNSArMzIxLDYgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1f
aW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRh
dGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzUzLDUzICszMzUsMjIgQEAgUmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2Rl
bE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHko
KSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRleHQoc2hvdWxkQmVDU1NTdGFja2luZ0NvbnRl
eHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGlu
Z0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdT
Y29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRpbmdMYXllciBpcyBpbml0aWFsaXplZCBpbiBS
ZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3VnaAorICAgIC8vIGl0IGJlbG9uZ3MgdG8gUmVu
ZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAgICAvLyAibV9pc1NlbGZQYWludGluZ0xheWVy
ID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOyIKKyAgICAvLyBoZXJlLCBpbiB0aGUgY29u
c3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxheWVyU1ZHL0hUTUwgY2xhc3NlcyBhcmVuJ3Qg
aW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFyZW5kZXJlcigpLmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9o
YXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Ny
b2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQot
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogewot
ICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50
SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7Ci0KLSAgICBBU1NFUlQobV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9s
bGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLSAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVt
ZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAg
ICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAg
ICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMp
OwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVjdGlvbigpOwog
Ci0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIoKTsKLQogICAgIGNs
ZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygp
KSB7CkBAIC00MTgsNiArMzY5LDIwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAg
IFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocmVuZGVyZXIoKS5yZW5k
ZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhZmlyc3RDaGlsZCgpKTsKIH0KIAorUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyKCkKK3sKKyAgICBpZiAo
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K2NvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXll
cigpIGNvbnN0Cit7CisgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisg
ICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAg
IHJldHVybiBudWxscHRyOworfQorCiB2b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJM
YXllciYgY2hpbGQsIFJlbmRlckxheWVyKiBiZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJMYXll
ciogcHJldlNpYmxpbmcgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKSA6IGxhc3RDaGlsZCgpOwpAQCAtOTM1LDcgKzkwMCwxMCBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRy
ZWUsIGJvbwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFn
PiBmbGFncykKIHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKHNjcm9sbGFibGVMYXll
cikKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bklmTmVlZGVkKCk7CiAKICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFw
LT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKQEAgLTk0Myw3ICs5MTEs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRy
eU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xp
cCByZWN0IGluZm9ybWF0aW9uLgogICAgIGNsZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFz
T3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxh
YmxlTGF5ZXItPmhhc092ZXJmbG93Q29udHJvbHMoKSkgewogICAgICAgICBMYXlvdXRTaXplIG9m
ZnNldEZyb21Sb290OwogICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgICAgICBvZmZz
ZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9GbG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFic29sdXRl
UG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAtOTUyLDcgKzkyMCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwg
T3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgbWF5
IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgogICAgICAgICAgICAgb2Zmc2V0RnJvbVJv
b3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdCgpKTsKICAgICAgICAgfQotICAgICAgICBwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZElu
dFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVw
ZW5kZW50RmxhZ3MoKTsKQEAgLTEwMjksMTMgKzk5Nyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0CiAgICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9ucyhnZW9tZXRyeU1hcCwgZmxh
Z3MpOwogCiAgICAgLy8gV2l0aCBhbGwgb3VyIGNoaWxkcmVuIHBvc2l0aW9uZWQsIG5vdyB1cGRh
dGUgb3VyIG1hcnF1ZWUgaWYgd2UgbmVlZCB0by4KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vz
bid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCi0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNj
cm9sbGFibGVMYXllci0+bWFycXVlZSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZU1hcnF1ZWUoKTsKIAogICAgIGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYg
cmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0
aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9z
aXRvcigpLmZpeGVkTGF5ZXJJbnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTExNSw5MiAr
MTA3OCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5k
ZXJlcigpLmNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJU
KHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5n
LCAiUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIp
OwotCi0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0g
ICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwo
KQotewotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwot
ICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21l
dHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAg
Ly8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlz
IGxheWVyIGluIG9yZGVyIHRvCi0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBm
bGFncz8KLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwg
SXNPdmVyZmxvd1Njcm9sbCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25T
ZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQotewotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3Ju
ZXIgY2FzZXMgd2hlcmUKLSAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVwZGF0
ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KLSAgICB1cGRhdGVEZXNjZW5kYW50
RGVwZW5kZW50RmxhZ3MoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50
IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGlu
ZwotICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZp
c2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCi0gICAgLy8gcmVjb21wdXRlIGFs
bCBvdXIgcG9zaXRpb25zIGFueXdheS4KLSAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRhbnQg
JiYgIW1faGFzVmlzaWJsZUNvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgcG9z
aXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwotICAgIGlmIChwb3NpdGlvbkNo
YW5nZWQpCi0gICAgICAgIGZsYWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOwotCi0gICAgaWYg
KGZsYWdzLmNvbnRhaW5zQW55KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3BvcnRD
b25zdHJhaW5lZEFuY2VzdG9yLCBJc092ZXJmbG93U2Nyb2xsIH0pKQotICAgICAgICBjbGVhckNs
aXBSZWN0cygpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0
cmFpbmVkUG9zaXRpb24oKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENvbnN0
cmFpbmVkQW5jZXN0b3IpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgIGZsYWdzLmFkZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsKLSAg
ICAKLSAgICBib29sIHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFpbnMo
SGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNBbGwo
eyBJc092ZXJmbG93U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0pKSAm
JiBpc1NlbGZQYWludGluZ0xheWVyKCk7Ci0gICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAhaXNW
aXN1YWxseU5vbkVtcHR5KCk7Ci0gICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MgPSBn
ZW9tZXRyeU1hcCAmJiAoKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFsbHlF
bXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsKLSAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdz
KQotICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJl
bnQoKSk7Ci0KLSAgICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgewotICAgICAgICAv
LyBXaGVuIHNjcm9sbGluZywgd2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2aXN1
YWxseSBub24tZW1wdHkgbGF5ZXJzLgotICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQotICAg
ICAgICAgICAgY2xlYXJSZXBhaW50UmVjdHMoKTsKLSAgICAgICAgZWxzZSAvLyBGSVhNRTogV2Ug
Y291bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJl
ZS4KLSAgICAgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKLSAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIC8vIFdoZW4gU2Ny
b2xsVmlldydzIG1fcGFpbnRzRW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5ZXIg
YmFja2luZyBjaGFuZ2VzLCB0aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KLSAgICAg
ICAgLy8gdmlzdWFsIHRvIGxheW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNh
Y2hlZCByZXBhaW50IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUgcmVj
b21wdXRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xODgxMjEpLgotICAgICAgICAvLyBDaGVjayB0aGF0
IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNvcnJlY3QuCi0gICAgICAgIEFTU0VSVCghcmVuZGVyZXIo
KS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0
cygpLm1fcmVwYWludFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOwotICAgICAgICBBU1NFUlQo
IXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX291dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRzRm9y
UmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOwotICAgIH0KLSAgICAK
LSAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBmbGFncyk7Ci0KLSAgICAvLyBXZSBkb24ndCB1
cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xsaW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2gg
ZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKLSAgICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVu
ZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXll
ciBwb3NpdGlvbiB3YXMKLSAgICAvLyB1cGRhdGVkIGFib3ZlLgotCi0gICAgaWYgKG1fbWFycXVl
ZSkgewotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRy
dWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
LSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQotICAgICAgICBnZW9t
ZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKLQotICAgIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpOwot
fQotCiAjaWYgRU5BQkxFKENTU19DT01QT1NJVElORykKIAogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlQmxlbmRNb2RlKCkKQEAgLTE2OTEsMzQgKzE1NjgsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiog
ZmxhZ3MKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+
KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgCi0gICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCi0gICAgUmVu
ZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZv
clBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAgICAgICAgLy8g
Rm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3Np
dGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJl
bnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50
IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93
UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVy
ZXIoKSkpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3Np
dGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICAgICAg
ICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKHBv
c2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94
U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7Ci0gICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAg
ICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlv
bigpKTsKLQotICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVu
dHNTY3JvbGxpbmdTY29wZSgpOwotICAgIH0KIAotICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUg
fHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAg
ICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsK
LSAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Nj
cm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgIG1fY29udGVudHNT
Y3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgLy8gU3VidHJhY3Qgb3Vy
IHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnN1YnRy
YWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKGxvY2FsUG9pbnQpOwogCiAg
ICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0Q2hhbmdlZCA9IGZhbHNlOwogICAgIGlmIChyZW5kZXJl
cigpLmlzSW5GbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xODQwLDg2ICsxNjkzLDI4IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVy
KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKLXsKLSAg
ICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci19Ci0KLXN0YXRpYyBSZW5k
ZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykKK1JlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NG
cmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7Ci0gICAgaWYgKGF1
dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVy
KCkpCisgICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdC
bG9ja09yZGVyKCkpCiAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAgIGlmIChjcm9zc0Zy
YW1lQm91bmRhcmllcyA9PSBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIp
OwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9z
c0ZyYW1lQm91bmRhcmllcykgY29uc3QKLXsKLSAgICBSZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxv
d2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlOwotCi0gICAgYXV0byBp
c0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKSB7Ci0g
ICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpICYmIGRvd25jYXN0
PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCk7Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKLSAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKLSAgICAKLSAgICBmb3Ig
KGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBj
cm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7Ci0g
ICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIpKQotICAgICAgICAg
ICAgcmV0dXJuIG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0lu
c2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblBy
b2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVu
ZGVyTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAo
IXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0
byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0
dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7Ci0jZW5kaWYKKyAg
ICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50
KCk7CisgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVyUmVuZGVyZXIgPSBvd25lckVsZW1l
bnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRlcmVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXll
cigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVk
QW5jZXN0b3IoKSBjb25zdApAQCAtMjQ0NywzMzEgKzIyNDIsNiBAQCBMYXlvdXRTaXplIFJlbmRl
ckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5
ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29yZHMoYW5j
ZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBi
b29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJp
bGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZs
b3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xs
c092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLSAgICBy
ZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxl
KCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5h
bHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICByZXR1cm4g
ZmFsc2U7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRv
dWNoRXZlbnQpCi17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxl
dCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCi0gICAgaWYgKGhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCkKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8IG1fcmVnaXN0
ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5k
ZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcgPSB0cnVlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlmICghcmVuZGVyZXIoKS5l
bGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KQotICAgICAgICByZXR1cm47Ci0KLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOwotfQotI2VuZGlmIC8vIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFm
dGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5n
KCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFs
aWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQXN5bmNT
Y3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0
ZWRTY3JvbGxpbmdGb3JMYXllcigqdGhpcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkanVz
dGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQotewotICAgIC8vIFRoaXMgaW1wbGVt
ZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcv
ZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2Lgot
ICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRh
ID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEg
PiAxKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERl
bHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAg
IGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0
YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigt
YWRqdXN0ZWREZWx0YSkpKSArIDE7Ci0KLSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KLQot
c3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYg
ZGVsdGEpCi17Ci0gICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53
aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBv
aW50KQotewotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSByZW5kZXJlcigp
LmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpOwotICAgIAot
ICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24g
aXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93
LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAotICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91
c01vdXNlUG9zaXRpb247Ci0gICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8
fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCi0gICAgICAgIGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgICBwcmV2
aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOwotCi0gICAgSW50U2l6
ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsKLQotICAgIGlm
IChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8v
IGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAgZGVs
dGEuc2V0V2lkdGgoMCk7Ci0gICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKLQotICAg
IHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOwotfQotCi0v
LyBGSVhNRTogdW5pZnkgd2l0aCB0aGUgc2Nyb2xsUmVjdFRvVmlzaWJsZSgpIGNvZGUgYmVsb3cu
Ci12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRl
bHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKLXsKLSAgICBpZiAoZGVsdGEuaXNa
ZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1w
ID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgp
LmlzTm9uZSgpOwotCi0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJl
c3RyaWN0ZWRCeUxpbmVDbGFtcCkgewotICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3
U2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpz
Y3JvbGxlZEFyZWEgPSB0aGlzOwotCi0gICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8g
dGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRy
eQotICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNl
dCAtIHNjcm9sbE9mZnNldCgpOwotICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5p
c1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTog
VGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KLSAgICAgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6
RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKQotICAgICAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZz
ZXQsIHNjcm9sbGVkQXJlYSk7Ci0KLSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJl
bmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0
Ci0gICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBp
cyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9s
bGVkQXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhl
IHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVy
RWxlbWVudD8gCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yODIzNwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNj
cm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAo
IW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb24udmFsdWUoKSkpOwotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpu
dWxsb3B0OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxU
b1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24g
cG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRp
b24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9s
bDo6WWVzKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9u
KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6
OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25z
dAotewotICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50
KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVl
c3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5B
QkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJl
YW0gPDwgKnRoaXMgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlv
bik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5y
ZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChj
dXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5O
b25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0
aW9ucygpOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGlu
ZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9m
ZnNldCkgOiBzY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhp
cy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNT
Y3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKLQotICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBl
ZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Ny
b2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9s
bFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBw
cmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNl
dCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZz
ZXQob2Zmc2V0KSA6IG9mZnNldDsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xs
T2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRD
dXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXll
cjo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9u
IDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xs
VHlwZTo6VXNlcikgPDwgIikiKTsKLQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0g
cG9zaXRpb247Ci0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0
byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCi0gICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdo
YXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3
aXRoIGl0IHJlbW92ZWQuCi0gICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgo
KSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9m
ZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwot
ICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAg
ICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlm
IChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9s
bFhPZmZzZXQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9z
Y3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhP
ZmZzZXQgLT0gY2FyZXRXaWR0aDsKLQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xs
WE9mZnNldCk7Ci0gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChuZXdPZmZzZXQpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYg
KG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9y
U3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRo
IGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAg
ICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2Fn
ZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVk
c0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmll
dyYgdmlldyA9IHJlbmRlcmVyKCkudmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlv
bnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNo
b3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJv
bSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxh
eW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdl
J3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25j
ZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
T3ZlcmZsb3dTY3JvbGwoKTsKLQotICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBk
YXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXll
cnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIK
LSAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVp
cmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7
IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdo
ZW4gdGhhdCBjb21wbGV0ZXMuCi0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkgewotICAgICAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0
ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhl
IGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJs
aW5nIGluIHotb3JkZXIpLAotICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5k
YW50IHdhbGsgZnJvbSB0aGUgcGFpbnQtb3JkZXIgcGFyZW50LgotICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBwYWludFBhcmVudCA9IHBhaW50T3JkZXJQYXJlbnQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBk
YXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxh
ciByZWdpb24uCi0gICAgICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVy
aW5nRGVwZW5kZW50UmVnaW9ucygpOwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5
b3V0KHJlbmRlcmVyKCkuZnJhbWUoKSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVu
ZGVyZXIoKS5mcmFtZSgpOwotICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIgPSByZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2Fy
ZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91
dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygp
ID8gcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVy
ZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQot
ICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RG
b3JSZXBhaW50KTsKLSAgICBpZiAocmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
cXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlz
cGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZl
bnQpOwotCi0gICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRy
eVVwZGF0ZSgpOwotICAgICAgICBzZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGll
cmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+
bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBz
Y2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1Jl
cGFpbnQpCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwg
YW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQ
ZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVy
ZmxvdygpKQotICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgp
OwotCi0gICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAg
IGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQogc3RhdGlj
IGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxl
bWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewogICAg
IC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Ny
b2xsaW5nLgpAQCAtMjgxNiwzMCArMjI4NiwzMyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAog
CiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVSZWN0OwogICAgIEZyYW1lVmlldyYg
ZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAgYXV0byogcGFy
ZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiAgICAgYm9vbCBhdXRv
c2Nyb2xsTm90SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
YXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKIAogICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkp
IHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVy
KCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgICAgIC8vIERvbid0
IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5
IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBw
cmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2Fm
YXJpIFJTUy4KICAgICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICAgICAg
QVNTRVJUKGJveCk7CiAgICAgICAgIExheW91dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJz
b2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3Vu
ZGluZ0JveCgpKTsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBkaXJl
Y3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNjcm9sbCBi
YXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAgICAgICAgICAgLy8g
c3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHggb2YgbG9j
YWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAg
ICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShM
YXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDAp
KTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBfbHUs
IGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAgIExheW91
dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxFeHBv
c2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAot
ICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3Qp
LmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xs
T2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xk
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5jbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJl
dmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQg
IT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPmN1
cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJ
bkFuaW1hdGlvbikgeworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgICAgICBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgICAgIGlmIChhdXRv
c2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhhdmlv
ciwgYm94LT5lbGVtZW50KCkpKQogICAgICAgICAgICAgICAgIGFuaW1hdGVkID0gQW5pbWF0ZWRT
Y3JvbGw6OlllczsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOworICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0
aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogICAgICAgICAgICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNj
cm9sbE9mZnNldDsKICAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZz
ZXREaWZmZXJlbmNlKTsKICAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBV
c2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKQEAgLTI4NTcsNyArMjMzMCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24g
ZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0
cm95ZWQuCiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJl
YWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2
aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRW
aXNpYmxlUmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50
VmlzaWJsZVJlY3QpOwogICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3NlUmVjdCA9IGdl
dFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9u
cy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAogICAgICAgICAgICAgICAgIEludFBvaW50IHNj
cm9sbFBvc2l0aW9uKHJvdW5kZWRJbnRQb2ludChleHBvc2VSZWN0LmxvY2F0aW9uKCkpKTsKQEAg
LTI4NzMsOCArMjM0NiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAg
ICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKIAogICAgICAgICAgICAgICAgIGlmIChvcHRpb25z
LnNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdhdGVTY3JvbGxUb1BhcmVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllciA9IG93
bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmVudExheWVyID0gZW5jbG9zaW5nTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0g
b3duZXJFbGVtZW50LT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nTGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExh
eWVyID0gc2Nyb2xsYWJsZUxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBp
bnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBwYXJlbnQgZnJhbWUncyBkb2N1bWVudC4K
ICAgICAgICAgICAgICAgICAgICAgbmV3UmVjdCA9IGZyYW1lVmlldy5jb250ZW50c1RvQ29udGFp
bmluZ1ZpZXdDb250ZW50cyhlbmNsb3NpbmdJbnRSZWN0KG5ld1JlY3QpKTsKICAgICAgICAgICAg
ICAgICAgICAgaW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGlkZWFsbHkgbmVlZCB0byBk
ZXRlcm1pbmUgaWYgdGhpcyA8aWZyYW1lPiBpcyBpbnNpZGUgcG9zaXRpb246Zml4ZWQuCkBAIC0y
OTMxLDI0ICsyNDA2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShj
b25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50
TGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMp
OwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVy
cygpKSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0
byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAv
LyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUu
Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5n
Q29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlm
ICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3Io
KS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9z
aXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVy
cyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAg
ICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2lu
Z0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51
cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBj
b21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0K
LQotTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJl
Y3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lk
ZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblkpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBv
c2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9z
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcmIGZy
YW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwogICAgIGlmIChyZW5kZXJl
cigpLmlzUmVuZGVyVmlldygpICYmIGluc2lkZUZpeGVkKSB7CkBAIC0zMDI2LDExNTUgKzI0ODQs
OTcgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXkKICAgICAgICAgLy8gSWYgdGhlIHJlY3QgaXMg
YmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBjZW50
ZXIuIE90aGVyIGFsaWdubWVudHMgd2lsbCB3b3JrLgogICAgICAgICBzY3JvbGxZID0gU2Nyb2xs
QWxpZ25tZW50OjpnZXRWaXNpYmxlQmVoYXZpb3IoYWxpZ25ZKTsKICAgICAgICAgaWYgKHNjcm9s
bFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCi0gICAgICAgICAg
ICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6Tm9TY3JvbGw7Ci0gICAgfSBl
bHNlIGlmIChpbnRlcnNlY3RIZWlnaHQgPiAwKQotICAgICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xl
IGlzIHBhcnRpYWxseSB2aXNpYmxlLCB1c2UgdGhlIHNwZWNpZmllZCBwYXJ0aWFsIGJlaGF2aW9y
Ci0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldFBhcnRpYWxCZWhhdmlvcihh
bGlnblkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0
SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKLSAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24g
dG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgot
ICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNp
YmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgotICAgIGlmIChzY3JvbGxZID09
IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VS
ZWN0Lm1heFkoKSA+IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwg
dmlzaWJsZVJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbTsKLQotICAgIC8vIEdpdmVuIHRoZSBZIGJlaGF2aW9yLCBj
b21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCi0gICAgTGF5b3V0VW5pdCB5OwotICAgIGlmIChzY3Jv
bGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsKQotICAgICAgICB5ID0g
dmlzaWJsZVJlY3QueSgpOwotICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50
OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b20pCi0gICAgICAgIHkgPSBleHBvc2VSZWN0Lm1heFkoKSAt
IHZpc2libGVSZWN0LmhlaWdodCgpOwotICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxp
Z25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCi0gICAgICAgIHkgPSBleHBvc2VSZWN0Lnko
KSArIChleHBvc2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKLSAg
ICBlbHNlCi0gICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKLQotICAgIHJldHVybiBMYXlvdXRS
ZWN0KExheW91dFBvaW50KHgsIHkpLCB2aXNpYmxlUmVjdC5zaXplKCkpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbkluV2luZG93KQot
ewotICAgIEludFBvaW50IGN1cnJlbnREb2N1bWVudFBvc2l0aW9uID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkud2luZG93VG9Db250ZW50cyhwb3NpdGlvbkluV2luZG93KTsKLSAgICBz
Y3JvbGxSZWN0VG9WaXNpYmxlKExheW91dFJlY3QoY3VycmVudERvY3VtZW50UG9zaXRpb24sIExh
eW91dFNpemUoMSwgMSkpLCBmYWxzZSwgeyBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNj
cm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2Nyb2xsQWxpZ25tZW50OjphbGln
blRvRWRnZUlmTmVlZGVkLCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblJlc2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2Ug
bmVlZCBhIHNwZWNpYWwgY2FzZSBmb3IgPGlmcmFtZT4gYmVjYXVzZSB0aGV5IG5ldmVyIGhhdmUK
LSAgICAvLyBoYXNPdmVyZmxvd0NsaXAoKS4gSG93ZXZlciwgdGhleSBkbyAiaW1wbGljaXRseSIg
Y2xpcCB0aGVpciBjb250ZW50cywgc28KLSAgICAvLyB3ZSB3YW50IHRvIGFsbG93IHJlc2l6aW5n
IHRoZW0gYWxzby4KLSAgICByZXR1cm4gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
cmVuZGVyZXIoKS5pc1JlbmRlcklGcmFtZSgpKSAmJiByZW5kZXJlcigpLnN0eWxlKCkucmVzaXpl
KCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcG9zc2libGUgb24gZ2VuZXJhdGVkIGNvbnRl
bnQgYnV0IGlzIG5vdCByaWdodCBub3cuCi0gICAgaWYgKCFpblJlc2l6ZU1vZGUoKSB8fCAhY2Fu
UmVzaXplKCkgfHwgIXJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogVGhlIG9ubHkgY2FzZSB3aGVyZSByZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5k
ZXJlcigpICE9IHJlbmRlcmVyIGlzIHdpdGggY29udGludWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIg
aGVyZT8KLSAgICAvLyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0aWxsIGJlIGJldHRlciB0byBkZWFs
IHdpdGggdGhlbSBleHBsaWNpdGx5LgotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigp
LmVsZW1lbnQoKTsKLSAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oZWxl
bWVudC0+cmVuZGVyZXIoKSk7Ci0KLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LT5k
b2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkubW91
c2VQcmVzc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBy
ZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICBhdXRvIGFic29sdXRlUG9p
bnQgPSBkb2N1bWVudC52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZ0LnBvc2l0aW9uKCkpOwot
ICAgIGF1dG8gbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvQ29udGVudHMo
YWJzb2x1dGVQb2ludCkpOwotCi0gICAgTGF5b3V0U2l6ZSBuZXdPZmZzZXQgPSBvZmZzZXRGcm9t
UmVzaXplQ29ybmVyKGxvY2FsUG9pbnQpOwotICAgIG5ld09mZnNldC5zZXRXaWR0aChuZXdPZmZz
ZXQud2lkdGgoKSAvIHpvb21GYWN0b3IpOwotICAgIG5ld09mZnNldC5zZXRIZWlnaHQobmV3T2Zm
c2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgCi0gICAgTGF5b3V0U2l6ZSBjdXJyZW50
U2l6ZSA9IExheW91dFNpemUocmVuZGVyZXItPndpZHRoKCkgLyB6b29tRmFjdG9yLCByZW5kZXJl
ci0+aGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICBMYXlvdXRTaXplIG1pbmltdW1TaXplID0g
ZWxlbWVudC0+bWluaW11bVNpemVGb3JSZXNpemluZygpLnNocnVua1RvKGN1cnJlbnRTaXplKTsK
LSAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKLSAg
ICAKLSAgICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZz
ZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsK
LSAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7Ci0gICAgICAg
IGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsK
LSAgICB9Ci0gICAgCi0gICAgTGF5b3V0U2l6ZSBkaWZmZXJlbmNlID0gKGN1cnJlbnRTaXplICsg
bmV3T2Zmc2V0IC0gYWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFuZGVkVG8obWluaW11bVNpemUpIC0g
Y3VycmVudFNpemU7Ci0KLSAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gZG93bmNh
c3Q8U3R5bGVkRWxlbWVudD4oZWxlbWVudCk7Ci0gICAgYm9vbCBpc0JveFNpemluZ0JvcmRlciA9
IHJlbmRlcmVyLT5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94Owot
Ci0gICAgUmVzaXplIHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnJlc2l6ZSgpOwotICAgIGlm
IChyZXNpemUgIT0gUmVzaXplOjpWZXJ0aWNhbCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKLSAg
ICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAg
ICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChz
ZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5MZWZ0LCByZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8g
em9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5
b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7
Ci0gICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91
bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NT
X1BYKTsKLSAgICB9Ci0KLSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBk
aWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBm
cm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVT
dHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkg
LyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVs
ZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJl
bmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgp
OwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5o
ZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxC
b3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdo
dCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVu
Y2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVu
dC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hv
dWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBw
b2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNl
dFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxU
byhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJ
RCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29t
cG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNj
cm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsK
LX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlz
aWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlz
aWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJT
cGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVz
aW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9s
bGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNp
YmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwg
dmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgw
LCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVz
ZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVB
cmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hh
YmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0g
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNp
emUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0
KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNo
LnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUu
d2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAt
IChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJu
IHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9j
dXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Ny
b2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICBy
ZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVy
TGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAg
ICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJl
Y3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBh
cmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVy
KCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJh
cikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQg
cG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChz
Y3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0K
LQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCks
IHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxl
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBp
ZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXpl
KHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhl
aWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwot
fQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsK
LQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBj
b250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2li
bGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRz
U2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNv
bnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVD
aGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFi
bGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChy
ZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsK
LSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hp
bGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxk
U3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9t
ZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
RW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0
ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9s
bCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0K
LSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbklu
VmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
Lmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVy
TGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsK
LSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwot
ICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gu
cGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBh
dXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAw
OwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIq
IHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwot
ICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNj
cm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9u
VGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAg
ICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6
ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3Zlcmxh
eUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikg
fHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJT
aXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25s
eSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAg
ICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQs
Ci0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0K
LSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0g
ICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0g
ICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAg
ICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAg
ICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0
aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0
KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9y
aXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewot
ICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Owot
ICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAg
IGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikK
LSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0K
LSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAg
ICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlm
IChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJv
dHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZ
Q29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5l
ci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29y
bmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29y
bmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAg
ICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAg
IGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQot
ICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFy
VGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQu
cmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNr
bmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUlu
dFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9s
bGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0
b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAo
JnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZh
bGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0g
ICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAg
ICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8g
SWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVl
ZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9s
bFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAg
ICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+
ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRS
ZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0
YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBh
aW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0
eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Ny
b2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qg
PSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hh
ZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRl
ckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVu
ZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxi
YXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRl
ckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNj
cm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRn
ZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50
YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xs
YmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwot
ICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAg
ICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50
VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0g
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAg
ICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXIt
PmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xs
YmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJl
bnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpz
Y3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJl
cigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAg
aWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRl
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93
KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxl
UmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFz
dGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0
cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVy
IHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJh
cidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2Vk
KCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3Jv
bGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1f
dkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1
YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6
IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNj
cm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVD
aGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQo
KTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAg
IHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5k
ZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAg
Zm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhp
cywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zm
c2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVu
dHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5j
bG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVu
ZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVu
dD4oZW5jbG9zaW5nRWxlbWVudCgpKSwgKmJveCwgYm94LT5zdHlsZSgpKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFz
Y3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsK
LSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEds
b2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAi
ICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigp
IGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5k
KCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlz
KSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkp
OwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0
cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBp
ZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1v
ZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkp
IHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50
ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwg
IiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNl
KCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwg
IXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNj
cm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwg
IW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXll
cjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dz
T3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
OjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25z
dAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNp
emVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJS
ZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3Ju
ZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRl
cmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9t
Um9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1f
dkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21S
b290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxi
YXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0
RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmICht
X3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0
cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVy
LT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Ny
b2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXll
cjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJM
YXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dS
ZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
LSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7
Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9s
bERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
QVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0g
ICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3Zl
cmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3Zl
cmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVm
dE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgp
KTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQot
ICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1Rv
cCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1z
Y3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0g
ICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewot
ICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNj
cm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
LQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xp
ZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAg
cmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVp
Z2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVy
ZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxT
Y3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJv
b2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Ny
b2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4g
b3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAg
T3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAg
ICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYg
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0
dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VB
dXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQo
KQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAg
Ym9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwot
Ci0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBu
ZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAg
ICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAo
bV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92
ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVk
IHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAg
ICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRh
bFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigp
ICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxC
YXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAm
JiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAg
IGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xs
QmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhciho
YXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJl
cigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAg
IGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBi
bG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5s
YXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dS
ZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAg
IGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0Jv
eCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNs
ZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8v
IFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9o
QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRX
aWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGll
bnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7
Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0
KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhl
aWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxh
eW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOwotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJl
IHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0
eWxlIGNoYW5nZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTk2NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICgh
Ym94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkgewotICAg
ICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBv
c2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBwdWxsIG91ciBzY3Jv
bGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4K
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQg
b25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCi0gICAgICAg
IC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGlu
c2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAg
ICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91
bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgotICAg
ICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAg
ICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhm
YWxzZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQo
KTsKLQotICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNl
dCgpKSk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21w
b3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdDb25m
aWd1cmF0aW9uVXBkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKLSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsK
LQotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAg
aWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3Rz
LnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Ny
b2xsOworICAgIH0gZWxzZSBpZiAoaW50ZXJzZWN0SGVpZ2h0ID4gMCkKKyAgICAgICAgLy8gSWYg
dGhlIHJlY3RhbmdsZSBpcyBwYXJ0aWFsbHkgdmlzaWJsZSwgdXNlIHRoZSBzcGVjaWZpZWQgcGFy
dGlhbCBiZWhhdmlvcgorICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRQYXJ0
aWFsQmVoYXZpb3IoYWxpZ25ZKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxB
bGlnbm1lbnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7CisgICAgLy8gSWYgd2UncmUgdHJ5
aW5nIHRvIGFsaWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBm
dXJ0aGVyIGRvd24KKyAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIg
dGhhbiB0aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KKyAgICBp
ZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnblRvQ2xvc2VzdEVk
Z2UgJiYgZXhwb3NlUmVjdC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVj
dC5oZWlnaHQoKSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQorICAgICAgICBzY3JvbGxZID0gU2Ny
b2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b207CiAKLSAgICBpZiAocmVjdHMucmVz
aXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIC8v
IEdpdmVuIHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCisgICAgTGF5
b3V0VW5pdCB5OworICAgIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6
Ok5vU2Nyb2xsKQorICAgICAgICB5ID0gdmlzaWJsZVJlY3QueSgpOworICAgIGVsc2UgaWYgKHNj
cm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Cb3R0b20pCisgICAgICAg
IHkgPSBleHBvc2VSZWN0Lm1heFkoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOworICAgIGVsc2Ug
aWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25DZW50ZXIpCisg
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VSZWN0LmhlaWdodCgpIC0gdmlzaWJs
ZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKyAgICBlbHNlCisgICAgICAgIHkgPSBleHBvc2VSZWN0Lnko
KTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2lu
dCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBw
cm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2ludCBjdXJyZW50RG9jdW1lbnRQb3NpdGlv
biA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLndpbmRvd1RvQ29udGVudHMocG9zaXRp
b25JbldpbmRvdyk7CisgICAgc2Nyb2xsUmVjdFRvVmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnRE
b2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEpKSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2
ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNj
cm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzIH0pOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93
Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRP
ZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMpCitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewot
ICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYg
KCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBP
dmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXll
ciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhp
bmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRl
bGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAg
Ly8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBh
c3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50
IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNv
IHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0
aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxi
YXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3Zl
cmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90
IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQg
aW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1h
Z2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAg
ICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9v
dCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jv
b3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigp
OwotCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjaGVjayBp
cyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2Uu
Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFy
cygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0
ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAg
ICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0Owot
Ci0gICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9y
bWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1l
cwotICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0
IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5z
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2Un
cmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVt
LgotICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAg
ICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotICAgIGlmIChtX3ZCYXIg
JiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV92QmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQot
ICAgICAgICByZXR1cm47CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIu
YXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVp
Z2h0KCkpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlm
IHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0
aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4
dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQg
b3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3Ju
ZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFn
ZVJlY3QpOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQs
IGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgSW50UmVjdCBhYnNSZWN0ID0gc2Ny
b2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBp
ZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9z
KTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAg
ICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFz
IGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKLSAgICAg
ICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFi
c1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChoYXNCbGVuZE1vZGUoKSkK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7CiAKLSAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxi
YXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgotICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Ci19CisgICAgaWYgKGlz
b2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVu
ZGluZyJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJS
ZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7Ci0gICAgRmxvYXRT
aXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJ
bWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVD
b3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6
ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKLSAgICAgICAgY29ybmVyUmVzaXpl
clNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJl
c2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKLSAgICAgICAgY29ybmVy
UmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIGlmIChpc0NvbXBv
c2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0
cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07CisgICAgICAgIHN0
cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFt
LnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29u
dGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUu
d2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0
KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUo
RmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCi0g
ICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQucmVz
dG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXplQ29y
bmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJl
cigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3SW1h
Z2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCkKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9w
KCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6
ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJl
c2l6ZXI7Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAo
IXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAg
IHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRl
eHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3Qp
OwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGlu
ZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcg
d2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0g
ICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0g
ICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIExheW91dFJlY3Qg
bGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5zZXRT
aXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIu
aGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8
dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxh
cmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwor
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92
ZXJmbG93UmVjdC55KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKIHsKLSAgICBpZiAoIWNhblJlc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVz
aXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0
dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAog
ewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwotICAgIGlmIChyZW5kZXJlcigpLnN0
eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7Ci0gICAgICAgIGlmIChyZWN0cy5yZXNp
emVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIg
YW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCi0gICAgaWYgKG1fdkJhciAmJiBt
X3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAg
ICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy5ob3Jpem9u
dGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQu
c2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7
CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllcikKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
UmlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9u
U2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAg
LTQxOTIsMTcgKzI1OTIsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdl
dC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXllclBh
aW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0
KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBw
YWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5n
T3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xp
cFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxlKQogewogICAgIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7
CkBAIC00MjI1LDcgKzI2MTQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8v
IGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0
byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3Vy
CiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNv
LgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5w
YXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRC
ZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250
YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiBs
YXllci0+c2Nyb2xsYWJsZUxheWVyKCkgJiYgbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT51c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5
ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQyNyw3ICsyODE2LDgg
QEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBo
YXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBv
ciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNj
cm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkg
fHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCBkb2VzTm90
VXNlQ29tcG9zaXRlZFNjcm9sbGluZyA9ICFzY3JvbGxhYmxlTGF5ZXIoKSB8fCAhc2Nyb2xsYWJs
ZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgYm9vbCBjb250ZW50c1Nj
cm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBkb2VzTm90
VXNlQ29tcG9zaXRlZFNjcm9sbGluZykgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1l
bnQoKSk7CiAgICAgYm9vbCBpc1pvb21pbmcgPSAhcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmhh
c1N0YWJsZVBhZ2VTY2FsZUZhY3RvcigpOwogICAgIGlmIChzY3JvbGxpbmdPbk1haW5UaHJlYWQg
fHwgY29udGVudHNTY3JvbGxCeVBhaW50aW5nIHx8IGlzWm9vbWluZykgewogICAgICAgICBkaWRR
dWFudGl6ZUZvbnRzID0gY29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKTsKQEAg
LTQ3MjIsOCArMzExMiw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBw
YWludExpc3QocG9zaXRpdmVaT3JkZXJMYXllcnMoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlz
UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAg
ICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJl
bnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7CisgICAgICAgIGlmIChpc1BhaW50aW5nT3Zl
cmxheVNjcm9sbGJhcnMgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkt
Pmhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT5wYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbyk7CiAKICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAg
ICAgICAgICAgIC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUs
IHBhaW50RGlydHlSZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMu
CkBAIC01MTkxLDE4ICszNTgxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZENsaXBw
aW5nTWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXIKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQotewotICAg
IGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgewotICAgICAgICBp
ZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwg
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMo
Y29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3Vu
ZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5z
dWJwaXhlbE9mZnNldCkpLAotICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFj
a2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7Ci0gICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgfQotfQot
CiB2b2lkIFJlbmRlckxheWVyOjpjb2xsZWN0RXZlbnRSZWdpb25Gb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpCiB7CiAgICAgQVNTRVJUKGxvY2FsUGFpbnRpbmdJ
bmZvLmV2ZW50UmVnaW9uQ29udGV4dCk7CkBAIC01MjM2LDcgKzM2MTQsNyBAQCBib29sIFJlbmRl
ckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mCiAgICAgICAgICAgICAgICAgYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3Qu
c2NhbGUoc2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KGFi
c29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBo
aXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJs
ZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKKyAgICAgICAgICAg
IGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNp
YmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJl
Y3QpKTsKICAgICB9CiAKICAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5
ZXIodGhpcywgbnVsbHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdExv
Y2F0aW9uLCBmYWxzZSk7CkBAIC01NDY3LDkgKzM4NDUsMTEgQEAgUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIq
IGNvbnQKICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5
b3V0UG9pbnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50
KSkgewotICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
bFBvaW50KTsKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXItPmNhblJlc2l6ZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewor
ICAgICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQ
b2ludCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IC8vIE5leHQgd2Ugd2FudCB0byBzZWUgaWYgdGhlIG1vdXNlIHBvcyBpcyBpbnNpZGUgdGhlIGNo
aWxkIFJlbmRlck9iamVjdHMgb2YgdGhlIGxheWVyLiBDaGVjawpAQCAtNTU0MiwzNSArMzkyMiw2
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRp
b24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVy
RnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBi
b3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJl
cigpKS5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKLQotICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50
UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAg
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAg
ICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1p
blhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAg
ICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zm
c2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwg
cmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRG
cm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50
Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVy
UmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGlu
dCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
Y29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAg
ICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChz
bmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAg
ICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRp
b24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91
bmRlZFBvaW50KCkpKSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBv
aW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRp
b24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJh
bnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKQEAgLTYwMTEs
MzYgKzQzNjIsNiBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wm
IGNsaXBFeGNlZWRzQm91bmRzKSBjb25zdAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJl
Y3QmIGJvdW5kcykKLXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNs
b3NpbmdJbnRSZWN0KGJvdW5kcykpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhckJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcygpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMg
PSBJbnRSZWN0KCk7Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+Y2xl
YXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVw
YWludEJsb2NrU2VsZWN0aW9uR2FwcygpCi17Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAg
ICAgICBjaGlsZC0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCi0gICAgaWYgKG1fYmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5t
b3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICByZWN0LmludGVy
c2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5
b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZv
ci4KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0
KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwg
bnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAo
IXJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVj
dCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExh
eW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25z
dCBSZW5kZXJMYXllciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9v
dCwgY29uc3QgT3B0aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAog
ewogICAgIC8vIEFsd2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgpAQCAtNjMz
NywyMSArNDY1OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29u
c3QKICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9
CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVu
ZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVy
biBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51
bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENv
cm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJG
b3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50
c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNv
bnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNr
aW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTYzODIsMTEgKzQ2ODgsNiBAQCBib29sIFJl
bmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBw
YWludEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5
ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJl
dHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQot
CiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRp
bmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MTAs
OCArNDgxMSwxMiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVy
KCkgY29uc3QKICAgICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlz
LT5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBib29sIGhhc092ZXJsYXlTY3JvbGxiYXJzID0gc2Ny
b2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKTsK
KyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgPSBzY3JvbGxhYmxlTGF5ZXIgJiYg
c2Nyb2xsYWJsZUxheWVyLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisKKyAgICByZXR1
cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMKKyAgICAgICAgfHwgY2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZwogICAgICAgICB8fCByZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAgICB8fCByZW5k
ZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVvKCkKQEAgLTY2
MjgsNyArNDkzMyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9u
cygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5k
KCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCktPmhhc092ZXJmbG93Q29udHJvbHMoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6
OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0
CkBAIC02NjM4LDcgKzQ5NDMsNyBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1w
dHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIGlmICghaGFzVmlz
aWJsZUNvbnRlbnQoKSB8fCAhcmVuZGVyZXIoKS5zdHlsZSgpLm9wYWNpdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8
IGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVw
bGFjZWQoKSB8fCAoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc092
ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKQEAgLTY2NjMsMzggKzQ5NjgsNiBAQCBib29sIFJlbmRlckxheWVyOjpp
c1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAog
ICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0
LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFy
cyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92
ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRv
IGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3
ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHBy
ZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJm
bG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1
dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
OwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Nj
cm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0
aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNp
YmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhl
ciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAg
aWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xk
U3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92
ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAg
IGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRT
dHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3Zl
cmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAg
aWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFy
ZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAg
ICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzE3
LDYgKzQ5OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gRklYTUU6IFJl
bmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIg
dmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJl
IGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOwogICAgIGlmIChvbGRTdHlsZSkgewogICAgICAgICBi
b29sIHZpc2liaWxpdHlDaGFuZ2VkID0gb2xkU3R5bGUtPnZpc2liaWxpdHkoKSAhPSByZW5kZXJl
cigpLnN0eWxlKCkudmlzaWJpbGl0eSgpOwogICAgICAgICBpZiAob2xkU3R5bGUtPnVzZWRaSW5k
ZXgoKSAhPSByZW5kZXJlcigpLnN0eWxlKCkudXNlZFpJbmRleCgpIHx8IHZpc2liaWxpdHlDaGFu
Z2VkKSB7CkBAIC02NzI2LDE4ICs1MDAwLDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBWaXNpYmlsaXR5IGlzIGlucHV0IHRvIGNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKS4KLSAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKQotICAgICAg
ICAgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICAgICAg
aWYgKHZpc2liaWxpdHlDaGFuZ2VkICYmIHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsK
ICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIo
KS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAg
ICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBt
X21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVl
KQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIp
IHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRl
ZCgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxl
Q2hhbmdlKG9sZFN0eWxlKTsKKyAgICB9CiAKLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShvbGRTdHlsZSk7CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIGNhbiBtYWtlIHRo
aXMgbGF5ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8gdG8gcmVjb21wdXRlIHRo
ZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgogICAgIHVwZGF0ZVNlbGZQ
YWludGluZ0xheWVyKCk7CkBAIC02NzUwLDE1ICs1MDIxLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fcmVmbGVjdGlvbi0+c2V0U3R5bGUo
Y3JlYXRlUmVmbGVjdGlvblN0eWxlKCkpOwogICAgIH0KLSAgICAKLSAgICAvLyBGSVhNRTogTmVl
ZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQg
dmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5n
ZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwot
ICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0
eWxlKCk7CisKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKSB7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVJlc2l6ZXJTdHlsZSgpOworICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRG
bGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjc3OSw5OCArNTA0Nyw2IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBGcmFtZVZpZXcm
IGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgYm9vbCBp
c1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLSAg
ICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93
bmVyRWxlbWVudCgpKQotICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRl
cmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLQotICAg
IGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0Owot
ICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEo
dGhpcykpOwotICAgIAotICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAgaWYgKCFtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBm
cmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVW
aWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSA9IGZhbHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQotICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYm
ICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBv
dmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAgLy8gYWNjZWxl
cmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KLSAgICAg
ICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAg
ICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQp
OwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Ny
b2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVs
bHB0cjsKLQotICAgIGlmICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Ci0g
ICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAgICAgICAgLy8g
RklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAg
ICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fc2Ny
b2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpjbGVhclNjcm9sbENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0g
ICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVSZXNpemVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0g
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNpemVyID0gcmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBz
ZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgp
KSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xlYXJSZXNpemVy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXplcikgewotICAg
ICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5k
ZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAgLy8gRklYTUU6
IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9y
ZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6ZXItPmluaXRp
YWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdU
Rk1vdmUoKnJlc2l6ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXNpemVyKCkK
LXsKLSAgICBpZiAoIW1fcmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzaXplci0+
c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19Ci0KIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9yZWZsZWN0aW9uID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0cjsKQEAgLTcw
MDIsNyArNTE3OCw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1l
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIu
cGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5n
RnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3Bl
Y3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdApAQCAtNzI0OCwxMSArNTQyNCwxMyBAQCBzdGF0aWMg
dm9pZCBvdXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZShUZXh0U3RyZWFtJiBzdHJlYW0sIGNv
bnN0IFdlYkNvcmU6OlJlbgogCiAgICAgc3RyZWFtIDw8ICIgIjsKIAotICAgIHN0cmVhbSA8PCBs
YXllci5ib3hTY3JvbGxpbmdTY29wZSgpOwotICAgIHN0cmVhbSA8PCAiICI7Ci0gICAgc3RyZWFt
IDw8IGxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgc3RyZWFtIDw8
IHNjcm9sbGFibGVMYXllci0+Ym94U2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgc3RyZWFtIDw8
ICIgIjsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9sbGFibGVMYXllci0+Y29udGVudHNTY3JvbGxp
bmdTY29wZSgpOwogCi0gICAgc3RyZWFtIDw8ICIgIjsKKyAgICAgICAgc3RyZWFtIDw8ICIgIjsK
KyAgICB9CiAKICAgICBvdXRwdXRJZGVudChzdHJlYW0sIGRlcHRoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBkODM3M2FhZTgxOWQ0ZWI5OWQ2YjI3ZGNjZTVl
ZWUwOTRmZWU5YmY0Li4wNDQxZGRhYjcyZDJhZWViODZjMjU0NGZlMDI1YzIwODU2NDk3ZWE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtNTEsNyArNTEsNiBAQAog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0ci5oIgogI2luY2x1ZGUg
IlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
IDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KQEAgLTE0MCwyMCArMTM5LDI5IEBAIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0
aW9ucyB7CiAgICAgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IgeyBTY3JvbGxCZWhhdmlvcjo6QXV0
byB9OwogfTsKIAotdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKLQogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVy
TGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIg
OiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTsKKworICAgIGVudW0gY2xhc3MgTGF5ZXJUeXBlIHsKKyAgICAgICAg
U3RhdGljLAorICAgICAgICBTY3JvbGxhYmxlCisgICAgfTsKIAogICAgIGV4cGxpY2l0IFJlbmRl
ckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXll
cigpOwogCisgICAgTGF5ZXJUeXBlIGxheWVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJU
eXBlOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNjcm9s
bGFibGVMYXllcigpOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIC8vIENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhh
cyBiZWVuIG51bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2
ICsyMzEsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQo
Ym9vbCBmbGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlm
CiAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jiwg
TGF5ZXJUeXBlKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4g
cGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7
CkBAIC00MTEsOCArNDIyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVy
TWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAg
ICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWlu
dGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAt
NDMzLDExMyArNDQyLDE0IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0
IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6
ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkg
Y29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNv
bnN0IGZpbmFsOwotCi0gICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgaW50IHNjcm9s
bEhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50
UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4g
c2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25z
dCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRy
KTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLQotICAgIHZv
aWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6
Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFu
aW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3Jv
bGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQotICAgIC8v
IFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNl
dChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCku
eSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0
aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBw
bHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCi0gICAgLy8gUmV0dXJucyB0
aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgotICAgIC8vIEZJ
WE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMg
cHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCi0gICAgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9z
c0ZyYW1lQm91bmRhcmllcykgY29uc3Q7Ci0KLSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXpl
Q2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNv
bHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9v
bCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9o
QmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29s
KTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lk
IGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigp
OyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRp
Y2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5
U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0g
ICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0g
ICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7
Ci0KLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBi
b29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBi
b29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQot
ICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lk
IHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVj
b25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2
b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5h
bDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBS
ZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQg
ZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVy
Zmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKICAgICAv
LyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93
IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCiAgICAgYm9vbCBoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93OyB9CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAg
IGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwotICAgIGJvb2wgaXNQb2ludEluUmVz
aXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2lu
dCk7Ci0gICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KSBjb25zdDsKLQotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwg
Ym9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Ny
b2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAg
IHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7
CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBib29sIGNhblJl
c2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYs
IGNvbnN0IExheW91dFNpemUmKTsKLSAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5SZXNpemVNb2RlOyB9Ci0gICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7
IG1faW5SZXNpemVNb2RlID0gYjsgfQotCiAgICAgYm9vbCBpc1JlbmRlclZpZXdMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNSZW5kZXJWaWV3TGF5ZXI7IH0KICAgICBib29sIGlzRm9yY2VkU3Rh
Y2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JjZWRTdGFja2luZ0NvbnRleHQ7IH0K
ICAgICBib29sIGlzT3Bwb3J0dW5pc3RpY1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0OyB9CkBAIC01NTUsOSArNDY1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91
dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5
ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVk
ZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC01
NzksMTAgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ2xpcFJlY3RzSW5jbHVkaW5n
RGVzY2VuZGFudHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFsbENsaXBSZWN0VHlwZXMp
OwogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHMoQ2xpcFJlY3RzVHlwZSB0eXBlVG9DbGVhciA9IEFs
bENsaXBSZWN0VHlwZXMpOwogCi0gICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMo
Y29uc3QgTGF5b3V0UmVjdCYpOwotICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3Vu
ZHMoKTsKLSAgICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgQVNTRVJUKCFtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkpIGhlcmUs
IGJ1dCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDQ0CiAg
ICAgLy8gZGl0dG8gZm9yIGhhc1Zpc2libGVEZXNjZW5kYW50KCksIHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNzcKICAgICBib29sIGhhc1Zpc2libGVDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaXNpYmxlQ29udGVudDsgfQpAQCAtNjM3LDYgKzU0
MCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3Np
dGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0
OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAK
ICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRo
aXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQ
YWludGluZygpIGNvbnN0OwpAQCAtNjk4LDcgKzYwMyw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5
ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwog
ICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsK
ICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0
cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0Nv
bnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xp
cFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNw
ZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0Ns
aXApCkBAIC03ODQsMTEgKzY4OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGlu
ZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9
IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQg
cG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQot
ICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
ID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wg
aGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsg
fQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmln
aW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Nyw5IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNs
ZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFw
aGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7
Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsK
LQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcjsgfQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9
CiAKLSAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xs
ZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9s
bGluZy4KLSAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xs
aW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGU7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiAoaXNUcmFuc3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRl
c0JsZW5kaW5nKCkgJiYgIXJlbmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkg
JiYgKChwYWludEJlaGF2aW9yICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5
ZXJzKSB8fCAhaXNDb21wb3NpdGVkKCkpOwpAQCAtODg1LDExICs3NzMsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJv
b2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVy
SW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOCw4ICs4MDEsNiBAQCBwdWJsaWM6CiAK
ICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0
OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkg
eyBTaW5nbGVQYWludEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIg
fTsgfQogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWlu
dEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgx
MSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVh
c29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUg
fTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlv
blJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwor
ICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEw
MTAsOSArODkxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxh
eW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBD
aGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVl
ZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5
MDgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJH
ZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAg
IGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092
ZXJmbG93U2Nyb2xsICAgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhh
c1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAg
SGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAg
ICBIYXNDaGFuZ2VkQW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAg
fTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0
cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0g
eyB9KTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1
c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3
ICs5NDAsNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVu
Y3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNX
aXRoUGhhc2UoUGFpbnRQaGFzZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwg
UmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91
dGxpbmVGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVu
ZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJm
bG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVj
dCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5n
TWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5k
ZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNm
b3JtZWRMYXllckludG9GcmFnbWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjQgKzk2Niwx
NCBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRz
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29s
IGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYs
IEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhp
dFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBS
ZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXll
ciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29s
IGxpc3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5z
aW9ucygpOwotICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250
cm9scygpIGNvbnN0OwogCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29u
c3Q7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVy
TGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNp
YmxlKCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJl
Y3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAg
ICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJ
bnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwot
ICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hh
bmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwot
ICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmlu
YWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxB
bmltYXRvcigpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVz
c2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOwotICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCk7Ci0jZW5kaWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5
IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAg
IHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zm
c2V0KGNvbnN0IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJy
ZW50U2Nyb2xsKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVE
ZXNjZW5kYW50U3RhdHVzKCk7CkBAIC0xMTk2LDE0ICsxMDEzLDYgQEAgcHJpdmF0ZToKICAgICAv
LyBDb252ZXJ0IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0
YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRv
Q29udGVudHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBk
YXRlUmVzaXplclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQg
ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJl
Y3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwog
CiAgICAgdm9pZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0Nv
bXBvc2l0aW5nRGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTcsMjAgKzEwMjYsNyBAQCBwcml2YXRl
OgogICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7CiAgICAgTGF5b3V0VW5pdCBv
dmVyZmxvd1JpZ2h0KCkgY29uc3Q7CiAKLSAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMg
ewotICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3Qg
dmVydGljYWxTY3JvbGxiYXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyOwotICAgICAg
ICBJbnRSZWN0IHJlc2l6ZXI7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyT3JSZXNpemVy
UmVjdCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsQ29ybmVy
LmlzRW1wdHkoKSA/IHNjcm9sbENvcm5lciA6IHJlc2l6ZXI7Ci0gICAgICAgIH0KLSAgICB9Owot
ICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Owot
Ci0gICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0OwotCisgICAgTGF5ZXJUeXBlIG1fbGF5ZXJUeXBlOwogICAgIE9wdGlv
blNldDxDb21wb3NpdGluZz4gbV9jb21wb3NpdGluZ0RpcnR5Qml0czsKIAogICAgIGNvbnN0IGJv
b2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7CkBAIC0xMjQ0LDEwICsxMDQwLDYgQEAgcHJpdmF0
ZToKICAgICBib29sIG1fbm9ybWFsRmxvd0xpc3REaXJ0eTogMTsKICAgICBib29sIG1faGFkTmVn
YXRpdmVaT3JkZXJMaXN0IDogMTsKIAotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhl
IGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemlu
ZyB0byBzdGFydCBhbmQgc3RvcC4KLSAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKLQotICAg
IGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1NlbGZQYWlu
dGluZ0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5k
YW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcu
IFRoaXMgY2FuIGxlYWQgdG8KQEAgLTEyNTksMTQgKzEwNTEsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMg
bGF5ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJ
bnNpZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBw
YWludGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQg
OiAxOwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMK
IAogICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1f
aGFzVmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1
c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwotICAgIGJv
b2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0ZpeGVkSW50
ZXJzZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6IDE7CiAK
QEAgLTEyODcsMTcgKzEwNzcsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1
bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8g
Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBi
b29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAg
Ym9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9v
bCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBt
X2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzgsMjUgKzExMTcs
OCBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRoL2hlaWdodAogICAgIEludFNp
emUgbV9sYXllclNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOwot
ICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsK
LQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCi0gICAgSW50
U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdl
IGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFy
OwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
bGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKICAgICAKLSAgICBJbnRQb2ludCBtX2Nh
Y2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29w
ZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xs
aW5nU2NvcGU7Ci0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVU
cmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8
bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZhbHVlcyBmb3IgYWJz
b2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3RvcCB2YWx1ZXMuCiAg
ICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwogICAgIExheW91dFVuaXQgbV9z
dGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2NiwxMCArMTEyOCw2IEBAIHByaXZhdGU6CiAgICAg
Ly8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSByZXBsaWNhcyAod2l0aCB0aGVp
ciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5kZXJSZXBsaWNhPiBtX3JlZmxl
Y3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3Ju
ZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Ny
b2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7
Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVz
ZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgog
ICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4
IDUxOWQzNjEwNzgwOGUzNjJmN2MwNDBmNDI3OGM4ODNhMmYzOTA2MWUuLmNkZjlhOWE2ZGQ0YjU1
MGFjYzIxZDUyNmE0MDJhODg1MWNlYTViMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MywxMyArNTMsMTQgQEAKICNpbmNsdWRl
ICJQZXJmb3JtYW5jZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5o
IgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTI2OSw3ICsyNzAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6d2ls
bEJlRGVzdHJveWVkKCkKICNlbmRpZgogCiAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuYmFja2lu
ZygpID09IHRoaXMpOwotICAgIGNvbXBvc2l0b3IoKS5yZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0
ZWRMYXllcnMobV9vd25pbmdMYXllcik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIGNvbXBvc2l0b3IoKS5y
ZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoKnNjcm9sbGFibGVMYXllcik7CiAKICAg
ICBjbGVhckJhY2tpbmdTaGFyaW5nTGF5ZXJzKCk7CiB9CkBAIC00MjEsMTEgKzQyMywxMSBAQCBz
dGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNr
aW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2Ug
dGlsZUNvdmVyYWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAg
IGJvb2wgdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVS
ZXNpemUoKTsKLSAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAg
ICAgICAgaWYgKGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICBp
ZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgJiYgbGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCkpIHsKKyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCiAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGls
ZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAgICAgaWYg
KGxheWVyLmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKICAg
ICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGlj
YWxTY3JvbGxpbmc7CiAgICAgfQogICAgIHJldHVybiB0aWxlQ292ZXJhZ2U7CkBAIC0xMjMyLDgg
KzEyMzQsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRH
cmFwaGljc0xheWVyUmVjdChjb25zdCBSZW5kZXJMYXllcioKICAgICBpZiAoY29tcG9zaXRlZEFu
Y2VzdG9yLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgTGF5
b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJhY2tpbmctPmNvbXBv
c2l0ZWRCb3VuZHMoKTsKICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxDb250YWluZXJCb3ggPSBz
Y3JvbGxDb250YWluZXJMYXllckJveChhbmNlc3RvclJlbmRlckJveCk7Ci0gICAgICAgIFNjcm9s
bE9mZnNldCBzY3JvbGxPZmZzZXQgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9mZnNldCgp
OwotICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENv
bnRhaW5lckJveC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJv
dW5kcy5sb2NhdGlvbigpKSAtIHRvTGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpKSwgc2Nyb2xsQ29u
dGFpbmVyQm94LnNpemUoKSk7CisgICAgICAgIExheW91dFNpemUgc2Nyb2xsT2Zmc2V0OworICAg
ICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
ICAgIHNjcm9sbE9mZnNldCA9IHRvTGF5b3V0U2l6ZShjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9s
bGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAgICAgIHBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xh
eW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gc2Nyb2xsT2Zm
c2V0KSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHBh
cmVudEdyYXBoaWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsxMjg5LDggQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVk
QW5jZXN0b3IpCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBw
ZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgICAgICBpZiAoZW50cnkuY2xp
cERhdGEuaXNPdmVyZmxvd1Njcm9sbCkgewotICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQo
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxP
ZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5z
ZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBsYXN0Q2xpcExh
eWVyUmVjdC5tb3ZlQnkoLXNjcm9sbE9mZnNldCk7CkBAIC0xMzkwLDcgKzEzOTUsOSBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNv
bXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0UG9z
aXRpb24oRmxvYXRQb2ludChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHBhcmVudExh
eWVyQm91bmRzLmxvY2F0aW9uKCkpKTsKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+
c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShMYXlvdXRTaXplKHNjcm9sbENvbnRhaW5lckJveC53aWR0
aCgpLCBzY3JvbGxDb250YWluZXJCb3guaGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldCA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAg
dXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9s
ZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJv
bVJlbmRlcmVyKCk7CkBAIC0xNDA0LDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikK
IAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5
ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7
CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgo
KSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAgICAgIEludFNpemUgc2Nyb2xs
U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsSGVpZ2h0KCkpOwogICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBtX3Njcm9sbGVkQ29udGVu
dHNMYXllci0+c2l6ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkKQogICAgICAgICAgICAg
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCkBAIC0xNDg5LDE0
ICsxNDk2LDE4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRMb2NhdGlvbk9mU2Nyb2xs
ZWRDb250ZW50cyhTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0CiAKIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKIHsK
LSAgICBpZiAobV9vd25pbmdMYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6
OlVzZXIpIHsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9s
bFR5cGU6OlVzZXIpIHsKICAgICAgICAgLy8gSWYgc2Nyb2xsaW5nIGlzIGhhcHBlbmluZyBleHRl
cm5hbGx5LCB3ZSBkb24ndCB3YW50IHRvIHRvdWNoIHRoZSBsYXllciBib3VuZHMgb3JpZ2luIGhl
cmUgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2Ugaml0dGVyLgogICAgICAgICBzZXRMb2NhdGlvbk9m
U2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b246OlN5bmMpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbih0cnVlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0
aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9u
IHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Ny
b2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBt
X293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxz
ZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwxMiArMTkyMiwxNiBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNM
YXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSk7Cisg
ICAgaWYgKCFtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKIH0KIAogYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci52
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZv
clNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29y
bmVyTGF5ZXIoKSBjb25zdApAQCAtMTkyNCwxMiArMTkzOSwxNiBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CiAgICAgaWYgKCFpczxS
ZW5kZXJCb3g+KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVj
dCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
T3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5
ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Ny
b2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3Jv
bGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxi
YXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7
CiB9CiAKQEAgLTE5NjUsMTAgKzE5ODQsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAg
ICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxD
b3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAK
ICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVy
LnNjcm9sbGFibGVMYXllcigpKTsKKwogICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxl
QXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIEhvcml6b250YWxTY3Jv
bGxiYXIpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVh
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCks
IEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXll
ckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSwgVmVy
dGljYWxTY3JvbGxiYXIpOwogICAgIH0KIAogICAgIHJldHVybiBsYXllcnNDaGFuZ2VkOwpAQCAt
MTk3Niw3ICsxOTk3LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93
Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYg
KCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyIHx8ICFzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBA
IC0xOTk4LDE2ICsyMDIwLDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92
ZXJmbG93Q29udHJvbHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUg
cmVsYXRpdmUgdG8gdGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5n
TGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFi
bGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKICAgICBpZiAoYXV0byogbGF5ZXIg
PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9s
bGJhckxheWVyKCpsYXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveElu
c2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6
b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAg
ICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBv
c2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFk
ZGluZ0JveEluc2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAg
ICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0yMTY1LDcg
KzIxODcsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJz
KGJvb2wgbmVlZHNTY3JvbGxpbmdMYXllcnMpCiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xh
eWVyLT5zZXRBbmNob3JQb2ludCh7IH0pOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVy
LT5hZGRDaGlsZCgqbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGNvbXBvc2l0b3IoKS53aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhtX293
bmluZ0xheWVyLCAqdGhpcyk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVMYXllcigpKTsKKyAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLCAqdGhpcyk7CiAK
ICAgICAgICAgd2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbENvbnRhaW5lckxheWVyLmdldCgpKTsK
ICAgICAgICAgd2lsbERlc3Ryb3lMYXllcihtX3Njcm9sbGVkQ29udGVudHNMYXllci5nZXQoKSk7
CkBAIC0yMTc0LDkgKzIxOTcsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNj
cm9sbGluZ0xheWVycyhib29sIG5lZWRzU2Nyb2xsaW5nTGF5ZXJzKQogICAgICAgICBHcmFwaGlj
c0xheWVyOjp1bnBhcmVudEFuZENsZWFyKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyKTsKICAgICB9
CiAKLSAgICBpZiAobV9zY3JvbGxDb250YWluZXJMYXllcikKLSAgICAgICAgY29tcG9zaXRvcigp
LmRpZEFkZFNjcm9sbGluZ0xheWVyKG1fb3duaW5nTGF5ZXIpOwotICAgIAorICAgIGlmIChtX3Nj
cm9sbENvbnRhaW5lckxheWVyKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpKTsKKyAgICAgICAgY29tcG9zaXRvcigpLmRpZEFkZFNjcm9sbGluZ0xheWVy
KCptX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICB9CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMjk4NSw4ICszMDEwLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgK
ICAgICB9CiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVMYXllcigpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0
ID0gcGl4ZWxTbmFwcGVkUmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5t
b3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xh
eW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0
RnJvbVJlbmRlcmVyKTsKKyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZz
ZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBA
IC0zMDMyLDggKzMwNTgsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xh
eWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICAgICAgaWYg
KCZsYXllciA9PSAmbV9vd25pbmdMYXllcikgewogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXll
ckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKLSAgICAgICAg
ICAgIGlmIChsYXllci5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRS
ZWdpb25Db250ZXh0KQotICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhj
b250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXll
ckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworICAgICAgICAgICAgaWYgKGxheWVy
LnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFi
bGVMYXllcigpLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdp
b25Db250ZXh0KQorICAgICAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMo
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5
ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICBsYXllci5wYWludExheWVyV2l0aEVmZmVjdHMoY29udGV4
dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIApAQCAtMzMyMywxNyArMzM1MSwyMiBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyLCBHcmFwaAogICAgICAgICAgICAgcGFpbnREZWJ1Z092ZXJsYXlzKGdy
YXBoaWNzTGF5ZXIsIGNvbnRleHQpOwogCiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3Qp
OworICAgICAgICBBU1NFUlQobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAg
ICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6
b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBh
aW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwg
ZGlydHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCkpOworICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxz
ZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAg
IGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpOworICAgICAgICBBU1NFUlQoc2Ny
b2xsYWJsZUxheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5
ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwog
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKICAgICAg
ICAgTGF5b3V0UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlvdXRSZWN0KGNsaXApOwogICAgICAg
ICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KGNvcm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAg
IG1fb3duaW5nTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25h
cHBlZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFp
bnRSZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwg
c25hcHBlZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+cGFpbnRSZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAg
ICAgfQogI2lmbmRlZiBOREVCVUcKICAgICByZW5kZXJlcigpLnBhZ2UoKS5zZXRJc1BhaW50aW5n
KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKaW5kZXggYTJiNThlNjY2OTA2ODVmY2U2YjFhODgzNDljN2ZmM2NlNjg1MjI2
YS4uZTU2ZmMyZDc2NWRkYTg5Mjk0NTNlNzNlYTk4MmExY2VjMDkyNmRhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTMx
NTMsNyArMzE1Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBv
c2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAKIGJvb2wgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBvc2l0aW5nRGF0YSYgcXVlcnlEYXRh
KSBjb25zdAogewotICAgIGlmICghbGF5ZXIuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQor
ICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkgfHwgIWxheWVyLnNjcm9sbGFibGVMYXll
cigpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5v
KSB7CkBAIC0zMjkzLDcgKzMyOTMsOSBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXNl
Q29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciYgbAogCiBzdGF0
aWMgYm9vbCBpc1Njcm9sbGVkQnlPdmVyZmxvd1Njcm9sbExheWVyKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXImIG92ZXJmbG93U2Nyb2xsTGF5ZXIpCiB7Ci0gICAg
cmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGxheWVyLnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICBBU1NFUlQob3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7
CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5ib3hTY3JvbGxpbmdTY29wZSgp
ID09IG92ZXJmbG93U2Nyb2xsTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUoKTsKIH0KIAogc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXll
ciYgaW50ZXJtZWRpYXRlTGF5ZXIsIGJvb2wmIHNhd0ludGVybWVkaWF0ZUxheWVyKQpAQCAtNDIz
OCw3ICs0MjQwLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZCgpCiAgICAgICAgIHJvb3RMYXllci0+bm90ZURldmljZU9yUGFnZVNj
YWxlRmFjdG9yQ2hhbmdlZEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpyZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVy
TGF5ZXImIGxheWVyKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3Jv
bGxDb29yZGluYXRlZExheWVycyhSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgaWYgKG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29y
ZGluYXRvcikKQEAgLTQ1NjcsOCArNDU2OSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAog
TGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJs
ZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0
b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBi
ZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYg
KCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNp
emUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkp
CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUoc2Nyb2xsYWJs
ZUxheWVyLT52aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7Cisg
ICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBpZiAoaXM8UmVuZGVy
Qm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEgKzQ1OTMsMTQgQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMoU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91bmRMYXllcigpLCBj
bGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIGZyYW1lVmlldy5s
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKTsKKwogICAgICAgICBhdXRvJiBiYWNraW5nID0g
KmxheWVyLmJhY2tpbmcoKTsKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3Iuc2V0Tm9kZUxh
eWVycyhub2RlSUQsIHsgYmFja2luZy5ncmFwaGljc0xheWVyKCksCiAgICAgICAgICAgICBiYWNr
aW5nLnNjcm9sbENvbnRhaW5lckxheWVyKCksIGJhY2tpbmcuc2Nyb2xsZWRDb250ZW50c0xheWVy
KCksCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICAgICAg
bGF5ZXIubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGxheWVyLmxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSB9KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFi
bGVMYXllci0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyLAorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgOiBudWxscHRyIH0pOwogICAgIH0KIH0KIApAQCAtNDYzMCw4ICs0NjM4LDEw
IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGlu
Z05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xs
aW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05v
ZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAg
ICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRy
eSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwg
bGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6
TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBB
U1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJ
RCwgKmxheWVyLnNjcm9sbGFibGVMYXllcigpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJl
dHVybiBuZXdOb2RlSUQ7CkBAIC00NzY3LDIwICs0Nzc3LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTeW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAg
IGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpIHsKICAgICAgICAgaWYg
KCZsYXllci5yZW5kZXJlcigpID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXll
ci5ib3hTY3JvbGxpbmdTY29wZSgpOwogICAgICAgICByZXR1cm4gbGF5ZXIuY29udGVudHNTY3Jv
bGxpbmdTY29wZSgpOwogICAgIH07CiAKLSAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1f
cmVuZGVyVmlldy5sYXllcigpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJU
KG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgYXV0byByb290U2Nyb2xsaW5n
U2NvcGUgPSBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKTsKIAogICAgIGZvciAoYXV0byYgcmVuZGVyZXIgOiAqc2xvd1JlcGFpbnRPYmplY3Rz
KSB7CiAgICAgICAgIGF1dG8gbGF5ZXIgPSByZW5kZXJlci5lbmNsb3NpbmdMYXllcigpOwotICAg
ICAgICBpZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIHNjcm9sbGlu
Z1Njb3BlID0gcmVsZXZhbnRTY3JvbGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyKTsKKyAgICAg
ICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJlbGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIs
ICpsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBpZiAoc2Nyb2xsaW5nU2NvcGUg
IT0gcm9vdFNjcm9sbGluZ1Njb3BlKSB7CiAgICAgICAgICAgICBhdXRvIGVuY2xvc2luZ1Njcm9s
bGluZ05vZGVJRCA9IGFzeW5jU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGVJRChyZW5kZXJlcik7CiAg
ICAgICAgICAgICBBU1NFUlQoZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEKTsKQEAgLTQ4MDQsMTAg
KzQ4MTUsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW4KICAgICBpZiAobm9kZUlEID09IG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxpbmdOb2RlSUQoKSkKICAgICAgICAgcmV0dXJu
ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKLSAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
VG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
VG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKS0+c2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFj
a2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykKK3Zv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFj
a2luZyhSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJh
Y2tpbmcpCiB7CiAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTQ4MjMsNyArNDgzNCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxs
UmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5CiB9CiAKIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgY2FsbGVkIGZyb20gdGhlIHVwZGF0ZUJhY2tp
bmdBbmRIaWVyYXJjaHkuCi12b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xs
aW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmRpZEFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5Mzgs
NyArNDk0OSw3IEBAIHZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6
dW5yZWdpc3RlckFsbFZpZXdwb3J0Q29uc3RyYWluZWRMYXllCiAgICAgbV9jaHJvbWVDbGllbnQu
dXBkYXRlVmlld3BvcnRDb25zdHJhaW5lZExheWVycyhsYXllck1hcCwgeyB9KTsKIH0KIAotdm9p
ZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYg
bGF5ZXIpCiB7CiAgICAgYXV0byogYmFja2luZyA9IGxheWVyLmJhY2tpbmcoKTsKICAgICBBU1NF
UlQoYmFja2luZyk7CkBAIC00OTY1LDEyICs0OTc2LDEyIEBAIHZvaWQgTGVnYWN5V2ViS2l0U2Ny
b2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dW5yZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpCiAg
ICAgfQogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OmFk
ZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5V2ViS2l0U2Ny
b2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikKIHsKICAgICBtX3Njcm9sbGluZ0xheWVycy5hZGQoJmxheWVyKTsKIH0K
IAotdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2lu
ZykKK3ZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6cmVtb3ZlU2Ny
b2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNr
aW5nJiBiYWNraW5nKQogewogICAgIGlmIChtX3Njcm9sbGluZ0xheWVycy5yZW1vdmUoJmxheWVy
KSkgewogICAgICAgICBhdXRvKiBzY3JvbGxDb250YWluZXJMYXllciA9IGJhY2tpbmcuc2Nyb2xs
Q29udGFpbmVyTGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpOwpAQCAtNDk3OSw3ICs0OTkwLDcgQEAg
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYgbGEKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Ny
b2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6cmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQor
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihS
ZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIHJlbW92ZVNjcm9sbGluZ0xheWVy
KGxheWVyLCAqbGF5ZXIuYmFja2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IDdhODViMjY5NmM2OGFhNDBkNDI4MWYz
YmMyMmM2YmNkNmI4ODAwNWEuLjU5NjllYTllZjU2MDRmNDc3YTMwY2JiYjU1YjljYjczY2YwYTIx
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllckFuY2Vz
dG9yQ2xpcHBpbmdTdGFjay5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKQEAgLTEyMSwyMCArMTIxLDIwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVy
QWxsU2Nyb2xsaW5nTGF5ZXJzKCk7CiAgICAgCi0gICAgdm9pZCBhZGRTY3JvbGxpbmdMYXllcihS
ZW5kZXJMYXllciYpOwotICAgIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXIm
LCBSZW5kZXJMYXllckJhY2tpbmcmKTsKKyAgICB2b2lkIGFkZFNjcm9sbGluZ0xheWVyKFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYpOworICAgIHZvaWQgcmVtb3ZlU2Nyb2xsaW5nTGF5ZXIoUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7CiAKICAgICB2b2lkIGFkZFZp
ZXdwb3J0Q29uc3RyYWluZWRMYXllcihSZW5kZXJMYXllciYpOwogICAgIHZvaWQgcmVtb3ZlVmll
d3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7CiAKLSAgICB2b2lkIHJlbW92ZUxh
eWVyKFJlbmRlckxheWVyJik7CisgICAgdm9pZCByZW1vdmVMYXllcihSZW5kZXJMYXllclNjcm9s
bGFibGUmKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRl
ckxheWVyJik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9s
bGFibGUmKTsKIAogICAgIENocm9tZUNsaWVudCYgbV9jaHJvbWVDbGllbnQ7CiAKLSAgICBIYXNo
U2V0PFJlbmRlckxheWVyKj4gbV9zY3JvbGxpbmdMYXllcnM7CisgICAgSGFzaFNldDxSZW5kZXJM
YXllclNjcm9sbGFibGUqPiBtX3Njcm9sbGluZ0xheWVyczsKICAgICBIYXNoU2V0PFJlbmRlckxh
eWVyKj4gbV92aWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzOwogCiAgICAgY29uc3QgYm9vbCBtX2Nv
b3JkaW5hdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzOwpAQCAtMzUzLDEwICszNTMsMTAgQEAg
cHVibGljOgogCiAgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5n
Tm9kZUlEKFNjcm9sbGluZ05vZGVJRCkgY29uc3Q7CiAKLSAgICB2b2lkIHJlbW92ZUZyb21TY3Jv
bGxDb29yZGluYXRlZExheWVycyhSZW5kZXJMYXllciYpOworICAgIHZvaWQgcmVtb3ZlRnJvbVNj
cm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCi0gICAgdm9p
ZCB3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYsIFJlbmRl
ckxheWVyQmFja2luZyYpOwotICAgIHZvaWQgZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5
ZXImKTsKKyAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgZGlkQWRk
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CiAKICAgICB2b2lkIHJlc2V0
VHJhY2tlZFJlcGFpbnRSZWN0cygpOwogICAgIHZvaWQgc2V0VHJhY2tzUmVwYWludHMoYm9vbCB0
cmFja3NSZXBhaW50cykgeyBtX2lzVHJhY2tpbmdSZXBhaW50cyA9IHRyYWNrc1JlcGFpbnRzOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHAKaW5kZXggMmM1OWE0ODQ2YWY4NDQ3NTVlZjczMTA0YWFmNGEwODE1MWE4Y2IxZC4uZDNl
YzQzYWRjYTMzYzI2NWM4YzBlMGYyMzBkNjA0MDBiZjYzNDE5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcApAQCAtOTUsMTEg
Kzk1LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6ZGVzdHJveUxheWVyKCkKIHZv
aWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIoKQogewogICAgIEFTU0VSVCgh
bV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXI+KCp0aGlzKTsK
KyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8gb25seSBjcmVhdGUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9sYXllciA9IG1ha2VVbmlxdWU8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0SGFzTGF5ZXIodHJ1ZSk7CiAg
ICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJMYXllcjo6TGF5ZXJDaGFuZ2VU
aW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzY3JvbGxhYmxlTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyID8gbV9sYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyOworfQorCiBib29s
IFJlbmRlckxheWVyTW9kZWxPYmplY3Q6Omhhc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9sYXllciAmJiBtX2xheWVyLT5pc1NlbGZQYWludGluZ0xheWVyKCk7CkBA
IC0yMDgsOSArMjE0LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7
CiAgICAgaWYgKG9sZFN0eWxlICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZv
clN0eWxlVXBkYXRlKCpvbGRTdHlsZSwgbmV3U3R5bGUpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJM
YXllciogcmVuZGVyTGF5ZXIgPSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+
dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3Jv
bGxTbmFwU3RhdGUoKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHRoaXMt
PnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9s
bFNuYXBTdGF0ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9keSgpIHx8IGlzRG9jdW1lbnRF
bGVtZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSB2
aWV3KCkuZnJhbWVWaWV3KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXcudXBkYXRlU25hcE9mZnNl
dHMoKTsKQEAgLTIyMyw4ICsyMjksMTAgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAg
ICAgaWYgKHNjcm9sbFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Ny
b2xsU25hcFN0cmljdG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94
LT5sYXllcigpLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNu
YXBCb3gtPmxheWVyKCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxTbmFwQm94LT5zY3JvbGxhYmxlTGF5
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBP
ZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Ny
b2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChz
Y3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5pc0RvY3VtZW50RWxlbWVu
dFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPnZpZXcoKS5m
cmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29yZGluYXRvclNjcm9sbFNuYXBQcm9wZXJ0aWVz
KCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJlYTIyYjYz
MWZmZTJkYmE3Li44NTc4NmMwODJmOWFiNGUxYTY2ZTNiZGJjN2ViZDM4ODc4MzFmZGM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgK
QEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLZXlmcmFtZUxp
c3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIAog
c3RydWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVjdCBtX3JlcGFpbnRSZWN0
OyAvLyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2JqZWN0cyAoZS5nLiwgb3Zl
cmZsb3c6aGlkZGVuKS4KQEAgLTQ3LDYgKzQ4LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2Vs
ZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKICAgICBSZW5kZXJMYXllciogbGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyLmdldCgpOyB9CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXll
clNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllcigpIGNvbnN0OworCiAgICAgdm9pZCBzdHlsZVdp
bGxDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUpIG92
ZXJyaWRlOwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
cm9tU3R5bGUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGM2NWFhMDNlMDJmYzA1OGY1NmVkZDQ3YjQ4
NzNhODg1MTRhYTYxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCkBAIC0wLDAgKzEsMjAwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQ
b3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENv
cnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9iZXJ0IE8nQ2Fs
bGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJvbkBmYXMuaGFy
dmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJAd2ViLmRlPgor
ICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xhbmQgTWFpbnog
PHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAqICAgSm9zaCBT
b3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8YnpiYXJza3lAbWl0
LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50
cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRoZXIg
dGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0CisgKiBodHRw
Oi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3Jn
L2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJv
dmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxlIGluc3RlYWQg
b2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICogdmVy
c2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3
bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhl
cnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBp
bmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3Zl
IGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9u
cyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KKyAq
IElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBt
YXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQ
TCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKK3sKKyAgICBzdGF0aWMg
U2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKKyAgICByZXR1cm4gKytjdXJyZW50U2Nv
cGU7Cit9CisKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKTsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpSZW5kZXJMYXllclNjcm9s
bGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQor
ICAgIDogUmVuZGVyTGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0LCBSZW5kZXJMYXllcjo6
TGF5ZXJUeXBlOjpTY3JvbGxhYmxlKQorICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCisgICAg
LCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJmbG93UmVsYXlv
dXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5k
aWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlm
CisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAg
ICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKK3sKKyAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIg
PSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICBpZiAoaXNSZW5kZXJWaWV3TGF5
ZXIoKSkKKyAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSByZW5kZXJlcigpLmVsZW1lbnQoKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3Jl
IG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVj
YWxjdWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8o
KSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Ny
b2xsUG9zaXRpb24pOworICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRp
b24oSW50UG9pbnQoKSk7CisgICAgfQorfQorCitSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5k
ZXJMYXllclNjcm9sbGFibGUoKQoreworICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKKyAgICAgICAg
cmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7
CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBp
ZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisjaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7CisjZW5kaWYKKworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlv
bihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNj
cm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+d2lsbERl
c3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNjcm9sbENvcm5lcigpOwor
ICAgIGNsZWFyUmVzaXplcigpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4g
SW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRIZWlnaHQoKSkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29u
dGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBz
Y3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZWFj
aGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBjb250ZW50c1Np
emUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4o
Y29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOworCisgICAgaWYg
KCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUu
c2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5o
ZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKK30KKworaW50IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChyZW5kZXJC
b3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0
ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53
aWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQoKSBj
b25zdAoreworICAgIEFTU0VSVChyZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+KHRo
aXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMu
CisgICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKK30KKworc3RhdGljIGlubGluZSBp
bnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCit7CisgICAgLy8gVGhp
cyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCisgICAgLy8gaHR0cDovL214ci5tb3pp
bGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnht
bCM4NTYuCisgICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOworCisgICAgaW50IGFkanVz
dGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKKyAgICBpZiAoYWRqdXN0
ZWREZWx0YSA+IDEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFk
anVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAt
IDE7CisgICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQorICAgICAgICBhZGp1c3RlZERl
bHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxk
b3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKworICAgIHJldHVybiBhZGp1c3RlZERlbHRh
OworfQorCitzdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJ
bnRTaXplJiBkZWx0YSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRh
KGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3Qg
SW50UG9pbnQmIHNvdXJjZVBvaW50KQoreworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9z
aXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQ
b3NpdGlvbigpOworICAgIAorICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25v
d24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlz
IG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRp
YyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNl
UG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAg
ICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAg
ZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3Vy
Y2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9Q
YW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhl
IGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWln
aHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNl
dEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0
YShkZWx0YSkpOworfQorCisvLyBGSVhNRTogdW5pZnkgd2l0aCB0aGUgc2Nyb2xsUmVjdFRvVmlz
aWJsZSgpIGNvZGUgYmVsb3cuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQnlS
ZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxl
ZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlcigp
LnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5w
YXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAgICAg
ICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7
CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlmIChz
Y3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAgICAg
ICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxh
eWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5pbmdT
Y3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
aWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQo
KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMu
CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6WWVzKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVj
dXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworCisgICAgICAg
ICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJl
bmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBhcmUg
aGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0
aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93
IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJl
IHNjcm9sbGVkLgorICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxC
eShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xs
ZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOworCisgICAgICAgIC8vIEZJ
WE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5
IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3Qg
U2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nIGNsYW1waW5nKQoreworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICpzdGF0aWNfY2FzdDxSZW5kZXJMYXll
cio+KHRoaXMpIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24p
OworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZz
ZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7Cisg
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQo
c2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNl
dCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBw
cmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3Jv
bGxUeXBlLCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1
cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zm
c2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcpCit7CisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgp
OworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgU2Nyb2xsT2Zm
c2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
ID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsKKyAgICBpZiAoY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZl
QW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsK
KyAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAg
ICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKG5ld1Njcm9sbE9m
ZnNldCk7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgs
IFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVk
U2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Ny
b2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3Jv
bGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Ny
b2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIGlmIChhbmlt
YXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhB
bmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlv
bmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKK3sKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbiA9IHBvc2l0aW9uOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6YXBw
bHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZh
bHVlKCkpKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsK
K30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKK3sKKyAgICBSZW5kZXJU
cmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNj
b3BlOworCisgICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyKSB7CisgICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRl
cmVyKCkpICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3Jv
bGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CisgICAgfTsKKworICAgIGlmIChpbmNsdWRlU2Vs
ZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxh
YmxlKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlKj4odGhpcyk7CisKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVC
b3VuZGFyaWVzKSkgeworICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExh
eWVyKSkgeworICAgICAgICAgICAgQVNTRVJUKG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCkp
OworICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVyKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hh
bmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVD
aGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJC
bG9jaz4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVu
ZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOworICAgICAgICBy
ZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9sbHNPdmVyZmxvdygpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRl
ckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9s
bGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxFbGFzdGlj
aXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Cisj
ZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25l
KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJh
ciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQg
dG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFy
KQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAg
ICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBp
ZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92QmFyID0gY3JlYXRlU2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYm
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0
eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNp
dHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xs
RWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBj
cmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFu
ZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgor
ICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYg
KG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworc3RhdGljIGlu
bGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVs
T2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVy
LmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1l
bnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290
LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAq
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7CisgICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQorICAgICAgICB3
aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3Jp
ZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7
CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIp
OworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Cisg
ICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAgICAgICAgICAg
IHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmRlc3Ryb3lTY3JvbGxiYXIoU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4m
IHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIg
OiBtX3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Ny
b2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5y
ZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKworc3RhdGlj
IGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAg
ICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK1Njcm9sbGFibGVBcmVh
KiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
K3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworCisgICAgcmV0dXJuICZyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQoreworICAgIHJldHVybiByZW5kZXJl
cigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQor
eworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4
dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKSkgeworICAgICAgICBpZiAobmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBu
ZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKK30KKwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlU25hcE9mZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlv
bmQgSFRNTEVsZW1lbnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1l
bnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3go
KTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlzLCAqZG93bmNh
c3Q8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSksICpib3gsIGJveC0+c3R5bGUoKSk7
Cit9CisjZW5kaWYKKworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxp
bmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAg
aWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNo
RXZlbnQpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBwYWdlKCkuY2hyb21lKCkuY2xp
ZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlv
biB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBk
YXRlZC4KKyAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVu
dDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgYm9vbCBpc1Zpc2libGUgPSBy
ZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7Cisg
ICAgaWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFp
c0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYm
IEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAm
JiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZs
b3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0
ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICgh
bV92QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAo
bV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwor
fQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAg
fHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNPdmVyZmxvd0NvbnRyb2xz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5l
ciB8fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2lu
dCBsb2NhbFBvaW50KSBjb25zdAoreworICAgIGlmICghY2FuUmVzaXplKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVy
LmNvbnRhaW5zKGxvY2FsUG9pbnQpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5S
ZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAg
ICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgeworICAg
ICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3Qg
dGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0Lgor
ICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSB7CisgICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBv
aW50KSkgeworICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9o
QmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAg
ICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewor
ICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVy
KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAoreworICAgIGF1dG8gcmVzaXplclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29y
bmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXpl
clJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Cisg
ICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJl
Y3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55
dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBw
YWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5
IHdpbGwgcGFpbnQKKyAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlz
IHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKKyAgICAv
LyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0
aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKKyAgICAvLyB0aGF0IG5lZWQgdG8gYmUg
cGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXll
ciB0cmVlIHRvIHJ1biwKKyAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhl
bi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCisgICAgLy8g
c2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdl
dCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0
ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRo
ZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KKyAgICAg
ICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZC
YXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgICAgIGxv
Y2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93
Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9z
aXRpbmdMYXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAgICAgIHBh
aW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7CisKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sg
aXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNl
LgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAg
ICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsK
KworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9y
bWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1l
cworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0
IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5z
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2Un
cmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVt
LgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIg
JiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGgg
d2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5
IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICAKKyAgICAv
LyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Ny
b2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNl
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQp
OworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWlu
dEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2Ug
aGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hh
dCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNS
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVy
QWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4
dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVz
aXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQu
CisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Vz
IG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZC
YXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Cisg
ICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAg
IGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAx
X2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0
KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworLy8gVGhpcyBpcyBj
YWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBT
Y3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAg
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4g
Y2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBp
ZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBzZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIp
Cit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5S
ZXNpemUoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJh
bWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCisgICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhv
d2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCisgICAg
Ly8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCisgICAgcmV0dXJuIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkg
JiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0
IG5vdy4KKyAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVy
ZXIoKS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIg
aXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPworICAgIC8vIElmIHRo
ZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0
bHkuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsK
KworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKworICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7CisgICAgYXV0byBsb2NhbFBvaW50
ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7CisK
KyAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvcik7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShy
ZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOworICAgIGVsZW1lbnQtPnNldE1p
bmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOworICAgIAorICAgIExheW91dFNpemUg
YWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBuZXdPZmZzZXQu
c2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQu
c2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOworICAgIH0KKyAgICAKKyAgICBM
YXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3Rl
ZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKKworICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihl
bGVtZW50KTsKKyAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCku
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7CisKKyAgICBSZXNpemUgcmVzaXpl
ID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7CisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6
OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVy
LT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9
IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZVdpZHRo
ID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAg
IGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
IHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewor
ICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxp
Y2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4K
KyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRv
bSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAg
ICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6
aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwor
CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xs
IHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJz
b3IgaW4gdmlldy4KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpCit7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMp
Cit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChib3VuZHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXll
ciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gY2hpbGQt
PnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jbGVhckJs
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1
cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNoaWxkKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cygpCit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7CisgICAg
cmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyh0aGlzKTsKK30KKworc3Rh
dGljIHZvaWQgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckxheWVy
KiBsYXllcikKK3sKKyAgICBmb3IgKFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25H
YXBzKGNoaWxkKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXBh
aW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKK3sKKyAgICByZWN1cnNpdmVseVJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHModGhpcyk7CisgICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHM7CisgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkp
OworICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKQorICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KKyAgICBpZiAocmVuZGVyZXIoKS5o
YXNDbGlwKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVn
aW9ucyBub3QgYWNjb3VudGVkIGZvci4KKyAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQorICAgICAg
ICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAg
ICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47
CisKKyAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50
UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFp
bnRSb290KTsKKyAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXll
ckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNr
aW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwor
fQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXll
ckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworLy8gRklYTUU6IHRoaXMgaXMgb25s
eSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzQ29t
cG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKK30KKworLy8gRklY
TUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcigqdGhpcyk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKworU3RyaW5nIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbmRlckxheWVyOjpkZWJ1
Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK3N0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQorewor
ICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7
CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIp
ICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAg
IHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFj
dHNMaWtlQXV0bzsKK30KKworc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xs
YmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykK
K3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246
Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93
WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xs
YmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsK
KyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxB
Y3RzTGlrZUF1dG87Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7Cisg
ICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGlz
dCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExp
c3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBi
b3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5z
dHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBp
biB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0
aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KKyAgICBib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5
bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAgYm9vbCBuZWVkc1ZlcnRpY2Fs
U2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVy
dGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwg
VmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRz
SG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNW
ZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNj
cm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4K
KyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVu
YWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpv
bnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAg
bV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRp
Y2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBt
X3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQo
KQoreworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7
CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7CisgICAg
Ym9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwor
CisgICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBu
ZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQorICAg
ICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBpZiAo
bV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92
ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVk
IHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAg
ICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRh
bFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigp
ICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxC
YXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAm
JiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAg
IGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xs
QmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhciho
YXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJl
cigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKKyAgICAgICAgICAg
IGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xh
eW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgICAgICBi
bG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAgICAgICBibG9jay5s
YXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dS
ZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7CisgICAgICAg
IGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0Jv
eCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNs
ZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOworICAgIH0KKworICAgIC8v
IFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBpZiAobV9o
QmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRX
aWR0aCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGll
bnRXaWR0aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOworICAgIH0KKyAgICBpZiAobV92QmFyKSB7
CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0
KCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhl
aWdodCk7CisgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCitzdGF0aWMgdm9pZCByZWN1cnNpdmVseVVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyTGF5ZXIqIGxheWVyLCBSZW5kZXJH
ZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxSZW5kZXJMYXllclNjcm9sbGFibGU6
OlVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykKK3sKKyAgICBmb3Ig
KFJlbmRlckxheWVyKiBjaGlsZCA9IGxheWVyLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBjaGlsZC0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKGNoaWxkLCBnZW9tZXRyeU1hcCwgZmxhZ3MpOworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKKyAg
ICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVwZGF0ZSBzbyB0aGF0IHRoZSBjaGVj
ayBiZWxvdyBpcyB2YWxpZC4KKyAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsK
KworICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250ZW50IGFuZCBubyB2aXNpYmxlIGRl
c2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1dGluZworICAgIC8vIG91ciByZWN0
YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3VyIHZpc2liaWxpdHkgY2hhbmdlcywg
d2UgYXJlIGV4cGVjdGVkIHRvCisgICAgLy8gcmVjb21wdXRlIGFsbCBvdXIgcG9zaXRpb25zIGFu
eXdheS4KKyAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRhbnQgJiYgIW1faGFzVmlzaWJsZUNv
bnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcG9zaXRpb25DaGFuZ2VkID0gdXBk
YXRlTGF5ZXJQb3NpdGlvbigpOworICAgIGlmIChwb3NpdGlvbkNoYW5nZWQpCisgICAgICAgIGZs
YWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55
KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9y
LCBJc092ZXJmbG93U2Nyb2xsIH0pKQorICAgICAgICBjbGVhckNsaXBSZWN0cygpOworCisgICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkK
KyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpOwor
CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIGZsYWdzLmFk
ZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsKKyAgICAKKyAgICBib29sIHNob3Vs
ZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFpbnMoSGFzU2VlblZpZXdwb3J0Q29u
c3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNBbGwoeyBJc092ZXJmbG93U2Nyb2xs
LCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0pKSAmJiBpc1NlbGZQYWludGluZ0xh
eWVyKCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAhaXNWaXN1YWxseU5vbkVtcHR5KCk7
CisgICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MgPSBnZW9tZXRyeU1hcCAmJiAoKHNo
b3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFsbHlFbXB0eSkgfHwgZmlyc3RDaGls
ZCgpKTsKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQorICAgICAgICBnZW9tZXRy
eU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CisKKyAgICBpZiAo
c2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgeworICAgICAgICAvLyBXaGVuIHNjcm9sbGluZywg
d2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2aXN1YWxseSBub24tZW1wdHkgbGF5
ZXJzLgorICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQorICAgICAgICAgICAgY2xlYXJSZXBh
aW50UmVjdHMoKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTogV2UgY291bGQgdHJhY2sgdGhlIHJl
cGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUgdHJlZS4KKyAgICAgICAgICAgIGNv
bXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCksIGdlb21l
dHJ5TWFwKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5w
bGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIFdoZW4gU2Nyb2xsVmlldydzIG1fcGFpbnRz
RW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5ZXIgYmFja2luZyBjaGFuZ2VzLCB0
aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KKyAgICAgICAgLy8gdmlzdWFsIHRvIGxh
eW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhlIGNhY2hlZCByZXBhaW50IHJlY3Rz
IGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUgcmVjb21wdXRlZCAoc2VlIHdlYmtp
dC5vcmcvYi8xODgxMjEpLgorICAgICAgICAvLyBDaGVjayB0aGF0IG91ciBjYWNoZWQgcmVjdHMg
YXJlIGNvcnJlY3QuCisgICAgICAgIEFTU0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0
UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3Qg
PT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVw
YWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX291
dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRzRm9yUmVwYWludChyZW5kZXJlcigp
LmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgIH0KKworICAgIHJlY3Vyc2l2ZWx5VXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCh0aGlzLCBnZW9tZXRyeU1hcCwgZmxhZ3MpOyAgICAK
KworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMg
YSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQorICAgIC8vIG9m
IGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYg
cHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcworICAgIC8vIHVwZGF0ZWQgYWJvdmUu
CisKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KKworICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFw
cGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50
KCkpOworCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVj
dHNGb3JBbGxNYXJrZXJzKCk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBj
b25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBv
aW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKK3sKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBj
bGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0KTsKKyAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5k
ZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkg
LSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQp
KSwKKyAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJl
Y3QoKSksIHRydWUpOworICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5n
SW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsV2lkdGgo
KSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsSGVp
Z2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFy
cyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0
TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYg
KGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94Pihy
ZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29u
c3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7
CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hS
ZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigp
IC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0
KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBy
ZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZy
YWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSBy
ZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBm
b3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFn
bWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIp
OworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRp
b24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xh
eW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBm
YWxzZTsKKworICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJmbG93Umln
aHQoKSAtIG92ZXJmbG93TGVmdCgpKSk7CisgICAgbV9zY3JvbGxTaXplLnNldEhlaWdodChyb3Vu
ZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7CisKKyAgICBpbnQgc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJv
cmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQo
b3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJ
bnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykp
OworICAgIAorICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3Zl
cmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoJnNjcm9sbGJhciA9
PSBtX3ZCYXIuZ2V0KCkpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQg
aW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICghYm94
LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQor
ICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlv
bigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250
YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0g
c2Nyb2xsUmVjdDsKKyAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRS
ZWN0KTsKKyAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworICAg
IGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAor
eworICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOworICAgIHJldHVybiAhc2Nyb2xsQ29y
bmVyUmVjdCgpLmlzRW1wdHkoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKS5zY3JvbGxDb3JuZXI7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgSW50
UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworCisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsK
K30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVu
ZGVyZXIoKSwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7
CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5tb3ZlKHNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
KCksIHBvaW50KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2lu
dCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiBwb2ludDsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zm
c2V0KSk7Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xl
KFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK0ludFJlY3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVu
dFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVu
dFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOworICAg
IGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5j
bHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVz
aW9uKCk7CisgICAgCisgICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7
CisgICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6
ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVT
aXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKK30KKworSW50U2l6
ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK3sKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVz
ZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVB
cmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hh
YmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisg
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNp
emUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0
KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNo
LnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUu
d2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAt
IChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJu
IHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50
UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFz
dEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgv
KiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAg
aWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJv
Z3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9y
KCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dy
ZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5m
b3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsK
K30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxz
T3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9s
bGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZTogIiArIG1lc3NhZ2UpOworfQorCisKKyNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkuZWxl
bWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZFRvdWNo
RXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKK3sKKyAgICBpZiAoIXJlbmRlcmVyKCkuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVs
ZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBw
b3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICgh
Ym94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBz
dHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8
PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwg
KGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKKworICAg
IFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgaWYgKCFib3gtPmlz
SFRNTE1hcnF1ZWUoKSkgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3
aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBi
bG9ja3MpLgorICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgICAg
ICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBk
by4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCisgICAgICAgICAg
ICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRX
aWR0aCgpKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOworICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZz
ZXQgPSBuZXdPZmZzZXQueCgpOworICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhP
ZmZzZXQgLSBjYXJldFdpZHRoKSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBj
YXJldFdpZHRoOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lk
dGgpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOworICAgICAgICAgICAg
fSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdp
ZHRoKQorICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKKworICAg
ICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7CisgICAgICAgICAgICBuZXdQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9z
aXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJh
bnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0
aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRp
bmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdl
c3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbigpKSB7CisgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY3JvbGxQb3NpdGlvbiA9
IG5ld1Bvc2l0aW9uOworCisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCkudmlldygp
OworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYg
bmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9s
bCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3
ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3Iu
CisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJl
ZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0
LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgorICAg
ICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKworICAgICAg
ICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CisKKyAg
ICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAvLyBB
dm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ss
IHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4g
VXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRh
dGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBz
dGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCisgICAgICAg
ICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgICAgIHNl
dE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgLy8g
U2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBk
ZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAorICAgICAgICAg
ICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFpbnQtb3Jk
ZXIgcGFyZW50LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IHBhaW50
T3JkZXJQYXJlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2Nl
bmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkg
Y2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCisgICAgICAgIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOworICAg
ICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUoKSk7Cisg
ICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOworICAgIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNvbnRhaW5l
ckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlk
YXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3RO
ZWVkc1VwZGF0ZSgpOworICAgIAorICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5k
ZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0
UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1v
dXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKKyAgICBpZiAocmVwYWlu
dENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJlcGFpbnRD
b250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7
CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29u
SW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworCisgICAgYm9vbCByZXF1aXJlc1Jl
cGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7CisgICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBzZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAg
IHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Ny
b2xsKCk7CisgICAgfQorCisgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBv
dXIgb2JqZWN0LgorICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCisgICAgICAgIHJlbmRlcmVyKCku
cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsK
KworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVu
dHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAg
ICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVs
ZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICB2aWV3LmZyYW1l
VmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5mcmFtZVZpZXcoKS52
aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVy
RGlkU2Nyb2xsKCp0aGlzKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAgIGlmIChjb21wb3NpdG9yKCku
aGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5n
IGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50
cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21w
b3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisg
ICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBi
ZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVk
IGJ5IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXRE
ZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAorewor
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICgmc2Ny
b2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1f
aEJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLmxvY2F0aW9uKCkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB7IH07Cit9CisKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNj
cm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7CisgICAgRnJhbWVWaWV3JiBmcmFt
ZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNp
YmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisgICAgaWYg
KEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVs
ZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigp
ICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAgICBib29s
IGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKKyAgICBi
b29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMp
KTsKKyAgICAKKyAgICBpZiAoaXNTY3JvbGxhYmxlKSB7CisgICAgICAgIGlmICghbV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVW
aWV3LmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5y
ZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEgPSBmYWxzZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICBpZiAoYWRkZWRPclJlbW92ZWQpIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFdlIG9ubHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZs
b3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVk
LCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAgICAgICAg
ICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAg
fQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKKyNl
bmRpZgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICghbV9oQmFy
ICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX3ZCYXItPnNl
dEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgfQorICAgIAorICAgIGlm
IChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNl
dEZyb21Sb290KTsKKyAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBt
X3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7CisKKyAgICBp
ZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNp
emVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5l
clN0eWxlKCkKK3sKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVy
Rm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxl
KHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkp
IDogbnVsbHB0cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29y
bmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVy
KSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xs
YmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKKyAgICAg
ICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEK
KyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7CisgICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
bV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFy
ZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCit7CisgICAgUmVuZGVy
RWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigp
KTsKKyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0
dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9
LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVzaXpl
cikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVy
PFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVz
aXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBv
ZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7
CisgICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXpl
cikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOwor
ICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK3sKKyAgICBSZWZQdHI8SW1hZ2U+IHJl
c2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKKyAgICBp
ZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4Iiku
bGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUhpUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3Ju
ZXIiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5l
ckltYWdlTG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1h
Z2UtPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53
aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQo
KSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShG
bG9hdFNpemUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAg
ICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0
b3JlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFyZXNpemVDb3Ju
ZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3QubWF4WE1heFlD
b3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFn
ZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xs
YWJsZTo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAg
ICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChy
ZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CisKKyAgICBhdXRv
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDog
MDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndp
ZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3Jv
bGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07CisKKyAgICBib29sIGhhdmVOb25P
dmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIu
Z2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9u
T3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZl
Tm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3Jv
bGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6
ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAg
Ly8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJl
LgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsK
KyAgICB9CisKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7CisKKyAgICBpZiAobV9o
QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3Q7CisgICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpIHsKKyAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQor
ICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVy
U2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXJSZWN0
LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgaWYgKG1f
dkJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0OworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAg
ICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgp
IC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9p
ZENvcm5lcikKKyAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWln
aHQoKSk7CisKKyAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAg
ICB9CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Cisg
ICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAg
ICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9t
TGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQo
KSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsg
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVy
U2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CisKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKQorICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXpl
KTsKKworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKQorICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVy
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0g
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgICAg
ICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9s
bGJhclRoaWNrbmVzcyB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnJl
c2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1h
cnF1ZWUoKQoreworICAgIGlmIChtX21hcnF1ZWUpIHsKKyAgICAgICAgLy8gRklYTUU6IHdvdWxk
IGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZp
ZWxkcy4KKyAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0
cnVlOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgICAg
ICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247
CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlT3JEZWxldGVN
YXJxdWVlSWZOZWVkZWQoKQoreworICAgIGlmIChyZW5kZXJlcigpLmlzSFRNTE1hcnF1ZWUoKSAm
JiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9y
OjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgeworICAgICAgICBpZiAoIW1fbWFycXVlZSkK
KyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVlZT4odGhpcyk7
CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBlbHNlIGlm
IChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVwZGF0ZVNjcm9sbGlu
Z1Njb3BlcyhMYXlvdXRQb2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICAvLyBTdWJ0cmFjdCBvdXIg
cGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVu
dDsKKyAgICBpZiAocmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRp
b25lZFBhcmVudCA9IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHls
ZSgpLnBvc2l0aW9uKCkpKSkgeworICAgICAgICBpZiAoYXV0byogcG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAg
ICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xv
c2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KKyAgICAgICAgICAgIGlmIChw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFy
ZW50U2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICAgICAgICAgIGlmIChwb3Np
dGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSAm
JiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
KSkgeworICAgICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9y
SW5GbG93UG9zaXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7
CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEFTU0VSVChwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+Y29udGVudHNT
Y3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3Np
dGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7CisgICAg
ICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGUgPSBwYXJlbnRMYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRMYXllclNjcm9sbGFibGUtPnJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAt
PSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsK
KworICAgICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3Jv
bGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRM
YXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllciA9IHBhcmVu
dExheWVyLT5wYXJlbnQoKTsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHdoaWxl
IChlbmNsb3NpbmdMYXllcikgeworICAgICAgICAgICAgICAgIGlmICgoZW5jbG9zaW5nTGF5ZXJT
Y3JvbGxhYmxlID0gZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZW5jbG9zaW5nTGF5ZXIgPSBlbmNs
b3NpbmdMYXllci0+cGFyZW50KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChl
bmNsb3NpbmdMYXllclNjcm9sbGFibGUpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZW5jbG9z
aW5nTGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAg
ICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUtPmNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
ID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCisgICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKKyAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xs
aW5nU2NvcGUpCisgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xs
aW5nU2NvcGU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxi
YXJTdHlsZSgpCit7CisgICAgLy8gRklYTUU6IE5lZWQgdG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1
c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2UgdmVyc2EpLgorICAgIGlmIChtX2hC
YXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2Yzc2YmIy
YjMyNzliYWRiMDZlZDZkNzcxODA3MDc0MDA0NmQyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKQEAgLTAsMCArMSwz
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQg
KEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3Ro
ZXIgY29udHJpYnV0b3JzOgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1
PgorICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0
aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJq
ZXN1cEB3Z2F0ZS5jb20+CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0
aWsubWVkLnVuaS1naWVzc2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29t
PgorICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBM
LyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNp
b24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAq
ICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3Ig
dGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5
IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1Q
TCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVy
c2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24g
YnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRo
IHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwg
b3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUg
dGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lv
biBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKKwor
dXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlIGZpbmFsCisgICAgOiBwdWJsaWMgUmVuZGVyTGF5ZXIKKyAgICAsIHB1YmxpYyBTY3Jv
bGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5U
SUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3Mg
UmVuZGVyTGF5ZXI7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKKworICAg
IGV4cGxpY2l0IFJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7
CisgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKCk7CisKKyAgICBSZW5kZXJNYXJx
dWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9CisKKyAgICBJ
bnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBjb250ZW50c1Np
emUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXpl
KCkgY29uc3QgZmluYWw7CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQg
c2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYpOworCisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0
IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5
KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51
bGxwdHIpOworCisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Ny
b2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5p
bWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOworCisg
ICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNj
cm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xs
ID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworCisg
ICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9Y
T2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZz
ZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNs
YW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZz
ZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIHZvaWQgc2V0UG9z
dExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7CisgICAgdm9p
ZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCisgICAg
Ly8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2Fs
bGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KKyAg
ICBSZW5kZXJMYXllclNjcm9sbGFibGUqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisKKyAgICB2b2lkIGF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsK
KworICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsg
cmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoYm9vbCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKwor
ICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7
CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKworICAg
IGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxT
Y3JvbGxiYXIoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisKKyAgICBib29sIGhvcml6b250YWxTY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIG92
ZXJyaWRlcworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5n
ZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmlu
YWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmlu
YWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwor
I2VuZGlmCisKKyAgICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9
CisgICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCBy
ZXF1aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOworI2VuZGlmCisK
KyAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGwo
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOworI2VuZGlmCisKKyAg
ICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5n
LCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJs
ZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsK
KworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworCisgICAgYm9vbCBoYXNPdmVyZmxvd0Nv
bnRyb2xzKCkgY29uc3Q7CisgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50
IGxvY2FsUG9pbnQpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBJbnRTaXplIG9m
ZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Owor
CisgICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAg
ICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYs
IGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKKworICAgIGJvb2wgY2FuUmVz
aXplKCkgY29uc3Q7CisgICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
Y29uc3QgTGF5b3V0U2l6ZSYpOworICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9pblJlc2l6ZU1vZGU7IH0KKyAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsg
bV9pblJlc2l6ZU1vZGUgPSBiOyB9CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7CisKKyAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhj
b25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5k
cygpOworICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworCisgICAgdm9pZCBw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9h
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykg
eyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZzsgfQorI2VuZGlmCisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgdXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygp
IGNvbnN0IGZpbmFsOworCisgICAgLy8gTGF5ZXJzIHdpdGggdGhlIHNhbWUgU2Nyb2xsaW5nU2Nv
cGUgYXJlIHNjcm9sbGVkIGJ5IHNvbWUgY29tbW9uIGFuY2VzdG9yIHNjcm9sbGVyLiBVc2VkIGZv
ciBhc3luYyBzY3JvbGxpbmcuCisgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGJveFNjcm9s
bGluZ1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTY3JvbGxpbmdTY29wZTsgfQorICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBjb250ZW50c1Njcm9sbGluZ1Njb3BlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOyB9CisKKyAgICBib29sIHNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29s
IGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRp
cnR5U2Nyb2xsYmFyczsgfQorCisgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KKworICAgIFN0cmluZyBkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRl
clN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdm9pZCB1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbEZsYWcgeworICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAgICAgICAg
ICAgICAgICAgICAgPSAxIDw8IDAsCisgICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IgICAgICA9IDEgPDwgMSwKKyAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJm
bG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAorICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0b3IgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCisgICAgfTsKKyAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKKworICAgIFNjcm9sbE9mZnNl
dCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKKworICAgIHZv
aWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mKTsKKworICAgIGJv
b2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3Q7CisKKyAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0
OworCisgICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVu
dCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9p
ZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgLy8gU2Ny
b2xsYWJsZUFyZWEgaW50ZXJmYWNlCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9s
bENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNBY3RpdmUoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFs
OworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOworICAgIEludFJl
Y3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Cisg
ICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRTY3Jv
bGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xsaW5nTm9kZUlE
IHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2aXNpYmxlQ29u
dGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZp
c2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIG92ZXJo
YW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3Np
dGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQo
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkg
Y29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
IGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFp
blRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5n
JikgY29uc3QgZmluYWw7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2b2lk
IHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHVu
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAg
ICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBz
ZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCk7ICAKKworICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9s
bGJhciYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KTsKKworICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IElu
dFNpemUmKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCBj
bGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAg
dm9pZCBjbGVhclJlc2l6ZXIoKTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdl
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsK
KworICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7CisgICAgICAgIEludFJlY3QgaG9y
aXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKKyAg
ICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXI7CisgICAgICAgIEludFJlY3QgcmVzaXplcjsKKyAg
ICAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29y
bmVyIDogcmVzaXplcjsKKyAgICAgICAgfQorICAgIH07CisgICAgT3ZlcmZsb3dDb250cm9sUmVj
dHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CisKKyAgICBib29sIG92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7CisKKyNp
ZiAwCitwcml2YXRlOgorICAgIGJvb2wgdXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8UmVu
ZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qID0gbnVsbHB0cik7CisgICAgdm9p
ZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxSZW5k
ZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPik7CisKKyAgICB2b2lkIHBhaW50QmFj
a2dyb3VuZEZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4
dCYsIEdyYXBoaWNzQ29udGV4dCYgdHJhbnNwYXJlbmN5TGF5ZXJDb250ZXh0LAorICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwgYm9vbCBoYXZlVHJh
bnNwYXJlbmN5LCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIp
OworCisgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0NvbnRleHQmIHRyYW5zcGFyZW5jeUxh
eWVyQ29udGV4dCwKKyAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnRE
aXJ0eVJlY3QsIGJvb2wgaGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgUmVuZGVyTGF5ZXI6OkxheWVy
UGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBh
aW50aW5nUm9vdEZvclJlbmRlcmVyKTsKKworICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
TGF5ZXJGbGFnPik7CisgICAgdm9pZCBwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8mLCBPcHRp
b25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6ZSYgdHJh
bnNsYXRpb25PZmZzZXQgPSBMYXlvdXRTaXplKCkpOworCisgICAgYm9vbCBzZXR1cEZvbnRTdWJw
aXhlbFF1YW50aXphdGlvbihHcmFwaGljc0NvbnRleHQmLCBib29sJiBkaWRRdWFudGl6ZUZvbnRz
KTsKKyNlbmRpZgorCisgICAgdm9pZCB1cGRhdGVNYXJxdWVlKCk7CisgICAgdm9pZCBjcmVhdGVP
ckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCgpOworICAgIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXRB
bmRVcGRhdGVTY3JvbGxpbmdTY29wZXMoTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBLZWVwcyB0cmFj
ayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBj
YW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCisgICAgYm9vbCBtX2luUmVzaXpl
TW9kZSA6IDE7CisgICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9v
bCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyA6IDE7CisjZW5kaWYKKworICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24gOiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisK
KyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIE9wdGlvbmFsPFNjcm9s
bFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKKworICAgIC8vIFRoZSB3aWR0
aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCisgICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7
CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNj
cm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJlZlB0cjxTY3Jv
bGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9m
ZnNldDsKKworICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJh
aXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAgICBNYXJrYWJs
ZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwg
MD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KKworICAgIC8vIFJl
bmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAg
ICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVu
ZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKKworICAgIEludFJlY3QgbV9i
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpSZW5kZXJMYXllciYgbGF5ZXIpIHsgcmV0dXJuIGxheWVy
LmxheWVyVHlwZSgpID09IFdlYkNvcmU6OlJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFi
bGU7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQzNmVmZDE5MTNjZjczOTcwMTFl
YmIzZDIxOTQ4ZTI0Li5lNDU2YzZjOGE1NTgzMjA0ZjYzYWVmYjY4ZThiYzAzMGI2ZDc2MWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCkBAIC00OCw3ICs0
OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CkBAIC04NzksMTAgKzg3OSw5IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uCiBTY3JvbGxhYmxl
QXJlYSogUmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogewog
ICAgIGF1dG8qIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAoIWxheWVyKQorICAg
IGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsK
KyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObyk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpCkBAIC04OTIsNyArODkxLDEwIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVy
KCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpOworICAgIGF1dG8qIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBpZiAoIWxh
eWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKCk7CiB9CiAKIEludFJlY3QgUmVuZGVyTGlzdEJveDo6c2Nyb2xs
YWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0ZDA5OTZlNmJmYmU0MGE2NDQxMTY0NDU5
YWE2NzgwZDhiLi4xYmE1YTYwMjFlOGQyMTNhYmQ0MjRlN2VlZjUyMzg0YmY0MDE5MGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC00OSwxNCArNDks
MTQgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTWFycXVlZUVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
Ci1SZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyKiBsYXllcikKK1JlbmRl
ck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBsYXllcikKICAg
ICA6IG1fbGF5ZXIobGF5ZXIpCiAgICAgLCBtX3RpbWVyKCp0aGlzLCAmUmVuZGVyTWFycXVlZTo6
dGltZXJGaXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCmlu
ZGV4IDFjNzg4NDk1ZTBlODg1NzVlODBiZjkzMDhhMmY0OTRmYjRhNjI4ZDUuLjA4NGFkMzM3NzQ4
NmRmOWNlODMyNTY2NjY4NTQ1MmM0N2I5ODIzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuaApAQCAtNDksMTMgKzQ5LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiAK
IC8vIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgYXV0by1zY3JvbGxpbmcgZm9yIDxtYXJxdWVlPgog
Y2xhc3MgUmVuZGVyTWFycXVlZSBmaW5hbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVu
ZGVyTWFycXVlZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxp
Y2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsKKyAgICBleHBsaWNpdCBSZW5kZXJNYXJx
dWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSopOwogICAgIH5SZW5kZXJNYXJxdWVlKCk7CiAKICAg
ICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwpAQCAtODAsNyArODAsNyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKLSAgICBSZW5kZXJMYXllciogbV9sYXllcjsKKyAg
ICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fbGF5ZXI7CiAgICAgVGltZXIgbV90aW1lcjsKICAg
ICBpbnQgbV9jdXJyZW50TG9vcCB7IDAgfTsKICAgICBpbnQgbV90b3RhbExvb3BzIHsgMCB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDcxMTNmNWMzMjkwMGVk
NzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjk1NzU0MWE2YmU4MWYxYzBjNmNjZDdjYTQ2ZjVj
YmYxYzNiNmQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAg
LTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VD
bGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGU7CiBwdWJsaWM6CiAgICAgLy8gQW5vbnltb3VzIG9iamVjdHMgc2hvdWxkIHBhc3Mg
dGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNh
bGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFub255bW91cyBpbiB0aGUgY29uc3RydWN0b3IuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCmluZGV4IGViMDU2OWIxOGY5ZDFiNTQ2Y2M3NGY5OTcyZDFhMzFlMWY0MGNl
ZmUuLmJjMWE4ZWUwMjdmOTVmZmVlNWM3MTUzNThjNjgwYjc4NmMxODNlODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDAwLDE3ICs0MDAsMjIgQEAgYm9vbCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWwKICAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIHJlbmRlcmVyID0g
aW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlci0+bGF5
ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIFJlbmRl
ckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0
b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29s
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2Fs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciog
bGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYg
KGxheWVyICYmIGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHls
ZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3Jv
bGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwobG9n
aWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4g
UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IGUwNTYwZDdhNTJhOTUyNjRkNmEzZDU2ODJkNzkz
NTY5NWMyM2Y2MGMuLjFmNmQzMWYwZDQ4YWMwNjdlMTViMzlkMGNiNTQ0ZTY5ZGQ0MzdhMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ3
LDggKzQ3LDggQEAKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENvbnRhaW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJr
ZXIuaCIKQEAgLTU5OSwyMCArNTk5LDIxIEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXIoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgTGF5b3V0UmVjCiAgICAg
ICAgICAgICB0cyA8PCAiIGNsaXAgIiA8PCBhZGp1c3RlZENsaXBSZWN0OwogICAgIH0KIAotICAg
IGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChs
YXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8
PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZz
ZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxP
ZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50
KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgp
KQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRo
KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAg
ICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOwor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpOworICAg
IGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXll
cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkpCisg
ICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpLngoKTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eSgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxPZmZzZXQoKS55KCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVy
Qm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNj
cm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCk7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tU
aGVtZSgpICYmIGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgaWYgKCFz
Y3JvbGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGlj
YWxTY3JvbGxiYXIoKSkgewogICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1hY1RoZW1l
ID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKTsKLSAg
ICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqbGF5ZXIudmVydGlj
YWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJlY3Rp
b25SVEwoKnNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSkpCiAgICAgICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxiYXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOwogICAgICAgICB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXgg
MTcyNDhjZGEzNGFhNmI2YTcxOTZmN2YwMDZmMjA4NWZhOWFiNDI2Yy4uMzQ3MDZkNjZlZTAwMzM1
MzAxZWEwNmQxMDI1NDIxNTc3MzY2OGViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHAKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CkBAIC0zMjksOCArMzI5LDggQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2Vs
ZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAotICAg
IGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKQotICAgICAgICBsYXllcigp
LT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgaWYgKGhhc0xheWVyKCkgJiYg
c2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmNhblJlc2l6ZSgpKQorICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCks
IHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOwog
fQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJs
YXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYzA1M2E0ZGRhMjAw
OGVmZDdhNjY4OGQzNDQ4ZmZiZjNiZmNiZTFmNS4uODJiOWJlNGE3MGFlOTdkODVmNmM5MWQyNDEz
Y2U2YmJmNzgwZTc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTU1
LDYgKzE1NSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgpAQCAtMTkwNiw3ICsxOTA3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxz
OjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAg
ICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEg
PSBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiAgICAgfQogICAgIAogICAgIGlmICghc2Nyb2xsYWJs
ZUFyZWEpCkBAIC0yOTAxLDcgKzI5MDIsNyBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+
IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAgICAg
ICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpKQogICAgICAgICAgICAgc2Nyb2xs
YWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gubGF5ZXIoKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LnNjcm9sbGFibGVMYXllcigpOwog
ICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJy
b3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCA4NTg0YzIz
MWZlZjhjOGQ4YjcwNmU4Zjk2ZWQwOGQ3Mzg4NTNkZDUwLi5hMDRiMGFjOTkwZjhmYjg5MjVhZmNh
ZDBmMjRhNWI3MWI3MDQxNzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NSFRNTC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5t
bQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9BdXRvY2FwaXRhbGl6ZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9KU0V4ZWNTdGF0ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV0FLV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+
CiAjZW5kaWYKQEAgLTc3LDcgKzc3LDExIEBAIC0gKGludClzY3JvbGxYT2Zmc2V0CiAgICAgaWYg
KCFpczxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNPdmVy
Zmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8V2Vi
Q29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKTsK
KyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+
KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
T2Zmc2V0KCkueCgpOwogfQogCiAtIChpbnQpc2Nyb2xsWU9mZnNldApAQCAtODgsMTAgKzkyLDE1
IEBAIC0gKGludClzY3JvbGxZT2Zmc2V0CiAKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdz4oKnJlbmRlcmVyKSkKICAgICAgICAgcmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFp
bmluZ0Jsb2NrKCk7CisKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVy
KSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIo
KS0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25j
YXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAg
ICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CiB9CiAKIC0gKHZvaWQpc2V0U2Ny
b2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9mZnNldDooaW50KXkKQEAgLTExMCw3ICsxMTksMTAg
QEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeSBh
ZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoKICAgICBpZiAoIXJlbmRlcmVyLT5oYXNPdmVyZmxv
d0NsaXAoKSB8fCAhaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKS5sYXllcigpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghbGF5ZXIp
CisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkKICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICBsYXll
ci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1w
ZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
ZWY3MzUwMDRlYTZkMDVlOTEyODZlY2ZhNmYwZjhkNDAxMDVlNjZkZS4uNWU1MGQyMmNhZmFhYzY5
OWIyZWQwZWM3NDIxMTI1NTNiMDdlZGRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NCw3ICs5NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1Bs
dWdpbkRhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JhbmdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBAIC03MzcsMTAgKzczNywxMCBAQCAtICh2
b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQogICAgICAgICBz
dGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9z
aW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25S
ZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJ
Zk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBX
ZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAjZWxzZQog
ICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xs
UmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lk
ZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGln
bm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmln
aW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsK
ICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVh
cmFuY2UoKTsKICAgICAgICAgfQpAQCAtNzU3LDEwICs3NTcsMTAgQEAgLSAodm9pZClfc2Nyb2xs
RE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWlu
c2V0CiAKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIo
KTsKLSAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVj
dFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZp
eGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAKICAgICAgICAgICAgIGF1dG8g
Y29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYmY2OGE3MTQ1ZGE4OThlZDRlN2NlNzRl
NjE1N2YwMGJkNzBmN2E2My4uYTRlNzYzYjQ1ODkyYjk5MGIzM2M2NjM4ZDlkMDJmNjkyMGI4Zjcy
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1l
bnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Ny
b2xsYWJsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KQEAgLTIwMzUsMTAgKzIwMzUsMTIgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNl
U2NhbGVGYWN0b3IoKTsKICAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRh
WCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3IpOwogCi0gICAgICAgIFJlbmRl
ckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOworICAgICAgICBSZW5kZXJMYXllclNj
cm9sbGFibGUqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CiAgICAgICAgIGlmIChtX2dlc3R1
cmVUYXJnZXROb2RlICYmIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5
ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5l
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENy
b3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmMWZkYTE0OTMzZWVhNjRlMjZm
MmUwNzAyNzNkNmJmYWI1ZDFmYzdiLi41ZjZkZThiNjhlYWU3ZWQyZTc4YTQ4MTMyMmQzMjc0YjRk
MGJlNGFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDgtMTUgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xs
aW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIg
JiBSZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGds
aWIgZXhwZWN0YXRpb24gZm9yIHRoZSB0ZXN0CisgICAgICAgIGZhc3Qvc2Nyb2xsaW5nL3Njcm9s
bC1hbmltYXRvci1iYXNpYy1ldmVudHMuaHRtbC4KKyAgICAgICAgKFRoaXMgaXMgdW5yZWxhdGVk
IHRvIHRoaXMgYnJhbmNoLCBhbmQgc2hvdWxkIGJlIGZpeGVkIGJlZm9yZSkKKworICAgICAgICAq
IGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0
OgorICAgICAgICBzL1JlbmRlckxheWVyL1JlbmRlckxheWVyU2Nyb2xsYWJsZS8gaW4gY29uc29s
ZSBtZXNzYWdlcworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFu
c2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2
ZW50cy1leHBlY3RlZC50eHQ6CisgICAgICAgIHMvUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLyBpbiBjb25zb2xlIG1lc3NhZ2VzCisKIDIwMjAtMDgtMTUgIExhdXJvIE1vdXJhICA8
bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBBZGQgcHJvdmlzaW9uYWwg
ZXhwZWN0YXRpb24gdG8gaHR0cC90ZXN0cyB0byBhbGxvdyB0aGUgYm90cyB0byBydW4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1l
dmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFu
aW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggOTM2YmVkMjVjMjcxN2Y1MjFk
YzU2ZDUzMjYzMDlkYjg2OTRhMjYxNS4uOWEzNDY3NWQxZjQ2Mjc0NzAwYmQ0N2YyYmRmZWM1Mjdj
Y2MxYjY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFu
aW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTEs
MTQgKzEsMTQgQEAKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VFbnRlcmVk
Q29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZElu
Q29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZENv
bnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRWZXJ0
aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKIENPTlNPTEUgTUVTU0FHRTogTWFp
bkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FH
RTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQorQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlSXNEb3duSW5WZXJ0aWNh
bFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNl
SXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCiBDT05TT0xFIE1FU1NBR0U6IE1h
aW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGhpcyBpcyBhIHNjcm9s
bGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJl
bmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIv
YW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyYTM4Y2EyNzNjNmQ3MDA2ODc4NmUz
MzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zv
cm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNiAr
MCwwIEBACi1QQVNTIGNvdW50IGlzIDAKLVBBU1MgY291bnQgPCA2IGlzIHRydWUKLVBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRv
ci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdr
MS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4
dAppbmRleCA2MGNkYjY2YzFmMGEyYjEwN2Y1ODQxN2IzMzJlZjg3ZjYxNTFmOTQyLi40NTg3Zjli
NWQ0ZTE1OWRiOGMzNWM5MjRjMDQwNmVlYWZlZDYzY2UxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1l
dmVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFz
dC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKQEAg
LTEsMTEgKzEsMTEgQEAKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJl
ZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRW
ZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3Zl
ZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3du
SW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJ
c1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91
c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNl
RXhpdGVkVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1v
dXNlRXhpdGVkQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXll
clNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlzRG93bkluVmVydGljYWxT
Y3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlz
VXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGhpcyBp
cyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406688</attachid>
            <date>2020-08-16 15:45:24 -0700</date>
            <delta_ts>2020-08-17 05:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60305-20200817004522.patch</filename>
            <type>text/plain</type>
            <size>357343</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDEzZmRkZTliYTljYjBm
OTIzNWJmM2Y5N2JiMmZiZjczOTIxOTgwNC4uNjcwZTc5ZDUyMzdkOGYzZGRiNzQ5NTI3ZmQzNmFh
ZTQ4M2I4NzQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5OSBAQAorMjAyMC0wOC0xNiAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIFNvdXJj
ZXMudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpn
ZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyBjb25zdCk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2Nyb2xsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVl
IGNvbnN0KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVXaGVlbEV2
ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Omhh
bmRsZU1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgor
ICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lVmlldzo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxJbkRpcmVjdGlvbik6Cisg
ICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlQXJlYUZv
ckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kQW5kQ29t
bWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpp
c1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVu
dE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbnRyaW5zaWNTY3Jv
bGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpz
Y3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhblNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdCBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJh
aW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29u
c3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVy
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YWxsb3dzQ3VycmVudFNjcm9sbCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdXRvc2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGb250
U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6b3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmxheWVyVHlwZSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OndpbGxCZURlc3Ry
b3llZCk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3Zl
cmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJl
bnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRl
bnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1
aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTeW5j
aHJvbm91c1Njcm9sbGluZ05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5
ZXJXaXRoQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmRpZEFkZFNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNj
cm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OmFkZFNjcm9s
bGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlbW92ZUxheWVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6c2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5leHRT
Y3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTY3JvbGxEZWx0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZy
b21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9ZUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZl
cnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNjcm9sbENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblJlc2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFkZEJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWN1cnNpdmVseUNsZWFyQmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVT
Y3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlVcGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNob3dzT3ZlcmZsb3dDb250cm9s
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRl
c3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9s
bE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9s
bGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNI
YW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Vz
ZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRy
b2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRlbGV0ZU1hcnF1ZWVJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xs
T2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5bGUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaDogQWRkZWQuCisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNYXJxdWVlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Ny
b2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJX
aWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0wOC0xNCAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBTY3JvbGxpbmcgc3luYyBjaGFuZ2VzIGlu
IHIyNjE5ODUgcmVncmVzc2VkIENQVSB1c2FnZSBieSB+MiBtcy9zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKaW5kZXggNjJkYWQxNTFmNjQzYjAxNzUwNTY2ZWEwMGJkYmJiNDBhY2ExMTRhYy4u
YzM1MzhkMjQyOTcyMDA1MzllMzhmNGQzYWYwMjM2ZTc4NWQzMmRlNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA4LTE2ICBOaWtvbGFzIFppbW1l
cm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9s
bGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVy
ICYgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisgICAgICAgICogRE9NL0RPTUhUTUwubW06Cisg
ICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9sbFhPZmZzZXRdKToKKyAgICAgICAgKC1bRE9N
SFRNTEVsZW1lbnQgc2Nyb2xsWU9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBz
ZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRqdXN0Rm9ySU9TQ2FyZXQ6XSk6CisgICAg
ICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Njcm9sbERP
TVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VU
b1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTA4LTEyICBLZWl0aCBSb2xsaW4gIDxrcm9s
bGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIG5lZWQgZm9yIGRlZmluaW5nIFVT
RV9ORVdfQlVJTERfU1lTVEVNCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggYjk4Yjdh
YjNlN2I4MGQxY2Y3NGYyZTNlOGFiZTlmYzk4YzU1MDYyMy4uYWU4NmZmYmViOThhYjEzNWNiNzk2
MTk1MWYwNDExMDhhYjAxMDlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDIwLTA4LTE2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBp
Z2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5k
ZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
cGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJl
KToKKwogMjAyMC0wOC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIFJhbmdlOjpjcmVhdGUgYW5kIG1hbnkgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2Vz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQppbmRleCBhNmNhNTQxMGM0MWFmZmViMWJiNWVkMTA2YTZhZDE5M2Iz
YmFmMzc4Li5jMmY3M2JiMmM5ZGQ3ZTJjNzE5OWM0NTUwNDEwNTQzZThmYjUzMTljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKQEAgLTEzOTEsNiArMTM5MSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCiAg
ICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTWVk
aWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBkMTgw
MWFhMDFmZTkyODMwYjNlYTgyNmU2OTdiZGFiODVmYzg0Zjk3Li5lYWJlYjBlYmEyOGYyMDUyMjkz
MDI2NjU1ZmIwNzIyZjQ4OTkyNGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjEyOCw2ICsyMTI4LDcg
QEAgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcAorcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAK
IHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxh
eW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJjNjg4
MWJlODIwOGUyMGQzM2UyNDZkMjU2ZTc2OWJmZDI3ZjRmMGEuLmE5Yzc4Y2QzMWIwNDI3OGI5YmM5
NjRjYjk4Y2QzNjhiNzdmZTUwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMwOCw2ICszMDgsNyBAQAogCQkwRjU4MEIwRTBG
MTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXJDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRDBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjU4MENGOTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1ODBDRkYw
RjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkIwRjEyREU5QjAwNTFENjg5IC8q
IFJlbmRlckxheWVyQmFja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGNTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNj
cm9sbGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MEZBMzE0
OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTgwRkExMTQ5NjkzOTEwMEZCNUJEOCAv
KiBXZWJUaWxlZEJhY2tpbmdMYXllci5oICovOyB9OwogCQkwRjU4MEZBRjE0OTgwMEQ0MDBGQjVC
RDggLyogQW5pbWF0aW9uVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDggLyogQW5pbWF0aW9uVXRp
bGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCN0E1MzEwRjY1
RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTkyNSw2ICs1OTI2LDggQEAKIAkJMEY1
ODBDRkEwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJCYWNraW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlckxheWVyQmFja2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4
MENGQzBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQmFja2luZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTgw
Q0ZDMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8q
IFdlYlRpbGVkQmFja2luZ0xheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlRpbGVkQmFja2luZ0xheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTgwRkEyMTQ5NjkzOTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlRpbGVkQmFja2luZ0xheWVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBRTE0OTgwMEQ0MDBGQjVCRDgg
LyogQW5pbWF0aW9uVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFuaW1hdGlvblV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjg3
NzYsNiArMjg3NzksOCBAQAogCQkJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllckZpbHRlcnMuaCAqLywKIAkJCQkzQzI0NEZFNUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJM0MyNDRGRTRBMzc1QUM2MzNGODhCRTZGIC8q
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCAqLywKKwkJCQkwRjU4MENGQzBGMTNBQjlCMDA1MUQ2
ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcCAqLywKKwkJCQkwRjU4MENGQjBGMTNBQjlC
MDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUx
NDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBC
RTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBG
MzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApAQCAtMzMxMzcsNiAr
MzMxNDIsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJh
Y2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFD
NjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjU4MENGRjBGMTNBQjlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBS
ZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlckxpbmVCcmVhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAppbmRleCAwZDgzOGQ1NzQ4MWZiNDdiZDlmZTI5ZDk3YTVkYzA5YWIxZDhjYWI2Li41MmI0
M2EwODI2ZjZiMmFmMGIzOTNkNDAxMDA3MGY3ZDBiMzJjNDVjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKQEAgLTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNs
dWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MTYsNyArMzkxNiw4IEBAIFNjcm9sbGFibGVB
cmVhKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xs
YWJsZSgpIGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVB
cmVhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigp
OworICAgIEFTU0VSVChib3guc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIHJldHVybiBib3guc2Ny
b2xsYWJsZUxheWVyKCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Ny
b2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYg
cG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBh
IFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0g
ICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LnNj
cm9sbGFibGVMYXllcigpKTsKKyAgICBib3guc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFRvT2Zm
c2V0KHBvaW50KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggODgwMmVkMDRlYTMzMzBlOTU3ZGJhMDFjMTcxNjI0NDUxZWM0NDRjZC4uODgwNGExNmJl
YzE0Y2QwMmYwN2FlZmE2OWJmOWIxMjA2ZDI2ZDMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtODksOSArODksOSBAQAogI2luY2x1ZGUgIlBzZXVkb0NsYXNzQ2hhbmdlSW52YWxpZGF0aW9u
LmgiCiAjaW5jbHVkZSAiUXVpcmtzLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cu
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBAIC0xMzA4
LDggKzEzMDgsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiAg
ICAgICAgIGludCBjbGFtcGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiByZW5kZXJl
ci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmlt
YXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBB
bmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJl
ci0+c2V0U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3Rh
dGUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC0xMzMyLDggKzEzMzIsOCBAQCB2b2lkIEVsZW1lbnQ6
OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1w
VG9JbnRlZ2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAg
ICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9s
bEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNj
cm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQp
OwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkK
LSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRT
dGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVy
LT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Ny
b2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5N2U2NmY4ZjhhZjA1ZmEwMjc3
NmEwMDg1MGY1ZjU1YWU4NjFmM2YuLjA4NmY2OTMxYzE4YmUxMDkwMmY5YjE1ZGRlYjdjM2I5YTk3
NjE4ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01
Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTI0MTIs
OSArMjQxMiwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0
aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBpZiAo
IW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpOworICAgICAgICAg
ICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAg
ICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7
IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2lu
U2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFi
bGVMYXllcikKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFw
cGVhcmFuY2UoKTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAg
ICAgICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5v
dGlmeVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFk
ZjdkMTY0ZTJlNGUyYjBmYjExM2YwM2ExYmQzYTczYzI3MTI3NS4uMDQ4ZjA1MGY4MWE4NjFjMTQ0
NzEwNDljZDYyNTUzZGEwMGU5ODEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1
ZWVFbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21z
LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3NSw4IEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxN
YXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJl
cigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+bWFycXVlZSgpOwor
ICAgIEFTU0VSVChyZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5zY3JvbGxhYmxlTGF5ZXIoKSk7Cisg
ICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPnNjcm9sbGFibGVMYXllcigpLT5tYXJx
dWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZmZDQ0
ZTFjNDQyNjc4NmEzLi43MjIyNGY5NTEwYTk2OWY3ZDRhZGFhNDFjNjhiOTU3ODFlY2I5MGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3ICs0
OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBU
ZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlubmVyVGV4dFJl
bmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJU
ZXh0UmVuZGVyZXItPmxheWVyKCk7CisgICAgYXV0byogaW5uZXJMYXllciA9IGlubmVyVGV4dFJl
bmRlcmVyLT5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAoIWlubmVyTGF5ZXIpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGE2YTYyYWM5
ZjZlZWNhNDUwMWNkNDdhNWYwMGUwZTUxZmY3NjEzOTIuLmI1MDJlZGFhYTlkYTQ3OGM5ZDA3NzE4
ZjY4MTM2YTY2NTMwODhhZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTc5LDcgKzc5LDcgQEAKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNDMsMTIgKzM0MywxNCBAQCBzdGF0aWMgYm9vbCBo
YW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2RlKiBzdGFydE5vZGUs
IGNvbnN0IFdoZQogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7CiAgICAgICAgIGlm
IChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7
CiAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQ
bGF0Zm9ybUV2ZW50KCk7Ci0gICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7Ci0g
ICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewotICAgICAgICAgICAgICAgIGF1dG8gY29w
aWVkRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5jb3B5V2l0aERlbHRhc0FuZFZlbG9jaXR5KGZpbHRl
cmVkUGxhdGZvcm1EZWx0YS53aWR0aCgpLCBmaWx0ZXJlZFBsYXRmb3JtRGVsdGEuaGVpZ2h0KCks
IGZpbHRlcmVkVmVsb2NpdHkpOwotICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQg
PSBib3hMYXllci0+aGFuZGxlV2hlZWxFdmVudChjb3BpZWRFdmVudCk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gZGlkU2Nyb2xsSW5T
Y3JvbGxhYmxlQXJlYSgqYm94TGF5ZXIsIHdoZWVsRXZlbnQpOworICAgICAgICAgICAgYm9vbCBz
Y3JvbGxpbmdXYXNIYW5kbGVkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoYXV0byogYm94TGF5
ZXJTY3JvbGxhYmxlID0gYm94TGF5ZXItPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3Bp
ZWRFdmVudCA9IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVy
ZWRQbGF0Zm9ybURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwg
ZmlsdGVyZWRWZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRs
ZWQgPSBib3hMYXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNI
YW5kbGVkID0gZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3
aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dh
c0hhbmRsZWQpIHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3Np
bmdCb3gtPmVsZW1lbnQoKTsKQEAgLTE1NjgsNyArMTU3MCw3IEBAIE9wdGlvbmFsPEN1cnNvcj4g
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBi
b29sIHNoCiAgICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7CiAgICAgICAgIGlmIChyZW5k
ZXJlciAmJiByZW5kZXJlci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFdp
dGggcmlnaHQtYWxpZ25lZCB0ZXh0IGluIGEgYm94LCB0aGUgcmVuZGVyZXIgaGVyZSBpcyB1c3Vh
bGx5IGEgUmVuZGVyVGV4dCwgd2hpY2ggcHJldmVudHMgc2hvd2luZyB0aGUgcmVzaXplIGN1cnNv
cjogd2Via2l0Lm9yZy9iLzIxMDkzNS4KLSAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVj
dD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVz
aXplciA9IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1
bHQubG9jYWxQb2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6
ZUN1cnNvcigpOwpAQCAtMTgxMiwxMiArMTgxNCwxNCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1Nb3Vz
ZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkgPyBt
X2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAgICAg
YXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJlc3Vs
dCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5SZXNp
emVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1vZGUo
dHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZzZXRG
cm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQb2lu
dCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJ
blJlc2l6ZUNvbnRyb2wobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNj
cm9sbGFibGVMYXllcjsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNj
cm9sbGFibGVMYXllci0+b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAg
ICAgICAgIGludmFsaWRhdGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdT
dXNwZW5kZWQodHJ1ZSk7CkBAIC0xOTE4LDEwICsxOTIyLDEwIEBAIFNjcm9sbGFibGVBcmVhKiBF
dmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAg
IH0KIAogICAgICAgICBhdXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwot
ICAgICAgICBpZiAoIWxheWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xs
YWJsZUxheWVyKCkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkg
eworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVM
YXllcigpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKICAgICAgICAgICAgIGlmICghc2Ny
b2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQogICAgICAgICAgICAgICAgIHJldHVy
biBzY3JvbGxhYmxlTGF5ZXI7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CmluZGV4IDYxNzkwNWUwMWIxZGRmMGQxZTBjMWQ0ZWViODM0OGU3OWVhYmIyYTEuLjg3MTliYTAz
NjU2YmE3ODc4OTRiMzU1ZTFlNTAzNDQ1YTA5ZTIyZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuaApAQCAtODMsNyArODMsNyBAQCBjbGFzcyBQbGF0Zm9ybVRvdWNoRXZlbnQ7CiBjbGFz
cyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJFbGVt
ZW50OwotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBj
bGFzcyBSZW5kZXJXaWRnZXQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJh
cjsKQEAgLTU1MCw3ICs1NTAsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3N2Z1BhbiB7IGZh
bHNlIH07CiAKLSAgICBSZW5kZXJMYXllciogbV9yZXNpemVMYXllciB7IG51bGxwdHIgfTsKKyAg
ICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fcmVzaXplTGF5ZXIgeyBudWxscHRyIH07CiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gbV9jYXB0dXJpbmdNb3VzZUV2ZW50c0VsZW1lbnQ7CiAgICAgYm9v
bCBtX2V2ZW50SGFuZGxlcldpbGxSZXNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudCB7IGZh
bHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggZjliMWE1ZDcxNWI3NTQ3Mjk0
Mjg1ODlhZTU4MWU2OWM1YjdkZTExYy4uMmVhMGYyODViZGRlYmVlNjk2YzkzNzc4NzUyMDA1YWZm
YzY2ZDNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNzcsOSArNzcsOSBAQAog
I2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9z
aXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJl
bmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTYyLDcgKzI1NjIsOCBAQCB2b2lkIEZyYW1lVmll
dzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRD
b250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0
cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVy
VmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAg
ICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpOworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXll
cigpKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNjcm9sbGFibGVMYXllcigpLT51cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM4NDAsMTAgKzM4NDEsMTAgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IGF1dG8qIGxheWVyID0gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICBpZiAo
IWxheWVyKQorICAgIGlmICghbGF5ZXIgfHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICByZXR1cm4gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpLT5lbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObyk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJl
YUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApAQCAtNDMxOCw4ICs0MzE5LDEwIEBAIHZvaWQgRnJh
bWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwog
CiAgICAgcm9vdExheWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwg
bV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5
ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29u
dGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJs
YXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJl
cik7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJs
ZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3Qs
IG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVu
dHMoY29udGV4dCwgZGlydHlSZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKaW5kZXggNGQ4YjcyZjhlNWJjYjBlODMyZDNlYzNk
ZGMyZWU5MjkyYjQ5ZmU4Ni4uZGIxYTRlYmRlZDJmYWRkMWZmZjBiNWJkYjJhOTgwMDQxZGZhZjhm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTQwLDcg
KzQwLDcgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlcklubGluZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NCwxMSBAQCBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5v
ZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+
ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwor
ICAgICAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVu
Y2xvc2luZ0xheWVyKCk7CisgICAgICAgIEFTU0VSVChlbmNsb3NpbmdMYXllcik7CisKKyAgICAg
ICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyLT5z
Y3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+
c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggOWJiOGU5MmNh
YWM1Y2Y1MzJiNzliOTBlZWFiM2NmMjE1NDBhZmY0My4uZDE2MjZlYzNjMjdiMWZiNjNlZmI1M2E4
MGYwMmU2Yzg2ODA2ZWM0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTgx
OSwxNCArODE5LDE2IEBAIHZvaWQgRnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
Rm9yTm9kZShjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIE5vZGUqCiAgICAgaWYgKCFyZW5kZXJl
ciB8fCAhcmVuZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
ckxheWVyJiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVy
KS5sYXllcigpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIuY3VycmVudFNjcm9s
bFR5cGUoKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBT
Y3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKLSAgICBsYXllci5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwotICAgIGxheWVyLnNldEN1
cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIGxheWVyLT5zZXRDdXJyZW50U2Nyb2xs
VHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljKTsKKyAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0
aW9uKTsKKyAgICBsYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAK
LSAgICBsYXllci5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2Fs
bCB0aGlzPworICAgIGxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBh
bHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVy
bWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5k
ZXggYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4uZjg0M2U5ZTNmYzdm
NWMzY2FhMTg2NGU1ZWVmYzc4NTVlY2RhMTQyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0ICJS
YW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmll
dy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgyLDcgQEAgc3RhdGlj
IFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKICAg
ICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIHJldHVy
biBib3guc2Nyb2xsYWJsZUxheWVyKCk7CiB9CiAgICAgCiBzdGF0aWMgQ29udGFpbmVyTm9kZSog
ZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXIoQ29udGFpbmVyTm9kZSogbm9kZSwgY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpZ2hsaWdodERhdGEuY3BwCmluZGV4IGU1YTQ3YjcwNzRkY2M5MzFkYjAwMzc3ODNhM2Uy
OWFmZDdmZGRlNDMuLmFlZTUwYjA5YTkzMGRjMzk1NTMwNmZlYzE0NTBjYjc3YWRjNzAyNjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNs
dWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC0yMDksNyArMjA5LDggQEAgdm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rp
b24oY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2sKIAogdm9p
ZCBIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbigpCiB7Ci0gICAgbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJW
aWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVy
KCktPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKICAgICBzZXRTZWxlY3Rpb24oeyB9LCBI
aWdobGlnaHREYXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwogfQogCkBAIC0zMTksOCAr
MzIwLDEwIEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVy
UmFuZ2UmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUKICAgICAgICAgY3VycmVudFJlbmRlcmVy
LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
Okluc2lkZSk7CiAgICAgfQogCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1v
ZGU6Ok5vdGhpbmcpCi0gICAgICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5jbGVhckJsb2NrU2Vs
ZWN0aW9uR2Fwc0JvdW5kcygpOworICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRN
b2RlOjpOb3RoaW5nKSB7CisgICAgICAgIEFTU0VSVChtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxh
eWVyKCkpOworICAgICAgICBtX3JlbmRlclZpZXcuc2Nyb2xsYWJsZUxheWVyKCktPmNsZWFyQmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgfQogCiAgICAgLy8gTm93IHRoYXQgdGhlIHNl
bGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsg
dGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDZiNTNjYmE4NWM4
ZTlkYzU5NzE1YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmE2N2NiMjJjMjNkMzNmMzM4YzhhMGE2NjRm
ZWI1OTJlMGY5MDZjNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1h
cmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC01NTMsNyArNTUzLDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
VHJhbnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9jayA6IGJsb2Nrc1RvVXBkYXRlKSB7
CiAgICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBibG9j
ay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgICAgIGlmIChi
bG9jay0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBibG9jay0+c2Nyb2xsYWJsZUxh
eWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogICAgICAgICBibG9jay0+Y2xl
YXJMYXlvdXRPdmVyZmxvdygpOwogICAgIH0KIH0KQEAgLTU4NCw4ICs1ODUsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigp
LT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKQEAgLTExMDksMTIgKzExMTAs
MTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVzaGVkQ2xpcCkKICAgICAgICAg
cG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVzdGVkUGFpbnRPZmZzZXQpOwog
CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8g
T3VyIHNjcm9sbGJhciB3aWRnZXRzIHBhaW50IGV4YWN0bHkgd2hlbiB3ZSB0ZWxsIHRoZW0gdG8s
IHNvIHRoYXQgdGhleSB3b3JrIHByb3Blcmx5IHdpdGgKICAgICAvLyB6LWluZGV4LiBXZSBwYWlu
dCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Ny
b2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KICAg
ICBpZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQ
YWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKQogICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpW
aXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWlu
dEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRP
dmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29u
dGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRS
ZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVu
dHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
QEAgLTE0NjksMTYgKzE0NzMsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24o
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8KIAogICAgICAg
ICBMYXlvdXRSZWN0IGdhcFJlY3RzQm91bmRzID0gc2VsZWN0aW9uR2FwcygqdGhpcywgcGFpbnRP
ZmZzZXQsIExheW91dFNpemUoKSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgY2FjaGUs
ICZwYWludEluZm8pOwogICAgICAgICBpZiAoIWdhcFJlY3RzQm91bmRzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBsYXllclNjcm9sbGFibGUgPSBlbmNsb3NpbmdMYXllcigp
ID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUxheWVyKCkgOiBudWxscHRyKSB7CiAgICAg
ICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZUJ5KC1wYWludE9mZnNldCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFoYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFJl
Y3QgbG9jYWxCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgICAgICAgICBmbGlw
Rm9yV3JpdGluZ01vZGUobG9jYWxCb3VuZHMpOwotICAgICAgICAgICAgICAgICAgICBnYXBSZWN0
c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyksICZs
YXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29u
dGFpbmVyUXVhZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCAmbGF5ZXJTY3JvbGxhYmxlLT5yZW5k
ZXJlcigpKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
bGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnkobGF5ZXJTY3JvbGxhYmxlLT5yZW5kZXJCb3goKS0+
c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxh
eWVyLT5hZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOworICAgICAg
ICAgICAgICAgIGxheWVyU2Nyb2xsYWJsZS0+YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGdh
cFJlY3RzQm91bmRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIwMDEs
NyArMjAwNSwxMCBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wo
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5o
aXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbklu
Q29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVk
SW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9m
ZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QK
QEAgLTI0OTgsOSArMjUwNSwxMSBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAv
LyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFz
IHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNv
IGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3Jv
bGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcu
LCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCku
Ci0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFy
cXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAg
ICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3Jv
bGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVi
eVJ1bigpKTsKLSAgICAgICAgCisgICAgICAgIGJvb2wgaGFzTWFycXVlZSA9IHNjcm9sbGFibGVM
YXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPm1hcnF1ZWUoKSA6IG51bGxwdHI7CisgICAgICAg
IGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxh
YmxlTGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Ny
b2xsT2Zmc2V0KCkueSgpKSA6IGZhbHNlOworICAgICAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IChzY3JvbGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkpIDog
ZmFsc2U7CisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAoaGFzTWFycXVlZSB8fCAoZGly
ZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigp
KTsKKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUg
PyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCBlMjEzYWFjNzFhOTQ0
NTg3M2UyMTYwNDE2NGU0MTQ0NThiMDZjYTkwLi5jNTFjNTBjZTU3YmRhZTAwMzU0YWRkMjk0MmQx
Y2NlNzQ4ZGMzODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
LSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM0OSw3ICszNDksNyBA
QCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5
b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9XcmFwKCkg
JiYgY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFycXVlZSB3
aXRoIGlubGluZSBjaGlsZHJlbiBoYXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAgaWYgKGxh
eWVyKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jp
em9udGFsKCkpCisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIoKSAmJiBzY3JvbGxhYmxlTGF5
ZXIoKS0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpv
bnRhbCgpKQogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjEyMzc2YmFhZDYxYmQ2MmZhM2Nl
ZGE4ZGRhMmFhMjY0M2I3OTlkYi4uZDEyOGQxNGE2OGYyNDcwZjlhODY5NjFiZmQ5NTI1ZTcyOWYx
OGJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDggKzU4
LDggQEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgi
CiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBA
IC0zMTksMTEgKzMxOSwxMSBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gSWYg
b3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExlZnQv
VG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3IHpv
b21lZCBjb29yZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
cigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUu
ZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9u
ID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgU2Nyb2xsUG9zaXRp
b24gc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsK
ICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgp
IC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2Nh
bGUoem9vbVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNl
dFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAg
Ly8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBs
YXlvdXQuCkBAIC01NDIsOCArNTQyLDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNsaWVudEhl
aWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVy
KCktPnNjcm9sbFdpZHRoKCk7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFdpZHRo
KCk7CiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNo
ZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9k
ZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CkBAIC01NTUs
OCArNTU1LDggQEAgaW50IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogCiBpbnQgUmVu
ZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpKQotICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7Cisg
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbEhlaWdodCgpOwogICAgIC8vIEZvciBvYmpl
Y3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCkBAIC01NjUsMTIgKzU2NSwxMiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWln
aHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCkueCgpIDogMDsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJs
ZUxheWVyKCkgPyBzY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwog
fQogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxUb3AoKSBjb25zdAogewotICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkg
OiAwOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIoKSA/
IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQg
UmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01
NzksNyArNTc5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxh
eW91dElmTmVlZGVkKCkKICAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwX2x1KTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCitzdGF0
aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5
ZXIpCiB7CiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlm
ICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQpAQCAtNTg5LDI2ICs1ODksMjYgQEAg
c3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAK
IHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRl
ZCkKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQorICAgIGlmICgh
aGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQogICAgICAgICByZXR1cm47
Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Ny
b2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
KyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgc2Ny
b2xsYWJsZUxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNs
YW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50
IG5ld1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8
fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVy
KCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpzY3JvbGxh
YmxlTGF5ZXIoKSk7CisgICAgc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5l
d1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFzY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxh
eWVyKCktPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOworICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKnNjcm9sbGFibGVMYXllcigp
KTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphYnNv
bHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCkgY29uc3QKQEAgLTgwOCwyNCArODA4LDMwIEBAIGJvb2wgUmVuZGVyQm94
OjpmaXhlZEVsZW1lbnRMYXlzT3V0UmVsYXRpdmVUb0ZyYW1lKGNvbnN0IEZyYW1lVmlldyYgZnJh
bWVWaWV3KSBjCiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAh
bGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OkF1dG8pOworICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIXNjcm9sbGFibGVM
YXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigp
LT5oYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVk
ZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQot
ICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0
eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOworICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIXNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKHNjcm9sbGFibGVMYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvOwogfQog
CiBpbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpIDogMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFy
U2l6ZSgpICYmIHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9s
bGJhclNpemUoKSA/IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7Cisg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpICYmIHNjcm9sbGFibGVM
YXllcigpID8gc2Nyb2xsYWJsZUxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6
IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgp
IGNvbnN0CkBAIC04MzQsMTIgKzg0MCwxMiBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3Jv
bGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkpKSB7Ci0gICAgICAgIEFT
U0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgICAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCktPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xs
YmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKCkgJiYgc2Ny
b2xsYWJsZUxheWVyKCktPmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVy
biBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg1NCwx
NCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25z
dAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1l
bnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigp
OwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAg
ICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSBzY3JvbGxhYmxl
TGF5ZXIoKTsKKyAgICBpZiAoIWJveExheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHN0b3BFbGVtZW50KQorICAgICAgICAq
c3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUmVu
ZGVyQm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwg
UmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KQpAQCAtODc4LDE1ICs4ODMsMTQgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwKIGJvb2wg
UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVu
dCoqIHN0b3BFbGVtZW50KQogewogICAgIGJvb2wgc2Nyb2xsZWQgPSBmYWxzZTsKLSAgICAKLSAg
ICBSZW5kZXJMYXllciogbCA9IGxheWVyKCk7Ci0gICAgaWYgKGwpIHsKKyAgICBhdXRvKiBsYXll
ciA9IHNjcm9sbGFibGVMYXllcigpOworICAgIGlmIChsYXllcikgewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlv
biBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhv
bWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0g
ICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJ
bmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBzY3JvbGxlZCA9IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5
c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9j
dW1lbnQsIG11bHRpcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNh
bFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgp
LmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikp
CisgICAgICAgIGlmIChsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwg
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQg
PSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC04OTksOSArOTAz
LDkgQEAgYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXQKICAgICBpZiAoc3RvcEVsZW1lbnQgJiYgKnN0
b3BFbGVtZW50ICYmICpzdG9wRWxlbWVudCA9PSBlbGVtZW50KCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgUmVuZGVyQmxvY2sqIGIgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAo
YiAmJiAhYi0+aXNSZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiBiLT5sb2dpY2FsU2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKKyAgICBS
ZW5kZXJCbG9jayogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICBpZiAoYmxvY2sgJiYg
IWJsb2NrLT5pc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGJsb2NrLT5sb2dpY2FsU2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTkzMiw3ICs5MzYsNyBAQCBib29sIFJlbmRlckJveDo6
Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94Ojp1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93
Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKCkgJiYg
c2Nyb2xsYWJsZUxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiB9CiAKIHZvaWQg
UmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTk5MSw4
ICs5OTUsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50
UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFu
U2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcigpKQorICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9CiAK
IGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0xMDE3
LDExICsxMDIxLDkgQEAgYm9vbCBSZW5kZXJCb3g6Om5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxj
dWxhdGlvbigpIGNvbnN0CiAKIFNjcm9sbFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRp
b24oKSBjb25zdAogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSB8fCAhc2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAgIHJldHVybiB7IDAs
IDAgfTsKLQotICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Ny
b2xsUG9zaXRpb24oKTsKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCk7CiB9CiAKIExheW91dFNpemUgUmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dD
bGlwKCkgY29uc3QKQEAgLTE1NjksNyArMTU3MSw3IEBAIGJvb2wgUmVuZGVyQm94Ojpjb21wdXRl
QmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
CiAgICAgaWYgKCFnZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVudChwYWludE9mZnNldCwgYmFja2dy
b3VuZFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAm
JiBsYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgaWYgKHNjcm9s
bGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBmb3JlZ3JvdW5k
SXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJh
dGlvblRlc3RNYXhEZXB0aCk7CkBAIC0xODg4LDEwICsxODkwLDEwIEBAIExheW91dFJlY3QgUmVu
ZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVu
ZGVyRnJhZ21lCiAgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRT
aXplKGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90
dG9tKCkpKTsKIAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhl
bS4KLSAgICBpZiAobGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0
aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlw
UmVjdC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAg
ICAgICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1
cm4gY2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcAppbmRleCA1ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgz
OTg3Li5jMGRhN2VhMTEzNGY5NjYwMzU4Yzk5MjEzZGQzM2E4NmZlNWE1NjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4
LDkgKzQ4LDkgQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCAr
NDkwLDggQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9u
Q29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250
YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RS
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9h
dFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJv
cmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAg
ICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdD
bGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2sgJiYgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxl
TGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250YWluaW5n
QmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAt
NTA4LDggKzUwOCw4IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQ
b3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgaWYgKGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xs
aW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQo
KSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNs
b3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRp
bmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmlu
Z0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5j
ZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrICYmIGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc3RpY2t5TG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXll
ci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpOwogICAgIH0KICAgICAvLyBGSVhN
RTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5vdCB0cmFuc2Zvcm1lZC4KICAgICBz
dGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iuc2V0TG9jYXRpb24oc3RpY2t5TG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTQ4LDExICs1NDgsMTMgQEAg
RmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5
UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0ID0g
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRSZWN0KGNsaXBS
ZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAgICAgICBGbG9hdFBvaW50IHNjcm9s
bE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Ny
b2xsT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUxheWVyKCktPnNj
cm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAg
ICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBw
aW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAg
ICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAg
ICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5zY3JvbGxhYmxlTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgICAgICBzY3JvbGxiYXJP
ZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5zY3JvbGxhYmxlTGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29u
c3RyYWluaW5nUmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBz
Y3JvbGxiYXJPZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0
cmFpbmluZ1JlY3Q7CkBAIC04NDQsOCArODQ2LDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
CiAgICAgICAgIAogICAgICAgICAvLyBBZGp1c3QgdGhlIHBhaW50IHJlY3QgdG8gcmVmbGVjdCBh
IHNjcm9sbGVkIGNvbnRlbnQgYm94IHdpdGggYm9yZGVycyBhdCB0aGUgZW5kcy4KICAgICAgICAg
c2Nyb2xsZWRQYWludFJlY3QubW92ZUJ5KC10aGlzQm94LnNjcm9sbFBvc2l0aW9uKCkpOwotICAg
ICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIGxheWVyKCktPnNjcm9sbFdp
ZHRoKCkgKyBiUmlnaHQpOwotICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRIZWlnaHQoYm9y
ZGVyVG9wKCkgKyBsYXllcigpLT5zY3JvbGxIZWlnaHQoKSArIGJvcmRlckJvdHRvbSgpKTsKKyAg
ICAgICAgYXV0byBzY3JvbGxXaWR0aCA9IHNjcm9sbGFibGVMYXllcigpID8gc2Nyb2xsYWJsZUxh
eWVyKCktPnNjcm9sbFdpZHRoKCkgOiAwOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRX
aWR0aChiTGVmdCArIHNjcm9sbFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgYXV0byBzY3JvbGxI
ZWlnaHQgPSBzY3JvbGxhYmxlTGF5ZXIoKSA/IHNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxIZWln
aHQoKSA6IDA7CisgICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldEhlaWdodChib3JkZXJUb3Ao
KSArIHNjcm9sbEhlaWdodCArIGJvcmRlckJvdHRvbSgpKTsKICAgICB9CiAgICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBiYWNrZ3JvdW5kQ2xpcFN0YXRlU2F2ZXIoY29udGV4dCwg
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTll
ODI0ZDEzNTcwNjM5ZTNlNGQ0NDNjOTY1ZjE0NGU5ZDQ4ZjQ0Ni4uODdjZjE4NTJlNzc2NTU3MWE5
OTczYTllZTg4MTliYjhjYjcwZDBkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0yODcsMTYgKzI4NywxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2xpcFJlY3RzJiBjbGlwUmVjdHMpCiAKICNlbmRp
ZgogCi1zdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkKLXsKLSAgICBz
dGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKLSAgICByZXR1cm4gKytjdXJy
ZW50U2NvcGU7Ci19Ci0KIERFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVu
ZGVyTGF5ZXIpOwogCi1SZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQotICAgIDogbV9pc1JlbmRlclZpZXdMYXll
cihyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCitSZW5kZXJMYXllcjo6
UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2Jq
ZWN0LCBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKKyAgICA6IG1fbGF5ZXJUeXBl
KGxheWVyVHlwZSkKKyAgICAsIG1faXNSZW5kZXJWaWV3TGF5ZXIocmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0LmlzUmVuZGVyVmlldygpKQogICAgICwgbV9mb3JjZWRTdGFja2luZ0NvbnRleHQocmVu
ZGVyZXJMYXllck1vZGVsT2JqZWN0LmlzTWVkaWEoKSkKICAgICAsIG1faXNOb3JtYWxGbG93T25s
eShmYWxzZSkKICAgICAsIG1faXNDU1NTdGFja2luZ0NvbnRleHQoZmFsc2UpCkBAIC0zMDQsMTkg
KzI5OSwxNSBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV96T3JkZXJMaXN0c0RpcnR5KGZh
bHNlKQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCiAgICAgLCBtX2hhZE5lZ2F0
aXZlWk9yZGVyTGlzdChmYWxzZSkKLSAgICAsIG1faW5SZXNpemVNb2RlKGZhbHNlKQotICAgICwg
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRh
bnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkKICAgICAsIG1f
cGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAgICwgbV9pbk92ZXJmbG93UmVsYXlv
dXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVlZHNOb3JtYWxSZXBhaW50KQogICAg
ICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1Zpc2libGVD
b250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0RpcnR5KGZhbHNl
KQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxzZSkKLSAgICAsIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0ZpeGVkSW50ZXJzZWN0aW5nVmlld3Bv
cnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZhbHNlKQogICAgICwgbV8zRFRyYW5z
Zm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCkBAIC0zMzAsMTUgKzMyMSw2IEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3QoZmFsc2UpCiAg
ICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFp
bmVkTm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICAsIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0g
ICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAg
ICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCi0gICAgLCBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fbGF5ZXJM
aXN0TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM1Myw1MyArMzM1LDQyIEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZs
b3dPbmx5KCkpOwogICAgIHNldElzQ1NTU3RhY2tpbmdDb250ZXh0KHNob3VsZEJlQ1NTU3RhY2tp
bmdDb250ZXh0KCkpOwogCi0gICAgbV9pc1NlbGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxm
UGFpbnRpbmdMYXllcigpOwotCi0gICAgaWYgKGlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Ny
b2xsaW5nU2NvcGUoKTsKKyAgICAvLyBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgaXMgaW5pdGlhbGl6
ZWQgaW4gUmVuZGVyTGF5ZXJTVkcvSFRNTCwgZXZlbiB0aG91Z2gKKyAgICAvLyBpdCBiZWxvbmdz
IHRvIFJlbmRlckxheWVyIC0tIHdlIGNhbm5vdCBjYWxsCisgICAgLy8gIm1faXNTZWxmUGFpbnRp
bmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsiCisgICAgLy8gaGVyZSwgaW4g
dGhlIGNvbnN0cnVjdG9yIC0tIHNpbmNlIHRoZSBSZW5kZXJMYXllclNWRy9IVE1MIGNsYXNzZXMg
YXJlbid0IGluaXRpYWxpemVkIHlldC4KIAogICAgIGlmICghcmVuZGVyZXIoKS5maXJzdENoaWxk
KCkpIHsKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7CiAgICAg
ICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgp
ID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0
b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUg
cmVjYWxjdWxhdGVkLgotICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1pl
cm8oKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24pOwotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJlbmRlckxheWVy
KCkKIHsKLSAgICBpZiAoaW5SZXNpemVNb2RlKCkpCi0gICAgICAgIHJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwotCi0gICAgQVNTRVJUKG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1v
dmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlm
Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAg
ICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24p
OwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0
cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVh
KCp0aGlzKTsKKyAgICBkZXN0cm95KCk7Cit9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3ko
KQoreworICAgIC8vIFJlbHlpbmcgb24gQysrIGJ1aWx0aW4gZGVzdHJ1Y3Rpb24gb3JkZXIgaXMg
ZGFuZ2Vyb3VzIGZvciBSZW5kZXJMYXllci9SZW5kZXJMYXllclNjcm9sbGFibGUsCisgICAgLy8g
c2luY2Ugc29tZSBmdW5jdGlvbiBjYWxscyBpbnZva2VkIGJ5IHRoZSBSZW5kZXJMYXllciBkZXN0
cnVjdG9yLCBvcGVyYXRlIG9uIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKyAgICAvLworICAgIC8v
IEZvciBleGFtcGxlLCB0aGUgY2FsbCB0byBjbGVhckJhY2tpbmcoKSBiZWxvdywgd2lsbCBpbnZv
a2UgdGhlIFJlbmRlckxheWVyQmFja2luZyBkZXN0cnVjdG9yLAorICAgIC8vIHdoaWNoIGNhbGxz
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycygpLiBUaGlz
IGluIHR1cm5zIHRyaWVzIHRvIGNhc3QKKyAgICAvLyB0aGUgJ21fb3duaW5nTGF5ZXInIGZyb20g
YSBSZW5kZXJMYXllciAtPiBSZW5kZXJMYXllclNjcm9sbGFibGUsIHRvIGdldCBhY2Nlc3MgdG8g
dGhlIFNjcm9sbGFibGVBcmVhLgorICAgIC8vCisgICAgLy8gSWYgd2UgbGV0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZSBkZXN0cnVjdCBpdHNlbGYsIGJlZm9yZSB0aGUgKGltcGxpY2l0KSBjYWxsIG9m
IHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yLAorICAgIC8vIGl0IHdpbGwgY3Jhc2guIFRoZSBm
aXggaXMgdG8gbW92ZSB0aGUgUmVuZGVyTGF5ZXIgZGVzdHJ1Y3RvciBpbnRvIGEgZGVkaWNhdGVk
IGRlc3Ryb3koKSBmdW5jdGlvbgorICAgIC8vIGFuZCBjYWxsIHRoYXQgZGVzdHJveSgpIGZ1bmN0
aW9uIGRpcmVjdGx5IGZyb20gdGhlIFJlbmRlckxheWVyQmFja2luZyBkZXN0cnVjdG9yLiBUaGlz
IHdheSB0aGUKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvYmplY3QgcmVtYWlucyB2YWxpZCBmb3Ig
dGhlIHdob2xlIHNjb3BlIG9mIHRoZSBkZXN0cnVjdG9yIC0+IHByb2JsZW0gc29sdmVkLgorICAg
IC8vCisgICAgLy8gU2luY2UgYWxsIGZ1bmN0aW9uIGNhbGxzIGludm9rZWQgYnkgdGhlIFJlbmRl
ckxheWVyIGRlc3RydWN0b3IsIGFyZSBwb3RlbnRpYWxseSBhZmZlY3RlZAorICAgIC8vIHRoZSBz
YWZlIHNvbHV0aW9uIGlzIHRvIHNpbXBseSBpbnZva2UgZGVzdHJveSgpIGZyb20gUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlIGRlc3RydWN0b3IuCisgICAgLy8gVGhlIG5leHQgY2FsbCB0byBkZXN0cm95
KCkgZnJvbSB0aGUgUmVuZGVyTGF5ZXIgZGVzdHJ1Y3RvciBpcyB0aGVuIGEgbm8tb3AgLSBhcyBk
ZXNpcmVkLgogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24o
KTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KICAg
ICBjbGVhckxheWVyRmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tp
bmcoKSkgewpAQCAtNDE4LDYgKzM4OSwyMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkK
ICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHJlbmRlcmVyKCku
cmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgfHwgIWZpcnN0Q2hpbGQoKSk7CiB9CiAKK1JlbmRl
ckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVMYXllcigpCit7CisgICAg
aWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcykpCisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCitjb25zdCBSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxl
TGF5ZXIoKSBjb25zdAoreworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMp
KQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6YWRkQ2hpbGQoUmVu
ZGVyTGF5ZXImIGNoaWxkLCBSZW5kZXJMYXllciogYmVmb3JlQ2hpbGQpCiB7CiAgICAgUmVuZGVy
TGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cHJldmlvdXNT
aWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTkzNSw3ICs5MjAsMTAgQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdT
dWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRl
ckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25z
RmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigmZmxhZ3MpOwotICAgIGFw
cGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHRoaXMtPnNjcm9sbGFibGVMYXllcigpOworICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICBnZW9tZXRy
eU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CkBAIC05NDMsNyAr
OTMxLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVhciBvdXIgY2FjaGVk
IGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAgaWYg
KGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYgc2Ny
b2xsYWJsZUxheWVyLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6
ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAg
b2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNv
bHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk1Miw3ICs5NDAsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlN
YXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9y
IG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNldEZy
b21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAg
cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5k
ZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVzY2VuZGFu
dERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDI5LDEzICsxMDE3LDggQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBP
cHRpb25TZXQKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFw
LCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93
IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsK
LSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0
IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIg
JiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
dXBkYXRlTWFycXVlZSgpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQo
KSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBj
b21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTE1
LDkyICsxMDk4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAg
IHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBB
U1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3Jv
bGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1z
KTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jt
cyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0K
LSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9m
IHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmll
d3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dD
bGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5
TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21l
IGNvcm5lciBjYXNlcyB3aGVyZQotICAgIC8vIHRoZXNlIGZsYWdzIGFyZSBzdGlsbCBkaXJ0eS4g
VXBkYXRlIHNvIHRoYXQgdGhlIGNoZWNrIGJlbG93IGlzIHZhbGlkLgotICAgIHVwZGF0ZURlc2Nl
bmRhbnREZXBlbmRlbnRGbGFncygpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBubyB2aXNpYmxlIGNv
bnRlbnQgYW5kIG5vIHZpc2libGUgZGVzY2VuZGFudHMsIHRoZXJlIGlzIG5vIHBvaW50IHJlY29t
cHV0aW5nCi0gICAgLy8gb3VyIHJlY3RhbmdsZXMgYXMgdGhleSB3aWxsIGJlIGVtcHR5LiBJZiBv
dXIgdmlzaWJpbGl0eSBjaGFuZ2VzLCB3ZSBhcmUgZXhwZWN0ZWQgdG8KLSAgICAvLyByZWNvbXB1
dGUgYWxsIG91ciBwb3NpdGlvbnMgYW55d2F5LgotICAgIGlmICghbV9oYXNWaXNpYmxlRGVzY2Vu
ZGFudCAmJiAhbV9oYXNWaXNpYmxlQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9v
bCBwb3NpdGlvbkNoYW5nZWQgPSB1cGRhdGVMYXllclBvc2l0aW9uKCk7Ci0gICAgaWYgKHBvc2l0
aW9uQ2hhbmdlZCkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc0NoYW5nZWRBbmNlc3Rvcik7Ci0KLSAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBIYXNDaGFuZ2VkQW5jZXN0b3IsIEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IsIElzT3ZlcmZsb3dTY3JvbGwgfSkpCi0gICAgICAgIGNs
ZWFyQ2xpcFJlY3RzKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLmhhc1ZpZXdwb3J0
Q29uc3RyYWluZWRQb3NpdGlvbigpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3Rvcik7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0Ns
aXAoKSkKLSAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAp
OwotICAgIAotICAgIGJvb2wgc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyA9IChmbGFncy5jb250
YWlucyhIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKSB8fCBmbGFncy5jb250YWlu
c0FsbCh7IElzT3ZlcmZsb3dTY3JvbGwsIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAg
fSkpICYmIGlzU2VsZlBhaW50aW5nTGF5ZXIoKTsKLSAgICBib29sIGlzVmlzdWFsbHlFbXB0eSA9
ICFpc1Zpc3VhbGx5Tm9uRW1wdHkoKTsKLSAgICBib29sIHNob3VsZFB1c2hBbmRQb3BNYXBwaW5n
cyA9IGdlb21ldHJ5TWFwICYmICgoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cyAmJiAhaXNWaXN1
YWxseUVtcHR5KSB8fCBmaXJzdENoaWxkKCkpOwotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFw
cGluZ3MpCi0gICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMs
IHBhcmVudCgpKTsKLQotICAgIGlmIChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzKSB7Ci0gICAg
ICAgIC8vIFdoZW4gc2Nyb2xsaW5nLCB3ZSBkb24ndCBjb21wdXRlIHJlcGFpbnQgcmVjdHMgZm9y
IHZpc3VhbGx5IG5vbi1lbXB0eSBsYXllcnMuCi0gICAgICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkp
Ci0gICAgICAgICAgICBjbGVhclJlcGFpbnRSZWN0cygpOwotICAgICAgICBlbHNlIC8vIEZJWE1F
OiBXZSBjb3VsZCB0cmFjayB0aGUgcmVwYWludCBjb250YWluZXIgYXMgd2Ugd2FsayBkb3duIHRo
ZSB0cmVlLgotICAgICAgICAgICAgY29tcHV0ZVJlcGFpbnRSZWN0cyhyZW5kZXJlcigpLmNvbnRh
aW5lckZvclJlcGFpbnQoKSwgZ2VvbWV0cnlNYXApOwotICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLnBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgLy8gV2hl
biBTY3JvbGxWaWV3J3MgbV9wYWludHNFbnRpcmVDb250ZW50cyBmbGFnIGZsaXBzIGR1ZSB0byBs
YXllciBiYWNraW5nIGNoYW5nZXMsIHRoZSByZXBhaW50IGFyZWEgdHJhbnNpdGlvbnMgZnJvbQot
ICAgICAgICAvLyB2aXN1YWwgdG8gbGF5b3V0IG92ZXJmbG93LiBXaGVuIHRoaXMgaGFwcGVucyB0
aGUgY2FjaGVkIHJlcGFpbnQgcmVjdHMgYmVjb21lIGludmFsaWQgYW5kIHRoZXkgbmVlZCB0byBi
ZSByZWNvbXB1dGVkIChzZWUgd2Via2l0Lm9yZy9iLzE4ODEyMSkuCi0gICAgICAgIC8vIENoZWNr
IHRoYXQgb3VyIGNhY2hlZCByZWN0cyBhcmUgY29ycmVjdC4KLSAgICAgICAgQVNTRVJUKCFyZW5k
ZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91
dFJlY3RzKCkubV9yZXBhaW50UmVjdCA9PSByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAgICAgIEFT
U0VSVCghcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJl
cGFpbnRMYXlvdXRSZWN0cygpLm1fb3V0bGluZUJveCA9PSByZW5kZXJlcigpLm91dGxpbmVCb3Vu
ZHNGb3JSZXBhaW50KHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpKSk7Ci0gICAgfQot
ICAgIAotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKLQotICAgIC8vIFdlIGRv
bid0IHVwZGF0ZSBvdXIgcmVmbGVjdGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3
aGljaCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNpemUoKQotICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1
cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhl
IGxheWVyIHBvc2l0aW9uIHdhcwotICAgIC8vIHVwZGF0ZWQgYWJvdmUuCi0KLSAgICBpZiAobV9t
YXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3Vw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAg
ICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0
aW9uOwotICAgIH0KLQotICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCi0gICAgICAg
IGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwotCi0gICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJz
KCk7Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX0NPTVBPU0lUSU5HKQogCiB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVCbGVuZE1vZGUoKQpAQCAtMTY5MSwzNCArMTU4OCwxMCBAQCBib29sIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Zs
YWc+KiBmbGFncwogICAgICAgICAgICAgbG9jYWxQb2ludCAtPSBkb3duY2FzdDxSZW5kZXJUYWJs
ZVJvdz4oKmFuY2VzdG9yKS50b3BMZWZ0TG9jYXRpb25PZmZzZXQoKTsKICAgICAgICAgfQogICAg
IH0KLSAgICAKLSAgICAvLyBTdWJ0cmFjdCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KLSAg
ICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVudDsKLSAgICBpZiAocmVuZGVyZXIoKS5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRpb25lZFBhcmVudCA9IGVuY2xvc2luZ0FuY2Vz
dG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkpKSkgewotICAgICAg
ICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5n
IHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgotICAgICAgICBpZiAocG9zaXRpb25l
ZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbFBvc2l0aW9uKCkp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaXNJ
bkZsb3dQb3NpdGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5y
ZW5kZXJlcigpKSkgewotICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxS
ZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxv
d1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAg
ICAgICAgICAgbG9jYWxQb2ludCArPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NF
UlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKLSAgICAgICAg
bV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsK
LSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBv
c2l0aW9uKCkpOwotCi0gICAgICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxp
bmdTY29wZSgpKTsKLSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7Ci0gICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKSkgewotICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdT
Y29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkK
LSAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29w
ZSgpOwotICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKLSAgICAgICAgbV9jb250
ZW50c1Njcm9sbGluZ1Njb3BlID0gbV9ib3hTY3JvbGxpbmdTY29wZTsKKyAgICAvLyBTdWJ0cmFj
dCBvdXIgcGFyZW50J3Mgc2Nyb2xsIG9mZnNldC4KKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXMobG9jYWxQb2ludCk7
CiAKICAgICBib29sIHBvc2l0aW9uT3JPZmZzZXRDaGFuZ2VkID0gZmFsc2U7CiAgICAgaWYgKHJl
bmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlvbmVkKCkpIHsKQEAgLTE4NDAsODYgKzE3MTMsMjggQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQot
ewotICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5v
d25lckVsZW1lbnQoKTsKLSAgICBpZiAoIW93bmVyRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvKiBvd25lclJlbmRlcmVyID0gb3duZXJFbGVtZW50LT5yZW5kZXJl
cigpOwotICAgIGlmICghb3duZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKLX0KLQotc3RhdGlj
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQor
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBp
ZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFp
bmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNy
b3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihs
YXllcik7Ci19Ci0KLVJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVz
IGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAotewotICAgIFJlbmRlclRyZWVNdXRhdGlvbkRp
c2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2NvcGU7Ci0KLSAgICBh
dXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIp
IHsKLSAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkgJiYgZG93
bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9sbGVkQW5kSGFzU2Ny
b2xsYWJsZUFyZWEoKTsKLSAgICB9OwotCi0gICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQot
ICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwotICAgIAotICAg
IGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRo
aXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3Np
bmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykp
IHsKLSAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCi0gICAg
ICAgICAgICByZXR1cm4gbmV4dExheWVyOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
IGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9s
bEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
RnJhbWVSZW5kZXJMYXllcigpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgY29uc3QKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRp
ZgorICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVs
ZW1lbnQoKTsKKyAgICBpZiAoIW93bmVyRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVy
RWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIW93bmVyUmVuZGVyZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9y
UGVyZm9ybWFuY2VUZXN0aW5nKCk7CisgICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2lu
Z0xheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNm
b3JtZWRBbmNlc3RvcigpIGNvbnN0CkBAIC0yNDQ3LDQ2NCArMjI2MiwxNDQgQEAgTGF5b3V0U2l6
ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFuY2VzdG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNl
c3RvckxheWVyLCBDb2wKICAgICByZXR1cm4gdG9MYXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29v
cmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Citz
dGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJh
bWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7
Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3lu
Y092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYm
IHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gp
Ci0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIo
KS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRp
bmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGZhbHNlOwotI2VuZGlmCi19CisgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhw
bGljaXRseSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCisgICAgaWYgKGZyYW1lRWxlbWVu
dEJhc2UgJiYgZnJhbWVFbGVtZW50QmFzZS0+c2Nyb2xsaW5nTW9kZSgpICE9IFNjcm9sbGJhckFs
d2F5c09mZikKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKLWJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50JiB0b3VjaEV2ZW50KQotewotICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQg
c2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0
LgotICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgLy8gSWYg
c2Nyb2xsYmFycyBhcmUgZm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBv
YnZpb3VzbHkgYmUgaWdub3JlZC4KKyAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2Vy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKKyAgICAvLyBGb3JiaWQgYXV0b3Njcm9sbHMg
d2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJtaXRzIG90aGVyIHByb2dyYW1tYXRpYyBz
Y3JvbGxzLAorICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0byBhbiBhbmNob3IuCisgICAgcmV0dXJu
ICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygp
OwogfQogCi12b2lkIFJlbmRlckxheWVyOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCkKK2Jvb2wgUmVuZGVyTGF5ZXI6OmFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25z
dAogewotICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxl
bWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZyA9IHRydWU7Ci19CisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCi17Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1l
bnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAvLyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93
IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3Bl
cnR5LgorICAgIC8vIEZJWE1FOiBJcyB0aGlzIHN0aWxsIG5lZWRlZD8gSXQgdXNlZCB0byBiZSBy
ZWxldmFudCBmb3IgU2FmYXJpIFJTUy4KKyAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSAmJiAh
cmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLnJlbW92ZVRvdWNo
RXZlbnRIYW5kbGVyKCpyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgbV9yZWdpc3RlcmVkQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKLX0KLSNlbmRpZiAvLyBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIEFTU0VSVChib3gpOyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xpcCBzZXQu
CiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMu
Ci1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIo
KTsKLX0KKyAgICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3Jv
bGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJl
IGlzIG1pc2xlYWRpbmc7IHRoaXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUg
b3ZlcmZsb3csCisgICAgICAgIC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNv
bnRyb2wuCisgICAgICAgIHJldHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQo
KTsKKyAgICB9CiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFk
ZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXll
cigqdGhpcyk7CisgICAgLy8gUHJvZ3JhbW1hdGljIHNjcm9sbHMgY2FuIHNjcm9sbCBvdmVyZmxv
dzpoaWRkZW4uCisgICAgcmV0dXJuIGJveC0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgYm94
LT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVk
U2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRl
Rml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJiBvcHRpb25zKQogewotICAg
IC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9t
eHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJv
d3Nlci54bWwjODU2LgotICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKLQotICAgIGlu
dCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYg
KGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8
aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVs
dGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7Ci0KLSAgICByZXR1cm4gYWRqdXN0
ZWREZWx0YTsKLX0KKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkxh
eWVyICIgPDwgdGhpcyA8PCAiIHNjcm9sbFJlY3RUb1Zpc2libGUgIiA8PCBhYnNvbHV0ZVJlY3Qp
OwogCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRT
aXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRl
bHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Cisg
ICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVSZWN0OworICAgIEZyYW1lVmlldyYgZnJh
bWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisgICAgYXV0byogcGFyZW50
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
czo6Tm8pOworICAgIGJvb2wgYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgPSAhcmVuZGVyZXIoKS5m
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7CiAKLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQp
Ci17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBv
dXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRo
ZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxh
c3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3Vz
TW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisgICAgaWYgKGFsbG93c0N1
cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0aGlzLT5z
Y3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CiAKLSAg
ICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50Owor
ICAgICAgICAvLyBEb24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQg
aXMgcmVzdHJpY3RlZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgICAg
ICAvLyBUaGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0
aGUgc2xpZGVyIGluIFNhZmFyaSBSU1MuCisgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7CisgICAgICAgIEFTU0VSVChib3gpOworICAgICAgICBMYXlvdXRSZWN0IGxvY2FsRXhw
b3NlUmVjdChib3gtPmFic29sdXRlVG9Mb2NhbFF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChhYnNv
bHV0ZVJlY3QpKSkuYm91bmRpbmdCb3goKSk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIt
PnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAg
ICAgLy8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94
LCB0aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0Cisg
ICAgICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBT
byB0aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9z
aXRpb24gdG9vLgorICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2lu
dCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKKyAgICAg
ICAgfQorICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xp
ZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3QgcmV2
ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBp
bnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgIGlmIChh
YnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0
IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAgZGVsdGEu
c2V0V2lkdGgoMCk7Ci0gICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6
bm9QYW5TY3JvbGxSYWRpdXMpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKyAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPmNsYW1w
U2Nyb2xsT2Zmc2V0KHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUo
cm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgICAgICBpZiAoY2xh
bXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpIHx8IHNj
cm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
b2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAg
ICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzICYmIHVzZVNtb290aFNjcm9sbGlu
ZyhvcHRpb25zLmJlaGF2aW9yLCBib3gtPmVsZW1lbnQoKSkpCisgICAgICAgICAgICAgICAgYW5p
bWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOworICAgICAgICAgICAgSW50U2l6ZSBzY3Jv
bGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNl
dDsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJl
bmNlKTsKKyAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zv
cm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXBhcmVudExh
eWVyKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCi0gICAgc2Nyb2xsQnlSZWN1cnNp
dmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19CisgICAgICAgIGlmIChvd25lckVs
ZW1lbnQgJiYgb3duZXJFbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBIVE1MRnJh
bWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSA9IG51bGxwdHI7CiAKLS8vIEZJWE1FOiB1
bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9s
bGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPigq
b3duZXJFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBmcmFtZUVsZW1lbnRCYXNlID0gZG93bmNh
c3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCk7CiAKLSAgICBib29sIHJlc3Ry
aWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQot
ICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5
bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKyAgICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnRB
bmRWaWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVudEJhc2UsIGZyYW1lVmlldykpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3Qg
dGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KKyAgICAgICAgICAgICAgICBT
Y3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7
CiAKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5
TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZz
ZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJl
YSA9IHRoaXM7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmll
dy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3NlUmVjdCA9IGdldFJl
Y3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5h
bGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0
IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0
byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxP
ZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZz
ZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xs
T2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgICAgIEludFBvaW50IHNjcm9sbFBv
c2l0aW9uKHJvdW5kZWRJbnRQb2ludChleHBvc2VSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAg
ICAgICAgICAvLyBBZGp1c3Qgb2Zmc2V0cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFsbG93
YWJsZSByYW5nZS4KKyAgICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0
aW9uLmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBJbnRQb2ludChmcmFtZVZpZXcuY29u
dGVudHNTaXplKCkpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBj
b250ZW50RG9jdW1lbnQoKS0+c2Nyb2xsaW5nRWxlbWVudCgpPworICAgICAgICAgICAgICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDU5CisgICAg
ICAgICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6Tm87
CisgICAgICAgICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzCisgICAgICAgICAg
ICAgICAgICAgICYmIG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgdXNlU21vb3RoU2Nyb2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIG93bmVyRWxl
bWVudC0+Y29udGVudERvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOworICAgICAgICAgICAgICAg
IGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKIAotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9u
IGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRv
ZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0
IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAo
c2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zaG91bGRBbGxv
d0Nyb3NzT3JpZ2luU2Nyb2xsaW5nID09IFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6
OlllcyB8fCBmcmFtZVZpZXcuc2FmZVRvUHJvcGFnYXRlU2Nyb2xsVG9QYXJlbnQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBvd25lckVsZW1lbnQt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUxh
eWVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBzY3JvbGxh
YmxlTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3Jk
aW5hdGUgc3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgorICAgICAgICAgICAg
ICAgICAgICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRl
bnRzKGVuY2xvc2luZ0ludFJlY3QobmV3UmVjdCkpOworICAgICAgICAgICAgICAgICAgICBpbnNp
ZGVGaXhlZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0
aGlzIDxpZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFs
TW9kZSA9PSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1l
Vmlldy5mcmFtZSgpLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdl
IHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9
Ci19CisgICAgICAgICAgICBhdXRvIG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9
IGZyYW1lVmlldy5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6
c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3Np
dGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOwotfQor
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKTsKKyNlbHNlCisgICAgICAgICAgICAv
LyBGSVhNRTogQ29udGVudEluc2V0cyBzaG91bGQgYmUgdGFrZW4gY2FyZSBvZiBpbiBVSSBwcm9j
ZXNzIHNpZGUuIHdlYmtpdC5vcmcvYi8xOTk2ODIKKyAgICAgICAgICAgIC8vIFRvIGRvIHRoYXQs
IGdldFJlY3RUb0V4cG9zZSBuZWVkcyB0byByZXR1cm4gdGhlIGFkZGl0aW9uYWwgc2Nyb2xsaW5n
IHRvIGRvIGJleW9uZCBjb250ZW50IHJlY3QuCisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdS
ZWN0ID0gZnJhbWVWaWV3LnZpZXdSZWN0RXhwYW5kZWRCeUNvbnRlbnRJbnNldHMoKTsKIAotdm9p
ZCBSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17
Ci0gICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgLy8gRklYTUU6IHdlYmtpdC5vcmcvYi8xOTk2ODMgRnJhbWVWaWV3Ojp2aXNp
YmxlQ29udGVudFJlY3QgaXMgd3Jvbmcgd2hlbiBjb250ZW50IGluc2V0cyBhcmUgcHJlc2VudAor
ICAgICAgICAgICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXcuc2Nyb2xsUG9zaXRpb25G
cm9tT2Zmc2V0KFNjcm9sbFBvc2l0aW9uKGZyYW1lVmlldy50b3RhbENvbnRlbnRzU2l6ZSgpIC0g
Zmxvb3JlZEludFNpemUodmlld1JlY3Quc2l6ZSgpKSkpOwogCi0gICAgc2Nyb2xsVG9PZmZzZXQo
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVl
KCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24u
eSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24o
aW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1f
c2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKLSAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlz
IDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAg
aWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwot
I2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNjcm9s
bEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5p
bWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLQot
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Ny
b2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9m
ZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9
IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlw
ZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlv
bkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZz
ZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlv
clN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJl
dmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNTY3Jv
bGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShz
Y3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGlu
ZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkg
OiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0
aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zm
c2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
ICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1
c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIp
IDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOwot
ICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQg
dGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBv
dmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29k
ZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1v
dmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRv
SW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAgICAg
IGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChzY3Jv
bGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAgIHNj
cm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9m
ZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRp
b24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNh
cmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOwot
ICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zm
c2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9sbFBv
c2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09
IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBGSVhN
RTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5n
ZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8gVGhl
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4g
dGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
c2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBj
aGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1w
YWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBv
c2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUg
bWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhh
cyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBv
c2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewot
ICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdo
ZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAgICAg
ICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwg
d2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBpbiB0
aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRh
dGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29t
cGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAg
ICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQotICAg
ICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBv
ZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9y
ZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZy
b20gdGhlIHBhaW50LW9yZGVyIHBhcmVudC4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFp
bnRQYXJlbnQgPSBwYWludE9yZGVyUGFyZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50
UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25z
LCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgot
ICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVu
dFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJl
cigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJh
bWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RG
b3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1
YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAg
IGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
ZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwt
cmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKLXsKLSAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KLSAg
ICBpZiAoZnJhbWVFbGVtZW50QmFzZSAmJiBmcmFtZUVsZW1lbnRCYXNlLT5zY3JvbGxpbmdNb2Rl
KCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQgc2Nyb2xscyBzaG91
bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCi0gICAgaWYgKGZyYW1lVmlldy53YXNTY3JvbGxlZEJ5
VXNlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3JiaWQgYXV0b3Njcm9s
bHMgd2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJtaXRzIG90aGVyIHByb2dyYW1tYXRp
YyBzY3JvbGxzLAotICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0byBhbiBhbmNob3IuCi0gICAgcmV0
dXJuICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVz
cygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjphbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3QK
LXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5
ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHku
Ci0gICAgLy8gRklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2VkIHRvIGJlIHJlbGV2
YW50IGZvciBTYWZhcmkgUlNTLgotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpICYmICFyZW5k
ZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFT
U0VSVChib3gpOyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xpcCBzZXQuCi0KLSAg
ICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dy
ZXNzKCkpIHsKLSAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJlIGlzIG1pc2xl
YWRpbmc7IHRoaXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUgb3ZlcmZsb3cs
Ci0gICAgICAgIC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNvbnRyb2wuCi0g
ICAgICAgIHJldHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKTsKLSAgICB9
Ci0KLSAgICAvLyBQcm9ncmFtbWF0aWMgc2Nyb2xscyBjYW4gc2Nyb2xsIG92ZXJmbG93OmhpZGRl
bi4KLSAgICByZXR1cm4gYm94LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBib3gtPmhhc1Zl
cnRpY2FsT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlz
aWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJiBvcHRpb25zKQotewotICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiTGF5ZXIgIiA8PCB0aGlzIDw8ICIgc2Nyb2xs
UmVjdFRvVmlzaWJsZSAiIDw8IGFic29sdXRlUmVjdCk7Ci0KLSAgICBMYXlvdXRSZWN0IG5ld1Jl
Y3QgPSBhYnNvbHV0ZVJlY3Q7Ci0gICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0Nv
bnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwotICAg
IGJvb2wgYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgPSAhcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7Ci0KLSAgICBpZiAoYWxsb3dzQ3VycmVu
dFNjcm9sbCgpKSB7Ci0gICAgICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZs
b3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJv
cGVydHkuCi0gICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRl
eHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KLSAgICAgICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICAgICAgQVNTRVJUKGJveCk7Ci0gICAgICAgIExheW91
dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1YWQo
RmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAg
Ly8gRm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94LCB0
aGUgc2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0Ci0gICAg
ICAgICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0
aGUgeCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRp
b24gdG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgt
dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0
UmVjdCBsYXllckJvdW5kcygwX2x1LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xp
ZW50SGVpZ2h0KCkpOwotICAgICAgICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9F
eHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMu
YWxpZ25YLCBvcHRpb25zLmFsaWduWSk7Ci0KLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRT
Y3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6
ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChj
bGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhh
dmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewot
ICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgp
OwotICAgICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6
Tm87Ci0gICAgICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgJiYgdXNlU21vb3Ro
U2Nyb2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIGJveC0+ZWxlbWVudCgpKSkKLSAgICAgICAgICAg
ICAgICBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7Ci0gICAgICAgICAgICBzZXRTY3Jv
bGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCks
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1h
dGVkKTsKLSAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1w
ZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0gICAgICAgICAgICBsb2NhbEV4cG9z
ZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7Ci0gICAgICAgICAgICBuZXdSZWN0
ID0gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVj
dChsb2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKCFwYXJlbnRMYXllcikgewotICAgICAgICBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVs
ZW1lbnQoKTsKLQotICAgICAgICBpZiAob3duZXJFbGVtZW50ICYmIG93bmVyRWxlbWVudC0+cmVu
ZGVyZXIoKSkgewotICAgICAgICAgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVu
dEJhc2UgPSBudWxscHRyOwotCi0gICAgICAgICAgICBpZiAoaXM8SFRNTEZyYW1lRWxlbWVudEJh
c2U+KCpvd25lckVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGZyYW1lRWxlbWVudEJhc2UgPSBk
b3duY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZT4ob3duZXJFbGVtZW50KTsKLQotICAgICAgICAg
ICAgaWYgKGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoZnJhbWVFbGVtZW50QmFzZSwg
ZnJhbWVWaWV3KSkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVz
IHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20gYmVpbmcgZGVzdHJveWVk
LgotICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNj
cmlwdERpc2FsbG93ZWRTY29wZTsKLQotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1Jl
Y3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwotICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3NlUmVjdCA9IGdldFJlY3RU
b0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGln
blgsIG9wdGlvbnMuYWxpZ25ZKTsKLQotICAgICAgICAgICAgICAgIEludFBvaW50IHNjcm9sbFBv
c2l0aW9uKHJvdW5kZWRJbnRQb2ludChleHBvc2VSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICAgICAg
ICAgICAgICAvLyBBZGp1c3Qgb2Zmc2V0cyBpZiB0aGV5J3JlIG91dHNpZGUgb2YgdGhlIGFsbG93
YWJsZSByYW5nZS4KLSAgICAgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0
aW9uLmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBJbnRQb2ludChmcmFtZVZpZXcuY29u
dGVudHNTaXplKCkpKTsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHVzZSBj
b250ZW50RG9jdW1lbnQoKS0+c2Nyb2xsaW5nRWxlbWVudCgpPwotICAgICAgICAgICAgICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1MDU5Ci0gICAg
ICAgICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6Tm87
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG9zY3JvbGxOb3RJblByb2dyZXNzCi0gICAgICAgICAg
ICAgICAgICAgICYmIG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgdXNlU21vb3RoU2Nyb2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIG93bmVyRWxl
bWVudC0+Y29udGVudERvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAgICAg
ICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAgICAg
IGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLQotICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNo
b3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxkQWxsb3dDcm9zc09yaWdpblNj
cm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdhdGVTY3JvbGxUb1BhcmVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdMYXllciA9IG93bmVy
RWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudExheWVyID0gZW5jbG9zaW5nTGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVM
YXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBj
b29yZGluYXRlIHNwYWNlIG9mIHRoZSBwYXJlbnQgZnJhbWUncyBkb2N1bWVudC4KLSAgICAgICAg
ICAgICAgICAgICAgbmV3UmVjdCA9IGZyYW1lVmlldy5jb250ZW50c1RvQ29udGFpbmluZ1ZpZXdD
b250ZW50cyhlbmNsb3NpbmdJbnRSZWN0KG5ld1JlY3QpKTsKLSAgICAgICAgICAgICAgICAgICAg
aW5zaWRlRml4ZWQgPSBmYWxzZTsgLy8gRklYTUU6IGlkZWFsbHkgbmVlZCB0byBkZXRlcm1pbmUg
aWYgdGhpcyA8aWZyYW1lPiBpcyBpbnNpZGUgcG9zaXRpb246Zml4ZWQuCi0gICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVyID0gbnVsbHB0cjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLnJl
dmVhbE1vZGUgPT0gU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsVXBUb01haW5GcmFtZSAmJiBm
cmFtZVZpZXcuZnJhbWUoKS5pc01haW5GcmFtZSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICAgICAgYXV0byBtaW5TY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5taW5pbXVt
U2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGF1dG8gbWF4U2Nyb2xsUG9zaXRpb24gPSBm
cmFtZVZpZXcubWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJs
ZUNvbnRlbnRSZWN0KCk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gRklYTUU6IENvbnRlbnRJbnNl
dHMgc2hvdWxkIGJlIHRha2VuIGNhcmUgb2YgaW4gVUkgcHJvY2VzcyBzaWRlLiB3ZWJraXQub3Jn
L2IvMTk5NjgyCi0gICAgICAgICAgICAvLyBUbyBkbyB0aGF0LCBnZXRSZWN0VG9FeHBvc2UgbmVl
ZHMgdG8gcmV0dXJuIHRoZSBhZGRpdGlvbmFsIHNjcm9sbGluZyB0byBkbyBiZXlvbmQgY29udGVu
dCByZWN0LgotICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aWV3
UmVjdEV4cGFuZGVkQnlDb250ZW50SW5zZXRzKCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiB3
ZWJraXQub3JnL2IvMTk5NjgzIEZyYW1lVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0IGlzIHdyb25n
IHdoZW4gY29udGVudCBpbnNldHMgYXJlIHByZXNlbnQKLSAgICAgICAgICAgIG1heFNjcm9sbFBv
c2l0aW9uID0gZnJhbWVWaWV3LnNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChTY3JvbGxQb3NpdGlv
bihmcmFtZVZpZXcudG90YWxDb250ZW50c1NpemUoKSAtIGZsb29yZWRJbnRTaXplKHZpZXdSZWN0
LnNpemUoKSkpKTsKLQotICAgICAgICAgICAgYXV0byBjb250ZW50SW5zZXRzID0gcGFnZSgpLmNv
bnRlbnRJbnNldHMoKTsKLSAgICAgICAgICAgIG1pblNjcm9sbFBvc2l0aW9uLm1vdmUoLWNvbnRl
bnRJbnNldHMubGVmdCgpLCAtY29udGVudEluc2V0cy50b3AoKSk7Ci0gICAgICAgICAgICBtYXhT
Y3JvbGxQb3NpdGlvbi5tb3ZlKGNvbnRlbnRJbnNldHMucmlnaHQoKSwgY29udGVudEluc2V0cy5i
b3R0b20oKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIC8vIE1vdmUgdGhlIHRhcmdldCByZWN0IGlu
dG8gInNjcm9sbFZpZXcgY29udGVudHMiIGNvb3JkaW5hdGVzLgotICAgICAgICAgICAgTGF5b3V0
UmVjdCB0YXJnZXRSZWN0ID0gYWJzb2x1dGVSZWN0OwotICAgICAgICAgICAgdGFyZ2V0UmVjdC5t
b3ZlKDAsIGZyYW1lVmlldy5oZWFkZXJIZWlnaHQoKSk7CisgICAgICAgICAgICBhdXRvIGNvbnRl
bnRJbnNldHMgPSBwYWdlKCkuY29udGVudEluc2V0cygpOworICAgICAgICAgICAgbWluU2Nyb2xs
UG9zaXRpb24ubW92ZSgtY29udGVudEluc2V0cy5sZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgp
KTsKKyAgICAgICAgICAgIG1heFNjcm9sbFBvc2l0aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdo
dCgpLCBjb250ZW50SW5zZXRzLmJvdHRvbSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgLy8gTW92
ZSB0aGUgdGFyZ2V0IHJlY3QgaW50byAic2Nyb2xsVmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMu
CisgICAgICAgICAgICBMYXlvdXRSZWN0IHRhcmdldFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CisgICAg
ICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoMCwgZnJhbWVWaWV3LmhlYWRlckhlaWdodCgpKTsKIAog
ICAgICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdS
ZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxp
Z25ZKTsKICAgICAgICAgICAgIC8vIEF2b2lkIHNjcm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1
ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9uKCkgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBz
Y3JvbGwKQEAgLTI5MzEsMjMgKzI0MjYsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0
VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAg
ICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNpZGVGaXhl
ZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBv
c2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBn
dWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVk
Ci0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMg
ZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9y
ID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkgewotICAg
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAg
Y29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlw
ZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkg
ZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4K
LSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRV
cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAgICAgY29t
cG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6
T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29u
c3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3Qs
IGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBT
Y3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwpAQCAtMzAyNiwxMTU1ICsyNTA0LDk3
IEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRS
ZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIC8vIElmIHRoZSByZWN0IGlzIGJp
Z2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIGRvbid0IGJvdGhlciB0cnlpbmcgdG8gY2VudGVy
LiBPdGhlciBhbGlnbm1lbnRzIHdpbGwgd29yay4KICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFs
aWdubWVudDo6Z2V0VmlzaWJsZUJlaGF2aW9yKGFsaWduWSk7CiAgICAgICAgIGlmIChzY3JvbGxZ
ID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQotICAgICAgICAgICAg
c2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6Ok5vU2Nyb2xsOwotICAgIH0gZWxz
ZSBpZiAoaW50ZXJzZWN0SGVpZ2h0ID4gMCkKLSAgICAgICAgLy8gSWYgdGhlIHJlY3RhbmdsZSBp
cyBwYXJ0aWFsbHkgdmlzaWJsZSwgdXNlIHRoZSBzcGVjaWZpZWQgcGFydGlhbCBiZWhhdmlvcgot
ICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRQYXJ0aWFsQmVoYXZpb3IoYWxp
Z25ZKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OmdldEhp
ZGRlbkJlaGF2aW9yKGFsaWduWSk7Ci0gICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFsaWduIHRv
IHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIGRvd24KLSAg
ICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJs
ZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KLSAgICBpZiAoc2Nyb2xsWSA9PSBT
Y3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpBbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVj
dC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZp
c2libGVSZWN0LmhlaWdodCgpKQotICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6QWxpZ25Cb3R0b207Ci0KLSAgICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29t
cHV0ZSB0aGUgWSBjb29yZGluYXRlLgotICAgIExheW91dFVuaXQgeTsKLSAgICBpZiAoc2Nyb2xs
WSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9sbCkKLSAgICAgICAgeSA9IHZp
c2libGVSZWN0LnkoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6
QmVoYXZpb3I6OkFsaWduQm90dG9tKQotICAgICAgICB5ID0gZXhwb3NlUmVjdC5tYXhZKCkgLSB2
aXNpYmxlUmVjdC5oZWlnaHQoKTsKLSAgICBlbHNlIGlmIChzY3JvbGxZID09IFNjcm9sbEFsaWdu
bWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQotICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCkg
KyAoZXhwb3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpKSAvIDI7Ci0gICAg
ZWxzZQotICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCk7Ci0KLSAgICByZXR1cm4gTGF5b3V0UmVj
dChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKLXsK
LSAgICBJbnRQb2ludCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7Ci0gICAgc2Ny
b2xsUmVjdFRvVmlzaWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlv
dXRTaXplKDEsIDEpKSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpjYW5SZXNpemUoKSBjb25zdAotewotICAgIC8vIFdlIG5l
ZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJhbWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCi0g
ICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhvd2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNs
aXAgdGhlaXIgY29udGVudHMsIHNvCi0gICAgLy8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0
aGVtIGFsc28uCi0gICAgcmV0dXJuIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJl
bmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmZzZXQpCi17Ci0g
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHBvc3NpYmxlIG9uIGdlbmVyYXRlZCBjb250ZW50
IGJ1dCBpcyBub3QgcmlnaHQgbm93LgotICAgIGlmICghaW5SZXNpemVNb2RlKCkgfHwgIWNhblJl
c2l6ZSgpIHx8ICFyZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gRklYTUU6IFRoZSBvbmx5IGNhc2Ugd2hlcmUgcmVuZGVyZXItPmVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSAhPSByZW5kZXJlciBpcyB3aXRoIGNvbnRpbnVhdGlvbnMuIERvIHRoZXkgbWF0dGVyIGhl
cmU/Ci0gICAgLy8gSWYgdGhleSBkbyBpdCB3b3VsZCBzdGlsbCBiZSBiZXR0ZXIgdG8gZGVhbCB3
aXRoIHRoZW0gZXhwbGljaXRseS4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5l
bGVtZW50KCk7Ci0gICAgYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJCb3g+KGVsZW1l
bnQtPnJlbmRlcmVyKCkpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9j
dW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50LmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLm1vdXNl
UHJlc3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCB6b29tRmFjdG9yID0gcmVu
ZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgYXV0byBhYnNvbHV0ZVBvaW50
ID0gZG9jdW1lbnQudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2dC5wb3NpdGlvbigpKTsKLSAg
ICBhdXRvIGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoYWJzb2x1dGVUb0NvbnRlbnRzKGFi
c29sdXRlUG9pbnQpKTsKLQotICAgIExheW91dFNpemUgbmV3T2Zmc2V0ID0gb2Zmc2V0RnJvbVJl
c2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKLSAgICBuZXdPZmZzZXQuc2V0V2lkdGgobmV3T2Zmc2V0
LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKLSAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KG5ld09mZnNl
dC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIAotICAgIExheW91dFNpemUgY3VycmVudFNp
emUgPSBMYXlvdXRTaXplKHJlbmRlcmVyLT53aWR0aCgpIC8gem9vbUZhY3RvciwgcmVuZGVyZXIt
PmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgTGF5b3V0U2l6ZSBtaW5pbXVtU2l6ZSA9IGVs
ZW1lbnQtPm1pbmltdW1TaXplRm9yUmVzaXppbmcoKS5zaHJ1bmtUbyhjdXJyZW50U2l6ZSk7Ci0g
ICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7Ci0gICAg
Ci0gICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0
LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsK
LSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0g
ICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwotICAgICAgICBh
ZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7Ci0g
ICAgfQotICAgIAotICAgIExheW91dFNpemUgZGlmZmVyZW5jZSA9IChjdXJyZW50U2l6ZSArIG5l
d09mZnNldCAtIGFkanVzdGVkT2xkT2Zmc2V0KS5leHBhbmRlZFRvKG1pbmltdW1TaXplKSAtIGN1
cnJlbnRTaXplOwotCi0gICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9IGRvd25jYXN0
PFN0eWxlZEVsZW1lbnQ+KGVsZW1lbnQpOwotICAgIGJvb2wgaXNCb3hTaXppbmdCb3JkZXIgPSBy
ZW5kZXJlci0+c3R5bGUoKS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkJvcmRlckJveDsKLQot
ICAgIFJlc2l6ZSByZXNpemUgPSByZW5kZXJlci0+c3R5bGUoKS5yZXNpemUoKTsKLSAgICBpZiAo
cmVzaXplICE9IFJlc2l6ZTo6VmVydGljYWwgJiYgZGlmZmVyZW5jZS53aWR0aCgpKSB7Ci0gICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luTGVmdCwgcmVuZGVyZXItPm1hcmdpbkxlZnQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBl
OjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91
dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIg
PyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwot
ICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5k
VG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlm
ZmVyZW5jZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJv
bSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8g
em9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5k
ZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVp
Z2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9y
ZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQg
LyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNl
LmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQu
dXBkYXRlTGF5b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3Vs
ZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9p
bnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQg
UmVuZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBv
c2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3Jv
bGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19
Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2li
bGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2li
bGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3Bh
Y2U7Ci0gICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lv
biA9PSBJbmNsdWRlU2Nyb2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxi
YXJJbnRydXNpb24oKTsKLSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJs
ZVNpemUoKTsKLSAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZp
c2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwg
dmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQot
Ci1JbnRTaXplIFJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJl
ckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKLQotICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2Ug
bWF4aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJl
YS4KLSAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJs
ZVRvdGFsQ29udGVudHNTaXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAg
ICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChy
ZWFjaGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChz
Y3JvbGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0
KCkpKTsKLQotICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5z
ZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndp
ZHRoKCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2li
bGVXaWR0aCgpKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAo
cmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBz
dHJldGNoOwotI2Vsc2UKLSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3Vz
Q29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9s
bENvcm5lclJlY3QoKSBjb25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KS5zY3JvbGxDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0
dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxh
eWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
JiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAg
SW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zm
c2V0KHNjcm9sbGJhcikpOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0
KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJl
bnRSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigp
LCBwYXJlbnRSZWN0KTsKLSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBv
aW50ID0gc2Nyb2xsYmFyUG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0K
LUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2lu
dCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBw
YXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OwotICAgIHJldHVybiBwb2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNp
emUoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYg
KCFib3gpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShy
b3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWln
aHQoKSkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAot
ewotICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0K
LQotSW50U2l6ZSBSZW5kZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25z
dAotewotICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0K
LSAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29u
dGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxl
U2l6ZSgpLndpZHRoKCkpKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1Np
emUuaGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250
ZW50c1NpemU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hh
bmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxl
QXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVh
c29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0g
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxk
cmVuKHRydWUpOwotICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQot
fQotCi1ib29sIFJlbmRlckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
dm9pZCBSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmRpZEVuZFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVu
ZE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVT
Y3JvbGwoKQotewotICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGws
IHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0j
ZW5kaWYKLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5s
YXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
SGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxh
eWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0g
ICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAg
ICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVy
Zmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBh
ZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0
byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsK
LQotICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIHsKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6
b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAg
ICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3Jv
bGxiYXIobV92QmFyLmdldCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRo
ZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAg
Ym9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6
Ok5vbmU7Ci0gICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlI
b3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8
IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhh
dmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6
ZTsKLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkg
b25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAg
Y29ybmVyU2l6ZSA9IEludFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0
aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAot
ICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0g
ICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAg
ICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAg
ICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQpOwotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAg
ICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAg
ICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgo
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChj
b3JuZXJTaXplLndpZHRoKCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6
b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAg
ICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBi
YXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgpOwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0g
ICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0g
ICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAg
YXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAo
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0
b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNv
cm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIu
eCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5l
clNpemUgfTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5l
clNpemUgfTsKLSAgICB9OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAg
ICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBp
ZiAoaGF2ZVJlc2l6ZXIpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAg
ICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRo
ZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJl
c2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25l
c3MgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIpIGNvbnN0Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwot
Ci0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAg
ICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElm
IHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQg
dG8gcmVwYWludC4KLSAgICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Ny
b2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMu
dmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxS
ZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAg
TGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZs
aXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVj
dGFuZ2xlKHJlcGFpbnRSZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNj
cm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3Zl
cmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRO
ZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFu
Z2xlKHJlY3QpOwotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWlu
dFJlY3RhbmdsZShyZWN0KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHls
ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9s
bGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVy
biBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0g
ZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRv
d1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAg
ICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJM
YXllcjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQot
ewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRl
cmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFy
U3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJC
b3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3Jv
bGxiYXIpOwotICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0
ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0
aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAg
IGVsc2UgewotICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJh
cigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAg
ICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAg
ICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3Jv
bGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOwotICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5h
ZGRDaGlsZCgqd2lkZ2V0KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAg
aWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5p
c0N1c3RvbVNjcm9sbGJhcigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJh
ci5nZXQoKSwgb3JpZW50YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50
KCk7Ci0gICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Ny
b2xsc092ZXJmbG93KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIo
KSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlm
IChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
Ci0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygp
ICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJl
Z2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJv
eWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0
byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIn
cyBzdHlsZS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgp
OwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xs
YmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZC
YXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xs
c092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBT
Y3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8g
RGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNv
cm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3Jv
bGxiYXIncyBzdHlsZS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hh
bmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci19Ci0KLVNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdAotewotICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpObykpCi0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICBy
ZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZv
ciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpZZXMpKSB7Ci0gICAgICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAot
ewotICAgIHJldHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNl
dHMoKQotewotICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRz
LgotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xv
c2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRl
ckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVT
bmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0aGlzLCAqZG93bmNhc3Q8SFRNTEVsZW1lbnQ+
KGVuY2xvc2luZ0VsZW1lbnQoKSksICpib3gsIGJveC0+c3R5bGUoKSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmICghc2Ny
b2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0g
ICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhz
Y3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0g
ICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQotYm9vbCBSZW5kZXJMYXllcjo6dXNl
c01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9i
YWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
Y29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllcjogIiAr
IG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBj
b25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZCgi
UmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyks
IExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsK
LQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJh
bnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwotCi0gICAgaWYg
KGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2Rl
Il9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7
Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVn
cmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3RyZWFtIDw8ICIg
IiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1pbnQgUmVu
ZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV92QmFyCi0gICAgICAgIHx8ICFz
aG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3Jv
bGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFt
X3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6
Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFyCi0gICAgICAgIHx8ICFzaG93c092
ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QK
LXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXpl
cjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiByZXNpemVyUmVj
dC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVzaXplQ29ybmVy
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8fCByZW5kZXJl
cigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJv
b3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChtX3ZC
YXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9v
dCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICByZWN0cy5ob3Jpem9u
dGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX2hCYXItPnNldEZy
YW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9Ci0KLSAgICBpZiAobV9z
Y3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMu
c2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+
c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRo
aXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMu
Ci0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6
OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5
ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3Jk
aW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0
T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVj
dCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVy
TGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0g
ICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5
ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwot
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwot
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92
ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFT
U0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKLQotICAg
IG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJm
bG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhlaWdodChyb3VuZFRvSW50KG92ZXJm
bG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAgICBpbnQgc2Nyb2xsYWJsZUxlZnRP
dmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAg
ICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3Ao
KSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOwotICAgIAotICAg
IGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKLXsKLSAg
ICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc0hvcml6
b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3Jv
bGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc0hvcml6b250YWxPdmVy
ZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0K
LSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVu
dFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJl
dHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZs
b3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29s
IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRv
OwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92
ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRh
bFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAg
Ym9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpT
Y3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVy
biBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkK
LXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwot
Ci0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2
ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGhhc0hv
cml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOwotICAgIGJv
b2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKLQot
ICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVl
ZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKLSAgICAg
ICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgaWYgKG1f
dkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgVmVydGlj
YWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxPdmVy
Zmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVlZCB0
byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCi0gICAg
Ym9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250YWxT
Y3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAh
PSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFy
Q2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYg
KGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICBp
ZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhB
dXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoaGFz
SG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3JvbGxi
YXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJh
cihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXll
cigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOwotCi0gICAgICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIo
KS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93
UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlv
dXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJl
bmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRv
d25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgYmxv
Y2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5
b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVs
YXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOwotICAgICAgICBp
ZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyKCkuaXNCb3go
KSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVh
ckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKLSAgICB9Ci0KLSAgICAvLyBT
ZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCi0gICAgaWYgKG1faEJh
cikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lk
dGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50
V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50
V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYgKG1fdkJhcikgewot
ICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgp
KTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWln
aHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0
ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVp
Z2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGFi
bGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlv
dXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9s
bE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgLy8gRklYTUU6IEVuc3VyZSB0
aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHls
ZSBjaGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2VuZGlmCi0KLSAgICBpZiAoIWJv
eC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkpIHsKLSAgICAg
ICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3Np
dGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xs
IG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0g
ICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9u
bHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAv
LyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNl
cnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAg
ICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5k
cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAg
ICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAg
ICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQo
KSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9z
aXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0K
LSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25z
dAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlm
IChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJz
ZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy5z
Y3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpOb1Njcm9s
bDsKKyAgICB9IGVsc2UgaWYgKGludGVyc2VjdEhlaWdodCA+IDApCisgICAgICAgIC8vIElmIHRo
ZSByZWN0YW5nbGUgaXMgcGFydGlhbGx5IHZpc2libGUsIHVzZSB0aGUgc3BlY2lmaWVkIHBhcnRp
YWwgYmVoYXZpb3IKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0UGFydGlh
bEJlaGF2aW9yKGFsaWduWSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxp
Z25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOworICAgIC8vIElmIHdlJ3JlIHRyeWlu
ZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVy
dGhlciBkb3duCisgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRo
YW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCisgICAgaWYg
KHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpCZWhhdmlvcjo6QWxpZ25Ub0Nsb3Nlc3RFZGdl
ICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9zZVJlY3Qu
aGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKKyAgICAgICAgc2Nyb2xsWSA9IFNjcm9s
bEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tOwogCi0gICAgaWYgKHJlY3RzLnJlc2l6
ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBH
aXZlbiB0aGUgWSBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgorICAgIExheW91
dFVuaXQgeTsKKyAgICBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6OkJlaGF2aW9yOjpO
b1Njcm9sbCkKKyAgICAgICAgeSA9IHZpc2libGVSZWN0LnkoKTsKKyAgICBlbHNlIGlmIChzY3Jv
bGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQm90dG9tKQorICAgICAgICB5
ID0gZXhwb3NlUmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKKyAgICBlbHNlIGlm
IChzY3JvbGxZID09IFNjcm9sbEFsaWdubWVudDo6QmVoYXZpb3I6OkFsaWduQ2VudGVyKQorICAg
ICAgICB5ID0gZXhwb3NlUmVjdC55KCkgKyAoZXhwb3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVS
ZWN0LmhlaWdodCgpKSAvIDI7CisgICAgZWxzZQorICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCk7
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQo
eCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3dz
T3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjphdXRvc2Nyb2xsKGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbkluV2luZG93KQogewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJv
Y2Vzcy4KLSAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLSNlbmRpZgot
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24g
PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9u
SW5XaW5kb3cpOworICAgIHNjcm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9j
dW1lbnRQb3NpdGlvbiwgTGF5b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6OlllcyB9KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzKQorU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAg
ICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgotICAgIGlmICgh
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3Zl
cmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIg
dHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5n
IGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJs
YXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxs
IHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8v
IHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNz
IHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0
aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0
aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhl
IFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJs
YXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBu
ZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGlu
dG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdl
UmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAg
ICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3Qg
PSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFpbnRpbmdSb290
KQotICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsK
LQotICAgICAgICBwYWludGluZ1Jvb3QtPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoaXMgY2hlY2sgaXMg
cmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgot
ICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9
IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAg
YWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQot
ICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1h
bGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMK
LSAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBu
b3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBm
aXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMo
dG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3Jl
IHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4K
LSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAg
ICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYm
ICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29u
dGV4dCwgZGFtYWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFw
cGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
dGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdo
dCgpKTsKIAotICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3
ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhl
Ci0gICAgLy8gZWRnZSBvZiB0aGUgYm94LgotICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQs
IGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotICAgIAotICAgIC8vIFBhaW50IG91
ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVy
LgotICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VS
ZWN0KTsKLX0KKyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIg
aGFzIHRyYW5zZm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9s
bENvcm5lclJlY3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYg
KCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7
CiAKLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAg
ICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBi
YWNrZHJvcCBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNS
ZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFy
cywgc2luY2Ugd2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KLSAgICBp
ZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOwotfQorICAgIGlmIChpc29s
YXRlc0JsZW5kaW5nKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRp
bmciX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVj
dCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOwotICAgIEZsb2F0U2l6
ZSBjb3JuZXJSZXNpemVyU2l6ZTsKLSAgICBpZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkgPj0gMikgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1h
Z2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
InRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29y
bmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVy
U2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJT
aXplLnNjYWxlKDAuNWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNp
emVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7Ci0gICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICBpZiAoaXNDb21wb3Np
dGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJl
YW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJl
YW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5y
ZWxlYXNlKCkpOwogICAgIH0KIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndp
ZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgp
IC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZs
b2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAg
ICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5l
ckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNv
cm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdl
KCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgp
IGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6
Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKLQotICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNp
emVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFy
ZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
LQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QueSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250
cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpv
dmVyZmxvd0JvdHRvbSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgp
KTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVy
biBvdmVyZmxvd1JlY3QubWF4WSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3Zl
cmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2Nh
bFBvaW50KQorTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwot
Ci0gICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAocmVjdHMucmVzaXpl
ci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFu
ZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZCYXIgJiYgbV92
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAg
cmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNl
dFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwor
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIpCitMYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1Jp
Z2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAg
cmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
Y29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNl
dDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBw
YWludFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCkBAIC00
MTkyLDE3ICsyNjEyLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3aWRnZXQt
PnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJQYWlu
dGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCks
IHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0gICAgcGFp
bnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092
ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
ID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRp
b25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBS
ZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwpA
QCAtNDIyNSw3ICsyNjM0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAgICAvLyBh
bnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5nIGFibGUgdG8g
YXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJlIGluIG91cgog
ICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRoYXQgYWxzby4K
ICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1ZGVTZWxmRm9y
Qm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFy
ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT51c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFp
bnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5
ZXItPnNjcm9sbGFibGVMYXllcigpICYmIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVy
SXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjcsNyArMjgzNiw4IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2
ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMgb3Ig
c3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBzY3Jv
bGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8
IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgZG9lc05vdFVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcgPSAhc2Nyb2xsYWJsZUxheWVyKCkgfHwgIXNjcm9sbGFibGVM
YXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIGJvb2wgY29udGVudHNTY3Jv
bGxCeVBhaW50aW5nID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgZG9lc05vdFVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50
KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNT
dGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8
IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVh
bnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00
NzIyLDggKzMxMzIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgcGFp
bnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1Bh
aW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAgICAgICAgICAg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICBpZiAoaXNQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5o
YXNTY3JvbGxiYXJzKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIoKS0+cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwg
bG9jYWxQYWludGluZ0luZm8pOwogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAg
ICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBw
YWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpA
QCAtNTE5MSwxOCArMzYwMSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGlu
Z01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAgICAgfQogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKLXsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKLSAgICAgICAgaWYg
KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZy
YWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNv
bnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRz
LmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3Vi
cGl4ZWxPZmZzZXQpKSwKLSAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwotICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgIH0KLX0KLQog
dm9pZCBSZW5kZXJMYXllcjo6Y29sbGVjdEV2ZW50UmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8sIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKQogewogICAgIEFTU0VSVChsb2NhbFBhaW50aW5nSW5m
by5ldmVudFJlZ2lvbkNvbnRleHQpOwpAQCAtNTIzNiw3ICszNjM0LDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNv
bHV0ZUxheW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0
VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVD
b250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBo
aXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJs
ZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVy
KHRoaXMsIG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2Nh
dGlvbiwgZmFsc2UpOwpAQCAtNTQ2Nyw5ICszODY1LDExIEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBj
b250CiAgICAgICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91
dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVy
SW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkp
IHsKLSAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQ
b2ludCk7Ci0gICAgICAgIHJldHVybiB0aGlzOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSB0aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxh
eWVyLT5jYW5SZXNpemUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAg
ICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9p
bnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBOZXh0IHdlIHdhbnQgdG8gc2VlIGlmIHRoZSBtb3VzZSBwb3MgaXMgaW5zaWRlIHRoZSBjaGls
ZCBSZW5kZXJPYmplY3RzIG9mIHRoZSBsYXllci4gQ2hlY2sKQEAgLTU1NDIsMzUgKzM5NDIsNiBA
QCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlmIChsYXllckZy
YWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYm9y
ZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJl
Y3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgewotICAgICAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAg
ICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5Y
TWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAg
IHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNl
dEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJl
c2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUgb2Zmc2V0RnJv
bUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJv
dW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJl
Y3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAgZm9yIChpbnQg
aSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNv
bnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Ci0gICAg
ICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25h
cHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKLSAgICAg
ICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9u
KSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5k
ZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2lu
dChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5z
Zm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXll
ciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNm
b3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBAIC02MDExLDM2
ICs0MzgyLDYgQEAgTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6bG9jYWxDbGlwUmVjdChib29sJiBj
bGlwRXhjZWVkc0JvdW5kcykgY29uc3QKICAgICByZXR1cm4gY2xpcFJlY3Q7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0
JiBib3VuZHMpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9z
aW5nSW50UmVjdChib3VuZHMpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJCbG9ja1Nl
bGVjdGlvbkdhcHNCb3VuZHMoKQotewotICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0g
SW50UmVjdCgpOwotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmNsZWFy
QmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFp
bnRCbG9ja1NlbGVjdGlvbkdhcHMoKQotewotICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAg
ICAgY2hpbGQtPnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLQotICAgIGlmIChtX2Jsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExh
eW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwotICAgIHJlY3QubW92
ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgcmVjdC5pbnRlcnNl
Y3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KExheW91
dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3Iu
Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQotICAgICAgICByZWN0LmludGVyc2VjdChk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExheW91dFBvaW50KCksIG51
bGxwdHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCi0gICAgaWYgKCFy
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3Qp
OwotfQotCiBib29sIFJlbmRlckxheWVyOjppbnRlcnNlY3RzRGFtYWdlUmVjdChjb25zdCBMYXlv
dXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3Qs
IGNvbnN0IE9wdGlvbmFsPExheW91dFJlY3Q+JiBjYWNoZWRCb3VuZGluZ0JveCkgY29uc3QKIHsK
ICAgICAvLyBBbHdheXMgZXhhbWluZSB0aGUgY2FudmFzIGFuZCB0aGUgcm9vdC4KQEAgLTYzMzcs
MjEgKzQ2NzgsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQog
Ci1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxs
cHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNX
aXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25z
dAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2lu
ZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02MzgyLDExICs0NzA4LDYgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFp
bnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVy
RmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQog
Ym9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0
IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5n
TGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NTEwLDgg
KzQ4MzEsMTIgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigp
IGNvbnN0CiAgICAgaWYgKCFpc05vcm1hbEZsb3dPbmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgcmV0dXJuIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgfHwgY2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gdGhpcy0+
c2Nyb2xsYWJsZUxheWVyKCk7CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycyA9IHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxiYXJzKCk7Cisg
ICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nID0gc2Nyb2xsYWJsZUxheWVyICYmIHNj
cm9sbGFibGVMYXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworCisgICAgcmV0dXJu
IGhhc092ZXJsYXlTY3JvbGxiYXJzCisgICAgICAgIHx8IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKICAgICAgICAgfHwgcmVuZGVy
ZXIoKS5pc0NhbnZhcygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNWaWRlbygpCkBAIC02NjI4
LDcgKzQ5NTMsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMo
KSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgp
IHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVM
YXllcigpLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjpp
c1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApA
QCAtNjYzOCw3ICs0OTYzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5
KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2li
bGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBo
YXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxh
Y2VkKCkgfHwgKHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5oYXNPdmVy
Zmxvd0NvbnRyb2xzKCkpKSB7CiAgICAgICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCkBAIC02NjYzLDM4ICs0OTg4LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNW
aXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAg
ICByZXR1cm4gaGFzTm9uRW1wdHlDaGlsZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4K
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMg
YnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5
bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVy
ZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBh
dm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2Ug
dHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVz
ZW50LgotICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsK
LSAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgp
ICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNW
ZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGgg
bm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJs
ZSBidXQgbWF5IGJlIGRpc2FibGVkLgotICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIg
dmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlm
IChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVy
Zmxvdzo6U2Nyb2xsKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBp
ZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5
bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJm
bG93OjpTY3JvbGwpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlm
ICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAg
c2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjcxNyw2
ICs1MDEwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKIAogICAgIC8vIEZJWE1FOiBSZW5k
ZXJMYXllciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZp
c2liaWxpdHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBm
b2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSB0
aGlzLT5zY3JvbGxhYmxlTGF5ZXIoKTsKICAgICBpZiAob2xkU3R5bGUpIHsKICAgICAgICAgYm9v
bCB2aXNpYmlsaXR5Q2hhbmdlZCA9IG9sZFN0eWxlLT52aXNpYmlsaXR5KCkgIT0gcmVuZGVyZXIo
KS5zdHlsZSgpLnZpc2liaWxpdHkoKTsKICAgICAgICAgaWYgKG9sZFN0eWxlLT51c2VkWkluZGV4
KCkgIT0gcmVuZGVyZXIoKS5zdHlsZSgpLnVzZWRaSW5kZXgoKSB8fCB2aXNpYmlsaXR5Q2hhbmdl
ZCkgewpAQCAtNjcyNiwxOCArNTAyMCwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5n
ZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAg
ICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlm
ICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAg
ICAgfQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCku
c3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVu
ZGVyZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAgICAgICAgICAg
bV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkK
LSAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKSB7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+Y3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQo
KTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNo
YW5nZShvbGRTdHlsZSk7CisgICAgfQogCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVD
aGFuZ2Uob2xkU3R5bGUpOwogICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBjYW4gbWFrZSB0aGlz
IGxheWVyIHNlbGYtcGFpbnRpbmcgc28gd2UgbmVlZAogICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUg
Yml0IG9uY2Ugc2Nyb2xsYmFycyBoYXZlIGJlZW4gdXBkYXRlZC4KICAgICB1cGRhdGVTZWxmUGFp
bnRpbmdMYXllcigpOwpAQCAtNjc1MCwxNSArNTA0MSwxMiBAQCB2b2lkIFJlbmRlckxheWVyOjpz
dHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKGNy
ZWF0ZVJlZmxlY3Rpb25TdHlsZSgpKTsKICAgICB9Ci0gICAgCi0gICAgLy8gRklYTUU6IE5lZWQg
dG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZp
Y2UgdmVyc2EpLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2Vk
KCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAg
ICAKLSAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHls
ZSgpOworCisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVS
ZXNpemVyU3R5bGUoKTsKKyAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50Rmxh
Z3MoKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKQEAgLTY3NzksOTggKzUwNjcsNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCi17Ci0gICAgRnJhbWVWaWV3JiBm
cmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgIGJvb2wgaXNW
aXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0gICAg
aWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25l
ckVsZW1lbnQoKSkKLSAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJl
cigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0KLSAgICBi
b29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKLSAg
ICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRo
aXMpKTsKLSAgICAKLSAgICBpZiAoaXNTY3JvbGxhYmxlKSB7Ci0gICAgICAgIGlmICghbV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJh
bWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgbV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlZ2lz
dGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmll
dy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEgPSBmYWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsKLSAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAh
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3Zl
cmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKLSAgICAgICAgICAgIC8vIGFjY2VsZXJh
dGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCi0gICAgICAg
ICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAg
ICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsK
LSNlbmRpZgotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
Ci17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9s
bGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVk
b0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxw
dHI7Ci0KLSAgICBpZiAoIWNvcm5lcikgewotICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikgewotICAg
ICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Njcm9s
bENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6Y2xlYXJTY3JvbGxDb3JuZXIoKQotewotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAg
IG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
UmVzaXplclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVzaXplciA9IHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkg
OiBudWxscHRyOwotCi0gICAgaWYgKCFyZXNpemVyKSB7Ci0gICAgICAgIGNsZWFyUmVzaXplcigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc2l6ZXIpIHsKLSAgICAg
ICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVy
ZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBB
IHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAgIG1fcmVz
aXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9yZXNpemVyLT5pbml0aWFs
aXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZN
b3ZlKCpyZXNpemVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVzaXplcigpCi17
Ci0gICAgaWYgKCFtX3Jlc2l6ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jlc2l6ZXItPnNl
dFBhcmVudChudWxscHRyKTsKLSAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOwotfQotCiBSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OnJlZmxlY3Rpb25MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fcmVmbGVjdGlvbiA/IG1fcmVmbGVjdGlvbi0+bGF5ZXIoKSA6IG51bGxwdHI7CkBAIC03MDAy
LDcgKzUxOTgsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBh
cmVudCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJl
bmRlckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0
aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcyNDgsMTEgKzU0NDQsMTMgQEAgc3RhdGljIHZv
aWQgb3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25z
dCBXZWJDb3JlOjpSZW4KIAogICAgIHN0cmVhbSA8PCAiICI7CiAKLSAgICBzdHJlYW0gPDwgbGF5
ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKTsKLSAgICBzdHJlYW0gPDwgIiAiOwotICAgIHN0cmVhbSA8
PCBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgIHN0cmVhbSA8PCBz
Y3JvbGxhYmxlTGF5ZXItPmJveFNjcm9sbGluZ1Njb3BlKCk7CisgICAgICAgIHN0cmVhbSA8PCAi
ICI7CisgICAgICAgIHN0cmVhbSA8PCBzY3JvbGxhYmxlTGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKTsKIAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiICI7Cisg
ICAgfQogCiAgICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIyN2RjY2U1ZWVl
MDk0ZmVlOWJmNC4uY2E1NDk5MmViOTE4YjlhN2I1YzNmMDRjOTM4MDA1ZmQ2Y2ZjYmYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJT
Y3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CkBAIC0xNDAsMjAgKzEzOSwyOSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlv
bnMgewogICAgIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZpb3I6OkF1dG8g
fTsKIH07CiAKLXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERFQ0xBUkVfQUxM
T0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxh
eWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDog
cHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
ckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllclNjcm9sbGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7CisgICAgICAgIFN0
YXRpYywKKyAgICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNpdCBSZW5kZXJM
YXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIo
KTsKIAorICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlw
ZTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxh
YmxlTGF5ZXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBSZW5kZXJMYXllclNjcm9sbGFi
bGUqIHNjcm9sbGFibGVMYXllcigpIGNvbnN0OworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMg
YmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiAr
MjMxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChi
b29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYK
IAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBM
YXllclR5cGUpOworICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNl
IGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVt
IGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MjMsNiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9t
YXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRv
V2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0NDMsMTQgQEAgcHVibGljOgogCiAgICAgTGF5
b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXpl
KCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50
U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBj
b25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMg
Zm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNj
cm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNl
ciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYs
IFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlw
ZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3Jv
bGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50
IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNj
cm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAg
IHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkp
IHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQot
ICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0
aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNj
cm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydz
IGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3Jv
bGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQg
YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZp
bmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3Jk
aW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBh
YnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVP
cHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wg
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
bik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxh
YmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsg
fQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsK
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMo
KSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAg
IGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsK
LSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lk
IGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7
Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0
b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1
YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5
IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRlKS4K
ICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVy
biBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0
OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3Ju
ZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92
ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2Up
OwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXpl
cihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsK
LQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQm
KTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNp
emVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJlc2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldElu
UmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlz
UmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQog
ICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNl
ZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wgaXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9ydHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0K
QEAgLTU1NSw5ICs0NjYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJM
YXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAK
LSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBi
b29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7
CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFn
aW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1v
ZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg3LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFy
ID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9pZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNU
eXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2Nr
U2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJs
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAgIHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9u
R2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRl
bnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQo
KSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAg
IGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250
ZW50OyB9CkBAIC02MzcsNiArNTQxLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0
OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0Zy
YW1lQm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVu
ZGVyTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBj
bGlwcGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5
ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjA0LDYgQEAg
cHVibGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRy
LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNv
bnRleHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBh
aW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsK
ICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIs
IENsaXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlw
ID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNjg5LDYgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0
YXRpY0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2Nr
UG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBw
b3NpdGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0K
LSNlbmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJl
cigpLmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhh
cyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCogdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1
OCwyMCArNzU4LDkgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFj
a2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9
IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENv
cm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAotICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9s
bGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4g
VXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgotICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBi
b3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0K
LSAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQotCiAgICAgYm9vbCBwYWlu
dHNXaXRoVHJhbnNwYXJlbmN5KE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIChpc1RyYW5zcGFyZW50KCkgfHwgaGFzQmxl
bmRNb2RlKCkgfHwgKGlzb2xhdGVzQmxlbmRpbmcoKSAmJiAhcmVuZGVyZXIoKS5pc0RvY3VtZW50
RWxlbWVudFJlbmRlcmVyKCkpKSAmJiAoKHBhaW50QmVoYXZpb3IgJiBQYWludEJlaGF2aW9yOjpG
bGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpIHx8ICFpc0NvbXBvc2l0ZWQoKSk7CkBAIC04ODUsMTEg
Kzc3NCw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2Nh
bCBjb29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVj
dChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7
IH0KLSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5
U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Ny
b2xsYmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJv
b2wgcmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE4LDgg
KzgwMiw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVk
Rmxvd0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgdm9pZCBzaW11
bGF0ZUZyZXF1ZW50UGFpbnQoKSB7IFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3Bh
aW50RnJlcXVlbmN5VHJhY2tlciB9OyB9CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBj
b25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHko
KTsgfQogCkBAIC05MzAsNyArODEyLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRS
ZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUs
IE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2
ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0
aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsK
IAogcHJpdmF0ZToKIApAQCAtMTAxMCw5ICs4OTIsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEg
PDwgMSwKQEAgLTEwMzAsMTYgKzkwOSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZUxh
eWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZz4pOwogCi0gICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
RmxhZyB7Ci0gICAgICAgIElzT3ZlcmZsb3dTY3JvbGwgICAgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMCwKLSAgICAgICAgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciAgICAg
ID0gMSA8PCAxLAotICAgICAgICBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwICAgICAg
ICAgPSAxIDw8IDIsCi0gICAgICAgIEhhc0NoYW5nZWRBbmNlc3RvciAgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMywKLSAgICB9OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwotCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xs
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExh
eWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCBy
ZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIo
KSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQ
b2ludCgpOyB9CkBAIC0xMDcyLDcgKzk0MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IExh
eW91dFJlY3QmIHRyYW5zcGFyZW5jeVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVu
Y3ksIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBS
ZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50Rm9y
ZWdyb3VuZEZvckZyYWdtZW50c1dpdGhQaGFzZShQYWludFBoYXNlLCBjb25zdCBMYXllckZyYWdt
ZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9u
U2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVy
KTsKICAgICB2b2lkIHBhaW50T3V0bGluZUZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyKTsK
LSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZy
YWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CiAg
ICAgdm9pZCBwYWludE1hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJl
aGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9p
ZCBwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRz
JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIpOwog
ICAgIHZvaWQgcGFpbnRUcmFuc2Zvcm1lZExheWVySW50b0ZyYWdtZW50cyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4p
OwpAQCAtMTA5OSw2NCArOTY3LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0
Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5
b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0
ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3Qp
IGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZy
YWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJh
Z21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllcklu
RnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJM
YXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29u
c3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0
IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBu
dWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVj
dChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKICAgICB2b2lk
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3co
KSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJv
b2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAKICAgICBib29sIHNob3VsZEJlU2Vs
ZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFj
ZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJl
Y3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IElu
dFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9s
bENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29u
c3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIElu
dFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBj
b25zdCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlz
aWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhh
dmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIElu
dFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVs
bHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5j
ZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAg
Ym9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dN
b2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0j
aWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20g
U2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYp
OwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAg
SW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0g
ICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAK
ICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlB
bmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwMTQs
NiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMg
aW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExh
eW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAg
IHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29y
bmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVz
aXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1
cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFu
dChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxNywy
MCArMTAyNyw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25z
dDsKICAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKIAotICAgIHN0cnVjdCBP
dmVyZmxvd0NvbnRyb2xSZWN0cyB7Ci0gICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJh
cjsKLSAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9sbGJhcjsKLSAgICAgICAgSW50UmVjdCBz
Y3JvbGxDb3JuZXI7Ci0gICAgICAgIEludFJlY3QgcmVzaXplcjsKLSAgICAgICAgSW50UmVjdCBz
Y3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICFzY3JvbGxDb3JuZXIuaXNFbXB0eSgpID8gc2Nyb2xsQ29ybmVyIDogcmVzaXplcjsK
LSAgICAgICAgfQotICAgIH07Ci0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkgY29uc3Q7Ci0KLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RS
ZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KKyAgICBMYXllclR5cGUgbV9s
YXllclR5cGU7CiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlC
aXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDQs
MTAgKzEwNDEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9ub3JtYWxGbG93TGlzdERpcnR5OiAx
OwogICAgIGJvb2wgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QgOiAxOwogCi0gICAgLy8gS2VlcHMg
dHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVu
dHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgotICAgIGJvb2wgbV9pblJl
c2l6ZU1vZGUgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAg
ICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBz
ZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxk
cmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTA1Miwx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5k
ZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZv
cmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgog
ICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQg
dHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBt
X2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDog
MjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGly
dHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zp
c2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVz
Y2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAg
ICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2Jl
aGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI4NywxNyArMTA3OCw2IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21w
b3NpdGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBv
c2l0ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNv
bgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKLSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
IDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcg
OiAxOwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDog
MTsKLSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRp
ZgpAQCAtMTMzOCwyNSArMTExOCw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lk
dGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9u
IG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Ny
b2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXll
cnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwogICAg
IAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIE1h
cmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Nj
b3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKLSAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29w
ZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNT
Y3JvbGxpbmdTY29wZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21h
cnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFs
IGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGlj
IGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247
CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEwICsxMTI5
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55
IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJl
bmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91
ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVy
U2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9s
bGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBS
ZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2Ug
YXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQ
YWdpbmF0aW9uTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggNTE5ZDM2MTA3ODA4ZTM2MmY3YzA0MGY0Mjc4Yzg4M2EyZjM5
MDYxZS4uY2RmOWE5YTZkZDRiNTUwYWNjMjFkNTI2YTQwMmE4ODUxY2VhNWIxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUzLDEz
ICs1MywxNCBAQAogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1
ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5j
bHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudENv
bnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAi
UmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUg
IlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCi0jaW5j
bHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVv
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjY5LDcgKzI3MCw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQoKQogI2VuZGlmCiAKICAgICBBU1NFUlQo
bV9vd25pbmdMYXllci5iYWNraW5nKCkgPT0gdGhpcyk7Ci0gICAgY29tcG9zaXRvcigpLnJlbW92
ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhtX293bmluZ0xheWVyKTsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAg
ICAgICAgY29tcG9zaXRvcigpLnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycygqc2Ny
b2xsYWJsZUxheWVyKTsKIAogICAgIGNsZWFyQmFja2luZ1NoYXJpbmdMYXllcnMoKTsKIH0KQEAg
LTQyMSwxMSArNDIzLDExIEBAIHN0YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21w
dXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShjb25zdCBSZW5kCiAKICAgICBUaWxlZEJh
Y2tpbmc6OlRpbGVDb3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdl
Rm9yVmlzaWJsZUFyZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXpl
ID0gZnJhbWVWaWV3LmluTGl2ZVJlc2l6ZSgpOwotICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVy
aW5nTGl2ZVJlc2l6ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdygpKQorICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSAm
JiBsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJs
ZUxheWVyKCktPmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAg
IHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9s
bGluZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSkKKyAgICAgICAgaWYgKGxheWVyLnNjcm9sbGFibGVMYXllcigpLT5oYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKQogICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2lu
Zzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVD
b3ZlcmFnZTsKQEAgLTEyMzIsOCArMTIzNCwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFj
a2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgog
ICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFu
Y2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNj
cm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVy
Qm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNl
c3Rvci0+c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0g
TGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUo
YW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9s
bE9mZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6
ZSBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFi
bGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gdG9MYXlvdXRTaXplKGNvbXBv
c2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUxheWVyKCktPnNjcm9sbE9mZnNldCgpKTsKKyAgICAg
ICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJC
b3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9j
YXRpb24oKSkgLSBzY3JvbGxPZmZzZXQpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcGFyZW50R3JhcGhpY3NMYXllclJlY3Q7CkBAIC0xMjg1LDcgKzEy
ODksOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVu
ZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5n
TGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7CiAKICAgICAg
ICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAg
ICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5n
TGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChlbnRyeS5jbGlw
RGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgICAgICAgICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgICAgIGVu
dHJ5LmNsaXBwaW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAg
ICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTEz
OTAsNyArMTM5NSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShj
b25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENv
bnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5s
b2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Ny
b2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsK
IAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7Cisg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAog
ICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTE0MDQsNyArMTQxMSw3IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciog
Y29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5n
ZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAg
ICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXpl
ICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENo
YW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNw
bGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTYsMTggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQK
IAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZz
ZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxU
eXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRT
Y3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxp
bmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxh
eWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAg
ICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xs
aW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVl
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBj
b250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhl
ciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9m
U2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFT
U0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0x
OTExLDEyICsxOTIyLDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVy
Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewot
ICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNj
cm9sbGJhcihtX293bmluZ0xheWVyLnNjcm9sbGFibGVMYXllcigpLT5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNj
cm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9s
bGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmICghbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxh
eWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0xOTI0LDEyICsxOTM5LDE2
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkg
Y29uc3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdM
YXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5
ZXIoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Ny
b2xsYmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Ny
b2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5n
TGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIg
PSBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxi
YXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JT
Y3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwxMCArMTk4NCwxMiBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRz
SG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5
ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwg
InNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworCiAgICAgICAgIGlmICho
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdM
YXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CiAgICAgICAgIGlmICh2
ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5
ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCptX293bmluZ0xheWVyLnNj
cm9sbGFibGVMYXllcigpLCBWZXJ0aWNhbFNjcm9sbGJhcik7CiAgICAgfQogCiAgICAgcmV0dXJu
IGxheWVyc0NoYW5nZWQ7CkBAIC0xOTc2LDcgKzE5OTcsOCBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNj
cm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xz
TGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xs
YmFycygpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmlj
ZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYgKzIwMjAsMTYgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAg
IC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBh
dXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBh
dXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAog
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAg
ICAgICAgIHBvc2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50
KG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRl
bnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigp
KTsKICAgICB9CiAKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVz
ZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xh
eWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpIHsKQEAgLTIxNjUsNyArMjE4Nyw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAgICAg
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KHsgfSk7CiAgICAgICAgIG1f
c2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCptX3Njcm9sbGVkQ29udGVudHNMYXllcik7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRvcigpLndpbGxSZW1vdmVTY3JvbGxpbmdM
YXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0aGlzKTsKKyAgICAgICAgQVNTRVJUKG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCkud2ls
bFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUxheWVyKCksICp0aGlzKTsKIAogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsQ29u
dGFpbmVyTGF5ZXIuZ2V0KCkpOwogICAgICAgICB3aWxsRGVzdHJveUxheWVyKG1fc2Nyb2xsZWRD
b250ZW50c0xheWVyLmdldCgpKTsKQEAgLTIxNzQsOSArMjE5NywxMSBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgbmVlZHNTY3JvbGxpbmdMYXll
cnMpCiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OnVucGFyZW50QW5kQ2xlYXIobV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChtX3Njcm9sbENvbnRhaW5lckxheWVyKQot
ICAgICAgICBjb21wb3NpdG9yKCkuZGlkQWRkU2Nyb2xsaW5nTGF5ZXIobV9vd25pbmdMYXllcik7
Ci0gICAgCisgICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJU
KG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAgICBjb21wb3NpdG9yKCku
ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoKm1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwor
ICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yOTg1LDggKzMwMTAsOSBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdChjb25zdCBM
YXlvdXRSZWN0JiByLCBHcmFwaAogICAgIH0KIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNM
YXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOwogICAgICAgICBGbG9h
dFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0Rm9yUGFpbnRpbmc7Ci0gICAg
ICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRG
cm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgp
KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAgICAgICBsYXllckRpcnR5UmVj
dC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0
b0xheW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxhYmxlTGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRD
b250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3Vs
ZENsaXApOwogICAgIH0KIH0KQEAgLTMwMzIsOCArMzA1OCwxMCBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
ciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAg
ICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWlu
dEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIu
cGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJl
bmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Cisg
ICAgICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIGxheWVy
LnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBS
ZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5
ZXJXaXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCkBAIC0z
MzIzLDE3ICszMzUxLDIyIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRz
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBw
YWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2Ug
aWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCks
IGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIEFTU0VSVChtX293bmluZ0xheWVyLnNjcm9s
bGFibGVMYXllcigpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlTGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3Qp
OwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNj
cm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBBU1NFUlQobV9vd25pbmdM
YXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRp
cnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCk7
CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVy
UmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29y
bmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0
LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91
dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5s
b2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAg
ICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNm
b3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihj
b250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwg
dHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCku
cGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZi
MWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi5lNTZmYzJkNzY1ZGRhODkyOTQ1M2U3M2VhOTgyYTFjZWMw
OTI2ZGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICszMTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2Jq
ZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JP
dmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9z
aXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSB8fCAh
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9
PSBMYXlvdXRVcFRvRGF0ZTo6Tm8pIHsKQEAgLTMyOTMsNyArMzI5Myw5IEBAIGJvb2wgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKGNvbnN0IFJl
bmRlckxheWVyJiBsCiAKIHN0YXRpYyBib29sIGlzU2Nyb2xsZWRCeU92ZXJmbG93U2Nyb2xsTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgb3ZlcmZsb3dT
Y3JvbGxMYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuYm94U2Nyb2xsaW5nU2NvcGUoKSA9PSBv
dmVyZmxvd1Njcm9sbExheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKKyAgICBBU1NFUlQo
bGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgIEFTU0VSVChvdmVyZmxvd1Njcm9sbExheWVy
LnNjcm9sbGFibGVMYXllcigpKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkt
PmJveFNjcm9sbGluZ1Njb3BlKCkgPT0gb3ZlcmZsb3dTY3JvbGxMYXllci5zY3JvbGxhYmxlTGF5
ZXIoKS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJt
ZWRpYXRlTGF5ZXIpCkBAIC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAgICAgcm9vdExheWVy
LT5ub3RlRGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMo
KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29y
ZGluYXRlZExheWVycyhSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xs
YWJsZSYgbGF5ZXIpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdh
Y3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5LDExIEBAIFNjcm9s
bGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JW
aWV3cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFy
ZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0
IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBhbmNl
c3RvckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxkIGJlY29tZSBh
IHJlZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7CisgICAgaWYgKCFh
bmNlc3RvckxheWVyKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwg
TGF5b3V0U2l6ZShzY3JvbGxhYmxlTGF5ZXItPnZpc2libGVTaXplKCkpKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0
OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDU4OCwxMSAr
NDU5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9k
ZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290
QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigpLAogICAg
ICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZp
ZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVMYXllcigpOworCiAgICAg
ICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIo
KSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwg
bGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyID8gc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSA6IG51bGxwdHIsCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPyBzY3JvbGxhYmxlTGF5
ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHIgfSk7CiAgICAgfQogfQog
CkBAIC00NjMwLDggKzQ2MzgsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAgICAgICAg
aWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAgICAgICAg
ICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Nyb2xsaW5n
Q29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5n
ZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0gICAgICAg
ICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVh
R2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xs
aW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2Rl
SUQpIHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlTGF5ZXIoKSk7CisgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVB
cmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUxheWVyKCkpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ3NjcsMjAgKzQ3NzcsMjEg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVN5bmNocm9ub3VzU2Nyb2xsaW5n
Tm9kZXMoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byByZWxldmFudFNjcm9s
bGluZ1Njb3BlID0gW10oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyKSB7CisgICAgYXV0byByZWxldmFudFNjcm9sbGluZ1Njb3BlID0gW10oY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBs
YXllcikgewogICAgICAgICBpZiAoJmxheWVyLnJlbmRlcmVyKCkgPT0gJnJlbmRlcmVyKQogICAg
ICAgICAgICAgcmV0dXJuIGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgICAgIHJldHVy
biBsYXllci5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfTsKIAotICAgIGF1dG8gcm9v
dFNjcm9sbGluZ1Njb3BlID0gbV9yZW5kZXJWaWV3LmxheWVyKCktPmNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKTsKKyAgICBBU1NFUlQobV9yZW5kZXJWaWV3LnNjcm9sbGFibGVMYXllcigpKTsKKyAg
ICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5zY3JvbGxhYmxlTGF5ZXIo
KS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogCiAgICAgZm9yIChhdXRvJiByZW5kZXJlciA6
ICpzbG93UmVwYWludE9iamVjdHMpIHsKICAgICAgICAgYXV0byBsYXllciA9IHJlbmRlcmVyLmVu
Y2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgICAgIGlmICghbGF5ZXIg
fHwgIWxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGF1dG8gc2Nyb2xsaW5nU2NvcGUgPSByZWxldmFudFNjcm9sbGluZ1Njb3BlKHJlbmRl
cmVyLCAqbGF5ZXIpOworICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3Jv
bGxpbmdTY29wZShyZW5kZXJlciwgKmxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xsaW5nU2NvcGUpIHsKICAgICAgICAgICAg
IGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0gYXN5bmNTY3JvbGxhYmxlQ29udGFpbmVy
Tm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFTU0VSVChlbmNsb3NpbmdTY3JvbGxpbmdO
b2RlSUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMCBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNjcm9sbGluZ05vZGVJRChTY3JvbGxpbgog
ICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLnNjcm9sbGluZ05vZGVJ
RCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKIAotICAgIHJl
dHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpOworICAgIHJl
dHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChub2RlSUQpLmdldCgpLT5zY3JvbGxh
YmxlTGF5ZXIoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJC
YWNraW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIsIFJl
bmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM0LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRl
ckxheWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjYWxsZWQg
ZnJvbSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDkzOCw3ICs0OTQ5LDcgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxp
bmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWUK
ICAgICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVy
TWFwLCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIu
YmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIgKzQ5NzYsMTIgQEAg
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxs
U2Nyb2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQor
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1fc2Nyb2xsaW5nTGF5
ZXJzLmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVy
TGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxh
eWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5n
TGF5ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9sbENvbnRhaW5lckxh
eWVyID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CkBA
IC00OTc5LDcgKzQ5OTAsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIH0KIH0KIAot
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAg
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4
NWIyNjk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVhOWVmNTYwNGY0Nzdh
MzBjYmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgog
I2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTIxLDIwICsx
MjEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAgICAKLSAgICB2b2lk
IGFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgYWRk
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAgdm9pZCByZW1vdmVT
Y3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJMYXllckJhY2tpbmcm
KTsKIAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7
CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsK
IAotICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHJlbW92ZUxh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xpZW50JiBtX2Nocm9t
ZUNsaWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsK
KyAgICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xsaW5nTGF5ZXJzOwog
ICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAK
ICAgICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CkBA
IC0zNTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKIAotICAg
IHZvaWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9pZCBkaWRBZGRTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xh
eWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5n
Jik7CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUm
KTsKIAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCBzZXRU
cmFja3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFja2luZ1JlcGFpbnRz
ID0gdHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRh
YWY0YTA4MTUxYThjYjFkLi5kM2VjNDNhZGNhMzNjMjY1YzhjMGUwZjIzMGQ2MDQwMGJmNjM0MTk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCkBAIC05NSwxMSArOTUsMTcgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0
OjpkZXN0cm95TGF5ZXIoKQogdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpjcmVhdGVMYXll
cigpCiB7CiAgICAgQVNTRVJUKCFtX2xheWVyKTsKLSAgICBtX2xheWVyID0gbWFrZVVuaXF1ZTxS
ZW5kZXJMYXllcj4oKnRoaXMpOworICAgIC8vIEZJWE1FOiBIb29rIGluIG9wdGltaXphdGlvbiB0
byBvbmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUsIGlmIG5lY2Vzc2FyeS4KKyAgICBt
X2xheWVyID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGU+KCp0aGlzKTsKICAgICBz
ZXRIYXNMYXllcih0cnVlKTsKICAgICBtX2xheWVyLT5pbnNlcnRPbmx5VGhpc0xheWVyKFJlbmRl
ckxheWVyOjpMYXllckNoYW5nZVRpbWluZzo6U3R5bGVDaGFuZ2UpOwogfQogCitSZW5kZXJMYXll
clNjcm9sbGFibGUqIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNjcm9sbGFibGVMYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIgPyBtX2xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSA6
IG51bGxwdHI7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6aGFzU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX2xheWVyICYmIG1fbGF5ZXItPmlzU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTIwOCw5ICsyMTQsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xkU3R5bGUgJiYgc2Nyb2xsU25hcENvbnRh
aW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUoKm9sZFN0eWxlLCBuZXdTdHlsZSkpIHsK
LSAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IGxheWVyKCkpIHsKLSAgICAg
ICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgcmVu
ZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gdGhpcy0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNC
b2R5KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1l
Vmlldy51cGRhdGVTbmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyOSwxMCBAQCB2b2lkIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94
LT5sYXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3Jv
bGxTbmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBl
KCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAg
ICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
ICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRl
KCk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbFNu
YXBCb3gtPnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlzQm9keSgpIHx8IHNjcm9sbFNuYXBC
b3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
U2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2FkY2E2
ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLjg1Nzg2YzA4MmY5YWI0ZTFhNjZlM2JkYmM3
ZWJkMzg4NzgzMWZkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuaApAQCAtMjgsNiArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOwogCiBzdHJ1Y3QgUmVwYWludExheW91dFJlY3RzIHsKICAgICBMYXlv
dXRSZWN0IG1fcmVwYWludFJlY3Q7IC8vIFRoaXMgcmVjdCBpcyBjbGlwcGVkIGJ5IGVuY2xvc2lu
ZyBvYmplY3RzIChlLmcuLCBvdmVyZmxvdzpoaWRkZW4pLgpAQCAtNDcsNiArNDgsOCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogICAgIFJlbmRlckxh
eWVyKiBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXIuZ2V0KCk7IH0KIAorICAgIFdFQkNP
UkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyKCkgY29uc3Q7
CisKICAgICB2b2lkIHN0eWxlV2lsbENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlJiBuZXdTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUZyb21TdHlsZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGUwOTcx
YTc1YjY5Yjk1Nzk0ZWNlZGJmMWZhZjNhYjY0YTk4ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKQEAgLTAsMCAr
MSwyMDA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2Nh
cGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCisgKgorICogT3RoZXIgY29udHJpYnV0b3Jz
OgorICogICBSb2JlcnQgTydDYWxsYWhhbiA8cm9jK0Bjcy5jbXUuZWR1PgorICogICBEYXZpZCBC
YXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJkLmVkdT4KKyAqICAgQ2hyaXN0aWFuIEJpZXNpbmdlciA8
Y2JpZXNpbmdlckB3ZWIuZGU+CisgKiAgIFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5jb20+
CisgKiAgIFJvbGFuZCBNYWlueiA8cm9sYW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1naWVz
c2VuLmRlPgorICogICBKb3NoIFNvcmVmIDx0aW1lbGVzc0BtYWMuY29tPgorICogICBCb3JpcyBa
YmFyc2t5IDxiemJhcnNreUBtaXQuZWR1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJu
YXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUg
dGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEu
MSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBv
ciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBh
dCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBp
biB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAq
IGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93
IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJt
cyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBh
bmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZp
bGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5n
dGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5k
CisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMg
dGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMg
YWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2Nv
cGUoKQoreworICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOworICAg
IHJldHVybiArK2N1cnJlbnRTY29wZTsKK30KKworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihSZW5kZXJMYXllclNjcm9sbGFibGUpOworCitSZW5kZXJMYXllclNjcm9sbGFi
bGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
ckxheWVyTW9kZWxPYmplY3QpCisgICAgOiBSZW5kZXJMYXllcihyZW5kZXJlckxheWVyTW9kZWxP
YmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgLCBtX2luUmVz
aXplTW9kZShmYWxzZSkKKyAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAg
LCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
ZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQoreworICAgIG1f
aXNTZWxmUGFpbnRpbmdMYXllciA9IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAg
IGlmIChpc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
bV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisKKyAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7CisgICAgICAgIC8v
IFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBz
Y3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24g
PSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Nj
cm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRD
dXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGVsZW1lbnQtPnNldFNh
dmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKKyAgICB9Cit9CisKK1JlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZSgpCit7CisgICAgaWYgKGluUmVz
aXplTW9kZSgpKQorICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVz
aXplTGF5ZXJEZXN0cm95ZWQoKTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVB
cmVhKHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2
ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJl
bmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7CisKKyAgICAvLyBTZWUgdGhl
IGNvbW1lbnQgaW4gUmVuZGVyTGF5ZXI6OmRlc3Ryb3koKSB3aHkgdGhpcyBpcyBuZWVkZWQuCisg
ICAgUmVuZGVyTGF5ZXI6OmRlc3Ryb3koKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAg
cmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50
KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lk
dGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNpemUgY29u
dGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0
ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKwor
ICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVu
dHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVT
aXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisKK2ludCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
cmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXpl
KCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9s
bFNpemUud2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsSGVp
Z2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGUqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3Jk
aW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAg
IC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9t
eHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJv
d3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGlu
dCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYg
KGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8
aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVs
dGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0
ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEo
Y29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQo
KSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cGFuU2Nyb2xsRnJvbVBvaW50
KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKK3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25N
b3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93
bk1vdXNlUG9zaXRpb24oKTsKKyAgICAKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBs
YXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBt
b3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKKyAg
ICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGlmIChsYXN0S25v
d25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAw
KQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9u
OworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91
c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
IC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZp
ZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2Ug
Zm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNldFdpZHRoKDApOworICAgIGlmIChhYnMoZGVs
dGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQorICAgICAgICBk
ZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Ny
b2xsRGVsdGEoZGVsdGEpKTsKK30KKworLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJl
Y3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiog
c2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVu
ZGVyZXIoKS5wYXJlbnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRl
cmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBpZiAo
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7
CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSAr
IGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAg
ICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisK
KyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUg
bmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVt
YWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Cisg
ICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCku
cGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUg
ZnJhbWVzLgorICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6OlllcykpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKwor
ICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9z
Y3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYg
d2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJv
Z3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAgICAgICAgLy8gaGF2ZSBhbiBv
dmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0
IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
c2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAg
KnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAg
ICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50
IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqc3RhdGljX2Nhc3Q8UmVu
ZGVyTGF5ZXIqPih0aGlzKSA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBv
c2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Ny
b2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
KQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhh
dmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9y
KCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxP
ZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xs
T2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3Jv
bGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRD
dXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0
KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJl
aGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAg
ICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNj
cm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9s
bFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNj
cm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1
cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5v
bk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRp
b25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkK
KyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdT
Y3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxU
eXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvWFBvc2l0aW9u
KGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBB
bmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4
LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7Cisg
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOworICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Nyb2xsUG9zaXRpb24o
Y29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBp
ZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQoreworICAgIGlmICgh
bV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9s
bFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbi52YWx1ZSgpKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51
bGxvcHQ7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0Cit7CisgICAg
UmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlIHJlbmRlclRyZWVNdXRhdGlvbkRpc2Fs
bG93ZWRTY29wZTsKKworICAgIGF1dG8gaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSA9IFtdKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllcikgeworICAgICAgICByZXR1cm4gaXM8UmVuZGVyQm94PihsYXll
ci5yZW5kZXJlcigpKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpLmNh
bkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOworICAgIH07CisKKyAgICBpZiAoaW5j
bHVkZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYgJiYgaXNDb25zaWRlcmVk
U2Nyb2xsYWJsZSgqdGhpcykpCisgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZSo+KHRoaXMpOworCisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3Np
bmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsg
bmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9z
c0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUo
Km5leHRMYXllcikpIHsKKyAgICAgICAgICAgIEFTU0VSVChuZXh0TGF5ZXItPnNjcm9sbGFibGVM
YXllcigpKTsKKyAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXItPnNjcm9sbGFibGVMYXllcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxl
U2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFi
bGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAoaXM8
UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAg
ICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKCFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAm
JiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAg
IHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVy
Zmxvd1koKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICho
YXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xs
RWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/
IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNp
dHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGlj
aXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5n
IG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiBX
ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYg
KG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFy
KQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7
CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZs
b3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3Qg
PSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoc2hh
ZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxiYXI+IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBBU1NFUlQo
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIGFjdHVhbFJlbmRl
cmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOworICAgIGJvb2wgaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3du
Y2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKKyAg
ICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRo
aXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVt
ZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5h
dGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpS
ZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRp
b24pOworICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAg
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCku
d2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VO
b25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xs
YmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3Jv
bGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8g
bV9oQmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgd2lsbFJl
bW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKworICAgIHNjcm9s
bGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisK
K3N0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBz
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitTY3JvbGxh
YmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgp
IGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKworICAgIHJldHVy
biAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICByZXR1cm4g
cmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5leHRMYXllci0+c2Nyb2xsYWJsZUxheWVy
KCkgJiYgbmV4dExheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFya0FwcGVhcmFu
Y2UoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7
Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBv
cnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3Np
bmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVu
ZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywg
KmRvd25jYXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0
eWxlKCkpOworfQorI2VuZGlmCisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQg
c2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0
LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVu
dCh0b3VjaEV2ZW50KTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZEVuZFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9t
ZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpkaWRVcGRhdGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3Rp
ZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0
aW9uIHVwZGF0ZWQuCisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJv
bWVDbGllbnQ6OlNjcm9sbCk7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNp
YmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlOworICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFj
Y2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZgorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdkJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAg
ICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0
VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lk
dGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisg
ICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXIt
PmhlaWdodCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3Jv
bGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
SW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
cmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJl
Y3Q7CisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUp
IHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhp
dCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJl
c3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRl
c3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMo
bG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdl
dCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsK
KyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6
ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJl
c2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJl
c2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/
IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpOworICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0
IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3Zl
cmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9s
bGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRo
YXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYg
dGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
CisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3Qg
bGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVk
IHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0
aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxi
YXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAor
ICAgIC8vIHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJl
ZSB0byBnZXQgaXQgcmlnaHQuCisgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJh
ck9mZnNldCA9IHBhaW50T2Zmc2V0OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0
byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMu
CisgICAgICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8
fCAobV92QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAg
ICAgICBsb2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2lu
Z0NvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAg
ICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVMYXll
cigpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnModHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFy
cyB0d2ljZS4KKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMp
CisgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJP
ZmZzZXQ7CisKKyAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3Nhcnku
IFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBz
b21ldGltZXMKKyAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3Vycmlu
ZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBj
b250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0
aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFp
bnQgdGhlbS4KKyAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAo
bV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5l
ciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwg
dGhlIHdheSB1cCB0byB0aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3Jv
bGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisgICAg
CisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2Yg
dGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFp
bnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVj
dCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkp
IHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5l
ci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVy
IGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8g
c2VlIHdoYXQgaXMgYmVoaW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkK
KyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4
dCwgYWJzUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFJlc2l6
ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgaWYgKHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3Qg
cmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVC
eShwYWludE9mZnNldCk7CisgICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFn
ZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdD
b250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVz
aXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdl
KGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQg
dGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBw
cmVzZW50LgorICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRv
bSBlZGdlcyBvZiB0aGlzIGZyYW1lLgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAm
JiAobV92QmFyIHx8IG1faEJhcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1Jl
Y3QpOworICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0Owor
ICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0
aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250
ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5k
cmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKKy8vIFRo
aXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9u
cykuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7
CisgICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworCisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRh
dGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBP
ZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlz
UnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVz
IHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVl
ZAorICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXgg
KG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1w
ZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3Jvbmcu
IFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcg
cmVsYXRlZCBlbnRyeSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8g
Zml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMg
YmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdo
b3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1
NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcodHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZz
ZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVk
U2Nyb2xsT2Zmc2V0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAg
ICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9s
bE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAoaXNDb21wb3Np
dGVkKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Cisg
ICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQor
CisgICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgc2V0TmVlZHNQ
b3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0
ZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyKQoreworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6Y2FuUmVzaXplKCkgY29uc3QKK3sKKyAgICAvLyBXZSBuZWVkIGEgc3BlY2lhbCBjYXNlIGZv
ciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQorICAgIC8vIGhhc092ZXJmbG93Q2xp
cCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBjbGlwIHRoZWlyIGNvbnRlbnRzLCBz
bworICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcgdGhlbSBhbHNvLgorICAgIHJldHVy
biAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLmlzUmVuZGVySUZy
YW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZnNldCkKK3sKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgcG9zc2libGUgb24gZ2VuZXJhdGVkIGNvbnRlbnQgYnV0IGlzIG5v
dCByaWdodCBub3cuCisgICAgaWYgKCFpblJlc2l6ZU1vZGUoKSB8fCAhY2FuUmVzaXplKCkgfHwg
IXJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
VGhlIG9ubHkgY2FzZSB3aGVyZSByZW5kZXJlci0+ZWxlbWVudCgpLT5yZW5kZXJlcigpICE9IHJl
bmRlcmVyIGlzIHdpdGggY29udGludWF0aW9ucy4gRG8gdGhleSBtYXR0ZXIgaGVyZT8KKyAgICAv
LyBJZiB0aGV5IGRvIGl0IHdvdWxkIHN0aWxsIGJlIGJldHRlciB0byBkZWFsIHdpdGggdGhlbSBl
eHBsaWNpdGx5LgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKTsK
KyAgICBhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckJveD4oZWxlbWVudC0+cmVuZGVy
ZXIoKSk7CisKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwor
ICAgIGlmICghZG9jdW1lbnQuZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkubW91c2VQcmVzc2VkKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHpvb21GYWN0b3IgPSByZW5kZXJlci0+c3R5
bGUoKS5lZmZlY3RpdmVab29tKCk7CisKKyAgICBhdXRvIGFic29sdXRlUG9pbnQgPSBkb2N1bWVu
dC52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZ0LnBvc2l0aW9uKCkpOworICAgIGF1dG8gbG9j
YWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChhYnNvbHV0ZVRvQ29udGVudHMoYWJzb2x1dGVQb2lu
dCkpOworCisgICAgTGF5b3V0U2l6ZSBuZXdPZmZzZXQgPSBvZmZzZXRGcm9tUmVzaXplQ29ybmVy
KGxvY2FsUG9pbnQpOworICAgIG5ld09mZnNldC5zZXRXaWR0aChuZXdPZmZzZXQud2lkdGgoKSAv
IHpvb21GYWN0b3IpOworICAgIG5ld09mZnNldC5zZXRIZWlnaHQobmV3T2Zmc2V0LmhlaWdodCgp
IC8gem9vbUZhY3Rvcik7CisgICAgCisgICAgTGF5b3V0U2l6ZSBjdXJyZW50U2l6ZSA9IExheW91
dFNpemUocmVuZGVyZXItPndpZHRoKCkgLyB6b29tRmFjdG9yLCByZW5kZXJlci0+aGVpZ2h0KCkg
LyB6b29tRmFjdG9yKTsKKyAgICBMYXlvdXRTaXplIG1pbmltdW1TaXplID0gZWxlbWVudC0+bWlu
aW11bVNpemVGb3JSZXNpemluZygpLnNocnVua1RvKGN1cnJlbnRTaXplKTsKKyAgICBlbGVtZW50
LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKKyAgICAKKyAgICBMYXlv
dXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lkdGgoKSAv
IHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgbmV3
T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7CisgICAgICAgIGFkanVzdGVkT2xk
T2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKKyAgICB9CisgICAg
CisgICAgTGF5b3V0U2l6ZSBkaWZmZXJlbmNlID0gKGN1cnJlbnRTaXplICsgbmV3T2Zmc2V0IC0g
YWRqdXN0ZWRPbGRPZmZzZXQpLmV4cGFuZGVkVG8obWluaW11bVNpemUpIC0gY3VycmVudFNpemU7
CisKKyAgICBTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8U3R5bGVkRWxl
bWVudD4oZWxlbWVudCk7CisgICAgYm9vbCBpc0JveFNpemluZ0JvcmRlciA9IHJlbmRlcmVyLT5z
dHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Qm9yZGVyQm94OworCisgICAgUmVzaXpl
IHJlc2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnJlc2l6ZSgpOworICAgIGlmIChyZXNpemUgIT0g
UmVzaXplOjpWZXJ0aWNhbCAmJiBkaWZmZXJlbmNlLndpZHRoKCkpIHsKKyAgICAgICAgaWYgKGlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFr
ZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCBy
ZW5kZXJlci0+bWFyZ2luTGVmdCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
CisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5TWFyZ2luUmlnaHQsIHJlbmRlcmVyLT5tYXJnaW5SaWdodCgpIC8gem9vbUZhY3Rvciwg
Q1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNl
V2lkdGggPSByZW5kZXJlci0+d2lkdGgoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiBy
ZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJh
c2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNl
V2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9
CisKKyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhl
aWdodCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVt
ZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9y
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJn
aW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9
CisgICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChp
c0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRk
aW5nRXh0ZW50KCkpOworICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0
b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9CisKKyAgICBkb2N1bWVudC51cGRhdGVMYXlv
dXQoKTsKKworICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0
b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0
aGUgY3Vyc29yIGluIHZpZXcuCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21l
dHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIGlmICh0aGlzICE9IHJlbmRl
cmVyKCkudmlldygpLmxheWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1Rv
QW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOworCisgICAgLy8gRklYTUU6IHdoeSBpcyBpdCBP
SyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCisg
ICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBh
bmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KKyAgICB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKQoreworICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpOworCisgICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5kZXJH
ZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICB1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjphZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYg
Ym91bmRzKQoreworICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzLnVuaXRlKGVuY2xvc2lu
Z0ludFJlY3QoYm91bmRzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoUmVuZGVyTGF5ZXIqIGxheWVyKQoreworICAgIGZvciAoUmVu
ZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGNoaWxkLT5zY3JvbGxhYmxlTGF5ZXIoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKQoreworICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgp
OworICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9
CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5k
ZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gY2hpbGQtPnNjcm9sbGFibGVMYXllcigp
KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcyhjaGlsZCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpCit7CisgICAgcmVjdXJzaXZlbHlSZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKHRoaXMpOworICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIExheW91dFJlY3QgcmVjdCA9
IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOworICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKS5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxw
dHIpKTsgLy8gRklYTUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCisgICAgaWYgKHJlbmRl
cmVyKCkuaGFzQ2xpcCgpKQorICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLmNsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklY
TUU6IFJlZ2lvbnMgbm90IGFjY291bnRlZCBmb3IuCisgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qp
Cit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAg
cmV0dXJuOworCisgICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCk7CisgICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVs
bHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZv
clNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2lu
Zy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9CisKKy8vIEZJWE1FOiB0aGlz
IGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVy
biBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisK
Ky8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIo
KnRoaXMpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTWF5UmV2
ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8
IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9s
bGFibGU6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVybiBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Ny
b2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhp
cykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRp
b246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJm
bG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9
PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMo
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRp
Y1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93
U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBk
YXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNv
IHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZs
b3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9
IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKKworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVs
YXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkg
YXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBu
ZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihi
b3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xs
YmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNW
ZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxl
KCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0
eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7CisgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOworICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVy
ZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlz
YWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0
byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCisgICAgaWYgKG1faEJhciAmJiBuZWVk
c0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgp
ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCisg
ICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmIChtX3ZCYXIgJiYgbmVl
ZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkg
PT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAg
ICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKCFtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJs
ZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5
IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBi
b29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygp
OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZs
b3coKTsKKworICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdl
IGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBpZiAobV9oQmFyICYmIHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Cisg
ICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUo
KSwgVmVydGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVy
dGljYWxPdmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBt
YXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92
ZWQuCisgICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hv
cml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2Fs
U2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2
aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7
CisKKyAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNh
bFNjcm9sbEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGlj
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICB1cGRhdGVTZWxmUGFp
bnRpbmdMYXllcigpOworCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOworCisgICAgICAg
IGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwg
cmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7CisgICAg
ICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbV9p
bk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBi
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFu
Z2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92
ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOwor
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVy
KCkuaXNCb3goKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJl
bnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKKyAgICB9CisK
KyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAg
aWYgKG1faEJhcikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0
ZXAoY2xpZW50V2lkdGgpOworICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKKyAgICB9CisgICAgaWYgKG1f
dkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVu
dEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24o
Y2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOworICAgIH0KKworICAgIHVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJz
aXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckxheWVyKiBsYXllciwg
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCit7Cisg
ICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gY2hpbGQtPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGdlb21ldHJ5TWFwLCBm
bGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbChjaGlsZCwgZ2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICB9Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykKK3sKKyAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGRuJ3QgYmUgbmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdo
ZXJlCisgICAgLy8gdGhlc2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0
aGUgY2hlY2sgYmVsb3cgaXMgdmFsaWQuCisgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZs
YWdzKCk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlz
aWJsZSBkZXNjZW5kYW50cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKKyAgICAvLyBv
dXIgcmVjdGFuZ2xlcyBhcyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNo
YW5nZXMsIHdlIGFyZSBleHBlY3RlZCB0bworICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0
aW9ucyBhbnl3YXkuCisgICAgaWYgKCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zp
c2libGVDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIHBvc2l0aW9uQ2hhbmdl
ZCA9IHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKKyAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQorICAg
ICAgICBmbGFncy5hZGQoSGFzQ2hhbmdlZEFuY2VzdG9yKTsKKworICAgIGlmIChmbGFncy5jb250
YWluc0FueSh7IEhhc0NoYW5nZWRBbmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRB
bmNlc3RvciwgSXNPdmVyZmxvd1Njcm9sbCB9KSkKKyAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsK
KworICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0
aW9uKCkpCisgICAgICAgIGZsYWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2Vz
dG9yKTsKKworICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICBm
bGFncy5hZGQoSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCk7CisgICAgCisgICAgYm9v
bCBzaG91bGRDb21wdXRlUmVwYWludFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxv
d1Njcm9sbCwgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFp
bnRpbmdMYXllcigpOworICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25F
bXB0eSgpOworICAgIGJvb2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAg
JiYgKChzaG91bGRDb21wdXRlUmVwYWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZp
cnN0Q2hpbGQoKSk7CisgICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKKyAgICAgICAg
Z2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOworCisg
ICAgaWYgKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMpIHsKKyAgICAgICAgLy8gV2hlbiBzY3Jv
bGxpbmcsIHdlIGRvbid0IGNvbXB1dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVt
cHR5IGxheWVycy4KKyAgICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSkKKyAgICAgICAgICAgIGNs
ZWFyUmVwYWludFJlY3RzKCk7CisgICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNr
IHRoZSByZXBhaW50IGNvbnRhaW5lciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCisgICAgICAg
ICAgICBjb21wdXRlUmVwYWludFJlY3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgp
LCBnZW9tZXRyeU1hcCk7CisgICAgfSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkucGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBt
X3BhaW50c0VudGlyZUNvbnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hh
bmdlcywgdGhlIHJlcGFpbnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9tCisgICAgICAgIC8vIHZpc3Vh
bCB0byBsYXlvdXQgb3ZlcmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWlu
dCByZWN0cyBiZWNvbWUgaW52YWxpZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNl
ZSB3ZWJraXQub3JnL2IvMTg4MTIxKS4KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVk
IHJlY3RzIGFyZSBjb3JyZWN0LgorICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWlu
dExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFp
bnRSZWN0ID09IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVy
ZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigp
Lmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3Rz
KCkubV9vdXRsaW5lQm94ID09IHJlbmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCkpKTsKKyAgICB9CisKKyAgICByZWN1cnNpdmVs
eVVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwodGhpcywgZ2VvbWV0cnlNYXAsIGZsYWdz
KTsgICAgCisKKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgb3VyIHJlZmxlY3Rpb24gYXMgc2Nyb2xs
aW5nIGlzIGEgdHJhbnNsYXRpb24gd2hpY2ggZG9lcyBub3QgY2hhbmdlIHRoZSBzaXplKCkKKyAg
ICAvLyBvZiBhbiBvYmplY3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQg
aXRzZWxmIHByb3Blcmx5IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKKyAgICAvLyB1cGRhdGVk
IGFib3ZlLgorCisgICAgaWYgKG1fbWFycXVlZSkgeworICAgICAgICBib29sIG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICAgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRl
TWFycXVlZVBvc2l0aW9uKCk7CisgICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUHVzaEFu
ZFBvcE1hcHBpbmdzKQorICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9y
KHBhcmVudCgpKTsKKworICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkuaW52YWxp
ZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpOworfQorCitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9m
ZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2Vl
bihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCit7CisgICAgZm9yIChj
b25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0
LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2Nh
dGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVs
T2Zmc2V0KSksCisgICAgICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5k
UmVjdC5yZWN0KCkpLCB0cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAorewor
ICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9s
bFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAor
eworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNj
cm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkg
Y29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNj
cm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAorewor
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0g
WyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVy
UmVjdCkgeworICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9y
ZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIo
KTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0
LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVj
dEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5y
ZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMo
aGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVz
dExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50
ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5ID0gZmFsc2U7CisKKyAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVy
Zmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOworICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWln
aHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOworCisgICAg
aW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0g
Ym94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3Vu
ZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxP
cmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3Zl
cmZsb3cpKTsKKyAgICAKKyAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFz
aG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNl
dE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGlu
c2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBp
ZiAoIWJveC0+cGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5n
ZXQoKSkKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50
UmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShy
ZXBhaW50UmVjdCk7CisgICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFsaWRhdGVTY3JvbGxDb3Ju
ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29u
dHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgeworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Ny
b2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0
KTsKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5n
bGUocmVjdCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0FjdGl2ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNj
cm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAorewor
ICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKKworICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwg
cmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVy
ZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zm
c2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBj
b25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQu
bW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZy
ZW5kZXJlcigpLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9p
bnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOworICAgIHBvaW50
Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KG9mZnNldCkpOworfQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAoreworICAgIGlmICghaXNDb21wb3NpdGVkKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlE
Rm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitJbnRSZWN0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJs
ZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJs
ZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFj
ZTsKKyAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9u
ID09IEluY2x1ZGVTY3JvbGxiYXJzKQorICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJh
ckludHJ1c2lvbigpOworICAgIAorICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxl
U2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlz
aWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2
aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisK
K0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5n
cygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJ
WE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3Jv
bGxhYmxlQXJlYS4KKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9
IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkg
PCAwKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBl
bHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFj
aGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpKTsKKworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAg
c3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNl
dC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAg
IHJldHVybiBzdHJldGNoOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9
CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGFzdEtub3duTW91c2VQb3NpdGlv
bkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
cmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5p
bWF0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKK0ludFJlY3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRl
Rml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAor
eworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3Jv
bGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxB
bmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbElu
UHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9s
bEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigpLnNldHRp
bmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICgh
c2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7
CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVi
dWcsICJSZW5kZXJMYXllclNjcm9sbGFibGU6ICIgKyBtZXNzYWdlKTsKK30KKworCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVnaXN0
ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJl
cigpLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5h
ZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0
ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVy
ZXIoKS5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3Np
dGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9s
bGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvICIgPDwgcG9z
aXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9s
bCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7
CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICgh
Ym94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVu
c2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpo
aWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAg
ICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlp
bmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAg
ICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Ny
b2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3Jv
bGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0
ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZz
ZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBj
YXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0g
Y2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7
CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAg
ICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIAorICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09
IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGlu
ZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRp
b24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdo
ZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9z
aXRpb24gPSBuZXdQb3NpdGlvbjsKKworICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigp
LnZpZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXll
cnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkg
YSBzY3JvbGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJl
Y2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFu
Y2VzdG9yLgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJl
bmRlclRyZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9m
IGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hl
ZC4KKyAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisK
KyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygp
OworCisgICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAg
ICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhl
IHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3Np
dGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1
cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ug
d2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9z
aXRpbmcgbGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgor
ICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKworICAgICAgICAgICAg
ICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBv
c2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAg
ICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHBh
aW50LW9yZGVyIHBhcmVudC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQg
PSBwYWludE9yZGVyUGFyZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5z
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJT
Y3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxp
bmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMo
KTsKKyAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1l
KCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKKyAg
ICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5j
b250YWluZXJGb3JSZXBhaW50KCk7CisgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUg
aW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2Fy
ZXRSZWN0TmVlZHNVcGRhdGUoKTsKKyAgICAKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50
ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWlu
dExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYg
KHJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBy
ZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2
ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVx
dWlyZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkg
eworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwor
ICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9z
aXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFp
bnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5k
ZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVw
YWludCk7CisKKyAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBE
T00gZXZlbnRzLgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50
KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFy
Z2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmll
dy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVW
aWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5k
ZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAoY29tcG9z
aXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBz
dGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVz
Y2VuZGFudHMgdGhhdCBtYXkgbmVlZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRh
dGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXll
ciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21w
b3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKQorICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVy
cyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdB
bmNlc3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
d291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBh
ZmZlY3RlZCBieSBzY3JvbGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rv
ci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgp
OworICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhD
b21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29u
c3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4geyB9OworfQorCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29s
IGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwor
ICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCku
b3duZXJFbGVtZW50KCkpCisgICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVu
ZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisg
ICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7
CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOworICAgIAorICAgIEFTU0VSVChtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJl
YSh0aGlzKSk7CisgICAgCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9
IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFt
ZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUg
JiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVk
IG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2Nl
bGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAg
ICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3Zl
ZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3Zl
cmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAo
IW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFyZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92
QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOworICAgIH0KKyAgICAK
KyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92
ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwor
CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVj
dHMucmVzaXplcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3Jv
bGxDb3JuZXJTdHlsZSgpCit7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSBy
ZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5lciA9IHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1
ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5z
dHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVhclNj
cm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Njcm9s
bENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRl
clNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7
CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBw
YXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwor
ICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAgICBp
ZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3JuZXIt
PnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAg
IFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIoKSk7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJl
c2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAo
IXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1v
dmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEg
Y2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRl
cmVyKCkpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxz
ZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFt
X3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxs
cHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAgUmVmUHRyPElt
YWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7
CisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIp
IHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1h
Z2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5l
ckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29y
bmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJ
bWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVD
b3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVz
aXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNp
emVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNv
cm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAg
ICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXpl
clNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3Qu
aGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQu
c2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29ybmVySW1h
Z2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAgIGNvbnRl
eHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghcmVz
aXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCitSZW5kZXJMYXll
clNjcm9sbGFibGU6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94
PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBi
b3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZElu
dFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOworCisg
ICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWln
aHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92
QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10o
Y29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAm
JiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisgICAgYm9vbCBo
YXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIo
bV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIg
PSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29sIHBsYWNlVmVy
dGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIg
PSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVy
dGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9u
dGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAg
IEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Cisg
ICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlz
IHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAg
ICAgIH07CisgICAgfQorCisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAg
aWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFko
KSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2
b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhl
TGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSAr
IGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0
Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxi
YXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNp
emUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJl
Y3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6
ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAg
ICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9u
aW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7
IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUu
aGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50
UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAt
IGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNB
dm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29y
bmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9s
bENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNr
bmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAg
ICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNz
LCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZsb3dDb250cm9s
c0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1
dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jp
em9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJl
Y3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIu
aW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChy
ZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVNYXJxdWVlKCkKK3sKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIC8vIEZJWE1F
OiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0
aCBiaXRmaWVsZHMuCisgICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsK
KyAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBv
c2l0aW9uOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNyZWF0ZU9y
RGVsZXRlTWFycXVlZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJx
dWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVC
ZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21h
cnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+
KHRoaXMpOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOworICAgIH0g
ZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVT
Y3JvbGxpbmdTY29wZXMoTGF5b3V0UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgLy8gU3VidHJh
Y3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9u
ZWRQYXJlbnQ7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYg
KHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVy
KCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHBvc2l0aW9uZWRQ
YXJlbnRTY3JvbGxhYmxlID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUxheWVyKCkpIHsK
KyAgICAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRo
ZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCisgICAgICAgICAg
ICBpZiAocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRp
b25lZFBhcmVudFNjcm9sbGFibGUtPnNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgICAgICAgICBp
ZiAocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3NpdGlv
bmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZS0+cmVu
ZGVyZXIoKSkpIHsKKyAgICAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0
PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPnJlbmRlcmVyKCkpLm9m
ZnNldEZvckluRmxvd1Bvc2l0aW9uZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOworICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPmNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3Bl
ID0gcG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGUtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkg
eworICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlID0gcGFyZW50TGF5ZXIt
PnNjcm9sbGFibGVMYXllcigpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50TGF5ZXJTY3JvbGxh
YmxlLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsUG9zaXRp
b24oKSk7CisKKyAgICAgICAgICAgIEFTU0VSVChwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKSk7CisgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
cGFyZW50TGF5ZXJTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXIg
PSBwYXJlbnRMYXllci0+cGFyZW50KCk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJMYXllclNj
cm9sbGFibGUqIGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZSA9IG51bGxwdHI7CisgICAgICAgICAg
ICB3aGlsZSAoZW5jbG9zaW5nTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuY2xvc2lu
Z0xheWVyU2Nyb2xsYWJsZSA9IGVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKSkpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuY2xvc2luZ0xheWVy
ID0gZW5jbG9zaW5nTGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAg
ICAgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJTY3JvbGxh
YmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7Cisg
ICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxp
bmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250ZW50c1Nj
cm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlmICghbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2Jv
eFNjcm9sbGluZ1Njb3BlKQorICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBtX2Jv
eFNjcm9sbGluZ1Njb3BlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyU3R5bGUoKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAg
ZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KKyAgICBp
ZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZC
YXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NmM3NmJiMmIzMjc5YmFkYjA2ZWQ2ZDc3MTgwNzA3NDAwNDZkMjE3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0w
LDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29w
eXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoK
KyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3Mu
Y211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAg
IENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEpl
c3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBp
bmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NA
bWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUg
bWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEu
b3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5o
dG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUu
ICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZp
bGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMg
KHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIK
KyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRl
Y2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRo
ZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0
aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3Qg
ZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAq
IHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0
aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0RF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSk7CisKK3VzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7CisKK2NsYXNzIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZSBmaW5hbAorICAgIDogcHVibGljIFJlbmRlckxheWVyCisgICAgLCBwdWJs
aWMgU2Nyb2xsYWJsZUFyZWEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVB
UF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CitwdWJsaWM6CisgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7
CisKKyAgICBleHBsaWNpdCBSZW5kZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZSgpOworCisgICAgUmVu
ZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQor
CisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29u
dGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRl
bnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Cisg
ICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9p
bnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXll
cnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1
cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFy
ZWEgPSBudWxscHRyKTsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxU
eXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
KTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5p
bWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRl
ZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5v
KTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KKyAgICB2b2lkIHNj
cm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Ny
b2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGlu
Zzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9s
bFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisKKyAgICB2b2lk
IHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwor
ICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAg
Ly8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxl
LgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3
aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFy
ZWEuCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworCisgICAgdm9p
ZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikg
ZmluYWw7CisKKyAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBj
b25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9v
bCk7CisKKyAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7
CisKKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jp
em9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorCisgICAgYm9vbCBob3Jpem9udGFs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdmVydGljYWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisKKyAgICAvLyBTY3JvbGxhYmxl
QXJlYSBvdmVycmlkZXMKKyAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQor
ICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBm
aW5hbDsKKyNlbmRpZgorCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNl
bmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5k
U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNj
cm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNj
cm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3Q7CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBp
bnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3Zl
cmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJ
bnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgSW50
U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGlu
Z092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKworICAgIHZvaWQgdXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKKyAgICBib29s
IGNhblJlc2l6ZSgpIGNvbnN0OworICAgIHZvaWQgcmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYsIGNvbnN0IExheW91dFNpemUmKTsKKyAgICBib29sIGluUmVzaXplTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CisgICAgdm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9v
bCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQorCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgdm9pZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZvaWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKTsKKyAgICB2b2lkIHJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKKworICAg
IHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVj
dCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciog
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3Jv
bGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9s
bGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4g
VXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgorICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBi
b3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0K
KyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQorCisgICAgYm9vbCBzY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICBib29sIGNvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9CisKKyAgICBTdHJpbmcg
ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBlbnVtIFVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKKyAgICAgICAgSXNPdmVyZmxvd1Njcm9sbCAgICAg
ICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAgICAgICBIYXNTZWVuVmlld3BvcnRDb25z
dHJhaW5lZEFuY2VzdG9yICAgICAgPSAxIDw8IDEsCisgICAgICAgIEhhc1NlZW5BbmNlc3Rvcldp
dGhPdmVyZmxvd0NsaXAgICAgICAgICA9IDEgPDwgMiwKKyAgICAgICAgSGFzQ2hhbmdlZEFuY2Vz
dG9yICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAzLAorICAgIH07CisgICAgdm9pZCB1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0
PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CisKKyAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisK
KyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZy
YWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJik7CisK
KyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMo
KSBjb25zdDsKKworICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXll
ckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludElu
RnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwor
ICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAg
IC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQorICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRh
dGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0
aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAg
ICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZp
bmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGlu
Z05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxi
YXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVl
bEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJh
cnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
dm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRp
ZgorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJy
aWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3Jv
bGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpOyAgCisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25z
dCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQo
Ym9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhj
b25zdCBJbnRTaXplJik7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAg
IHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgp
OworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6
ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVy
UmVjdCk7CisKKyAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgeworICAgICAgICBJbnRS
ZWN0IGhvcml6b250YWxTY3JvbGxiYXI7CisgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxi
YXI7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyOworICAgICAgICBJbnRSZWN0IHJlc2l6
ZXI7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyLmlzRW1wdHkoKSA/IHNj
cm9sbENvcm5lciA6IHJlc2l6ZXI7CisgICAgICAgIH0KKyAgICB9OworICAgIE92ZXJmbG93Q29u
dHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVy
Zmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0
OworCisjaWYgMAorcHJpdmF0ZToKKyAgICBib29sIHVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9u
U2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiA9IG51bGxwdHIpOwor
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25T
ZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4pOworCisgICAgdm9pZCBw
YWludEJhY2tncm91bmRGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGlj
c0NvbnRleHQmLCBHcmFwaGljc0NvbnRleHQmIHRyYW5zcGFyZW5jeUxheWVyQ29udGV4dCwKKyAg
ICAgICAgY29uc3QgTGF5b3V0UmVjdCYgdHJhbnNwYXJlbmN5UGFpbnREaXJ0eVJlY3QsIGJvb2wg
aGF2ZVRyYW5zcGFyZW5jeSwgY29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvJiwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyKTsKKworICAgIHZvaWQgcGFpbnRGb3JlZ3JvdW5kRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NDb250ZXh0JiB0cmFuc3Bh
cmVuY3lMYXllckNvbnRleHQsCisgICAgICAgIGNvbnN0IExheW91dFJlY3QmIHRyYW5zcGFyZW5j
eVBhaW50RGlydHlSZWN0LCBib29sIGhhdmVUcmFuc3BhcmVuY3ksIGNvbnN0IFJlbmRlckxheWVy
OjpMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2Jq
ZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7CisKKyAgICB2b2lkIHBhaW50TGF5ZXJDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNl
dDxQYWludExheWVyRmxhZz4pOworICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZv
JiwgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNp
emUmIHRyYW5zbGF0aW9uT2Zmc2V0ID0gTGF5b3V0U2l6ZSgpKTsKKworICAgIGJvb2wgc2V0dXBG
b250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiwgYm9vbCYgZGlkUXVhbnRp
emVGb250cyk7CisjZW5kaWYKKworICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAgIHZvaWQg
Y3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0U2Nyb2xs
T2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KTsK
KyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gS2Vl
cHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBl
dmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9p
blJlc2l6ZU1vZGUgOiAxOworICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwor
ICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEgOiAxOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcgOiAxOworI2VuZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
OiAxOworCisgICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25h
bDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBU
aGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3Jv
bGxTaXplOworCisgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFp
ciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3Jv
bGxiYXJPZmZzZXQ7CisKKyAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJr
YWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAg
TWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5n
U2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAg
ICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6
ZXIuCisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRS
ZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVy
biBsYXllci5sYXllclR5cGUoKSA9PSBXZWJDb3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpT
Y3JvbGxhYmxlOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3
Mzk3MDExZWJiM2QyMTk0OGUyNC4uZTQ1NmM2YzhhNTU4MzIwNGY2M2FlZmI2OGU4YmMwMzBiNmQ3
NjFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAt
NDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91
dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgpAQCAtODc5LDEwICs4NzksOSBAQCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Ny
b2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29u
c3QKIHsKICAgICBhdXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXll
cikKKyAgICBpZiAoIWxheWVyIHx8ICFsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObyk7CisgICAgcmV0dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6Tm8pOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKQpAQCAtODkyLDcgKzg5MSwxMCBAQCBib29sIFJlbmRlckxpc3RCb3g6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQogCiBib29sIFJlbmRlckxpc3RCb3g6Omhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQogewotICAgIHJldHVybiBlbmNsb3Np
bmdMYXllcigpICYmIGVuY2xvc2luZ0xheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKTsKKyAgICBhdXRvKiBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAg
aWYgKCFsYXllciB8fCAhbGF5ZXItPnNjcm9sbGFibGVMYXllcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIGxheWVyLT5zY3JvbGxhYmxlTGF5ZXIoKS0+aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6
OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2ZTZiZmJlNDBhNjQ0
MTE2NDQ1OWFhNjc4MGQ4Yi4uMWJhNWE2MDIxZThkMjEzYWJkNDI0ZTdlZWY1MjM4NGJmNDAxOTBj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcApAQCAtNDks
MTQgKzQ5LDE0IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE1hcnF1
ZWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAotUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIp
CitSZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbGF5
ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1h
cnF1ZWU6OnRpbWVyRmlyZWQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuaAppbmRleCAxYzc4ODQ5NWUwZTg4NTc1ZTgwYmY5MzA4YTJmNDk0ZmI0YTYyOGQ1Li4wODRh
ZDMzNzc0ODZkZjljZTgzMjU2NjY2ODU0NTJjNDdiOTgyMzM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKQEAgLTQ5LDEzICs0OSwxMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlckxheWVyOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOwogCiAvLyBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIGF1dG8tc2Nyb2xsaW5nIGZvciA8bWFy
cXVlZT4KIGNsYXNzIFJlbmRlck1hcnF1ZWUgZmluYWwgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFJlbmRlck1hcnF1ZWUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyKik7CisgICAgZXhwbGljaXQgUmVu
ZGVyTWFycXVlZShSZW5kZXJMYXllclNjcm9sbGFibGUqKTsKICAgICB+UmVuZGVyTWFycXVlZSgp
OwogCiAgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdDsKQEAgLTgwLDcgKzgwLDcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdGltZXJGaXJlZCgpOwogCi0gICAgUmVuZGVyTGF5ZXIqIG1fbGF5
ZXI7CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBtX2xheWVyOwogICAgIFRpbWVyIG1fdGlt
ZXI7CiAgICAgaW50IG1fY3VycmVudExvb3AgeyAwIH07CiAgICAgaW50IG1fdG90YWxMb29wcyB7
IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3MTEzZjVj
MzI5MDBlZDc2NGIzNmU0NDc5Yjk2MDdmMDc3OWIxMmY4Li45NTc1NDFhNmJlODFmMWMwYzZjY2Q3
Y2E0NmY1Y2JmMWMzYjZkOWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hl
ZEltYWdlQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50
OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3Vs
ZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0
b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVj
dG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBlYjA1NjliMThmOWQxYjU0NmNjNzRmOTk3MmQxYTMx
ZTFmNDBjZWZlLi5iYzFhOGVlMDI3Zjk1ZmZlZTVjNzE1MzU4YzY4MGI3ODZjMTgzZTgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQwMCwxNyArNDAwLDIyIEBAIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsCiAgICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5k
ZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVy
ZXItPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVy
biBSZW5kZXJCbG9ja0Zsb3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyLCBzdG9wRWxlbWVudCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KTsKIH0K
IAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xs
TG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOwot
ICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlv
biwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJl
dHVybiB0cnVlOworICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJl
ci0+c2Nyb2xsYWJsZUxheWVyKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAg
cmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZhM2Q1
NjgyZDc5MzU2OTVjMjNmNjBjLi4xZjZkMzFmMGQ0OGFjMDY3ZTE1YjM5ZDBjYjU0NGU2OWRkNDM3
YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgot
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0TWFya2VyLmgiCkBAIC01OTksMjAgKzU5OSwyMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
YwogICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAgICB9
CiAKLSAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAg
ICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxYICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Ny
b2xsT2Zmc2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91
bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xs
V2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3Jv
bGxXaWR0aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChs
YXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgp
KQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWln
aHQoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlTGF5ZXIo
KTsKKyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxPZmZzZXQoKS54KCk7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpLnkoKSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkg
JiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpKQorICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0
aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgaWYgKGxheWVy
LnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgdHMg
PDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpOwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1l
ID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYmFyVGhlbWUu
aXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAg
IGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBt
YWNUaGVtZSA9ICpzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVt
ZSk7Ci0gICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJlY3Rpb25SVEwoKmxheWVy
LnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0
RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQogICAg
ICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGlyZWN0aW9uIjsKICAg
ICAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
CmluZGV4IDE3MjQ4Y2RhMzRhYTZiNmE3MTk2ZjdmMDA2ZjIwODVmYTlhYjQyNmMuLjM0NzA2ZDY2
ZWUwMDMzNTMwMWVhMDZkMTAyNTQyMTU3NzM2NjhlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0yOCw4ICsyOCw4IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgpAQCAtMzI5LDggKzMyOSw4IEBAIHZvaWQgUmVuZGVyV2lk
Z2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRS
ZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9
CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAg
bGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlmIChoYXNMYXll
cigpICYmIHNjcm9sbGFibGVMYXllcigpICYmIHNjcm9sbGFibGVMYXllcigpLT5jYW5SZXNpemUo
KSkKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyKCktPnBhaW50UmVzaXplcihwYWludEluZm8uY29u
dGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5mby5y
ZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wg
aXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMwNTNh
NGRkYTIwMDhlZmQ3YTY2ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgyYjliZTRhNzBhZTk3ZDg1ZjZj
OTFkMjQxM2NlNmJiZjc4MGU3OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTE1NSw2ICsxNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKQEAgLTE5MDYsNyArMTkwNyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElu
dGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBlbGVtZW50LCBk
b3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgp
KQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
Ci0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhID0gYm94LnNjcm9sbGFibGVMYXllcigpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNj
cm9sbGFibGVBcmVhKQpAQCAtMjkwMSw3ICsyOTAyLDcgQEAgRXhjZXB0aW9uT3I8U2Nyb2xsYWJs
ZUFyZWEqPiBJbnRlcm5hbHM6OnNjcm9sbGFibGVBcmVhRm9yTm9kZShOb2RlKiBub2RlKSBjb25z
dAogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAg
IHNjcm9sbGFibGVBcmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVy
KCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5zY3JvbGxhYmxlTGF5
ZXIoKTsKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2Rl
VHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5kZXgg
ODU4NGMyMzFmZWY4YzhkOGI3MDZlOGY5NmVkMDhkNzM4ODUzZGQ1MC4uYTA0YjBhYzk5MGY4ZmI4
OTI1YWZjYWQwZjI0YTViNzFiNzA0MTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TUhUTUwubW0KQEAgLTUyLDcgKzUyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQXV0b2NhcGl0YWxp
emUuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5
ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1dBS1dpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVz
c2FnZS5oPgogI2VuZGlmCkBAIC03Nyw3ICs3NywxMSBAQCAtIChpbnQpc2Nyb2xsWE9mZnNldAog
ICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+
aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25j
YXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQo
KS54KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVu
ZGVyQm94PigqcmVuZGVyZXIpLnNjcm9sbGFibGVMYXllcigpOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKTsKIH0KIAogLSAoaW50KXNjcm9sbFlPZmZzZXQKQEAgLTg4LDEw
ICs5MiwxNSBAQCAtIChpbnQpc2Nyb2xsWU9mZnNldAogCiAgICAgaWYgKCFpczxXZWJDb3JlOjpS
ZW5kZXJCbG9ja0Zsb3c+KCpyZW5kZXJlcikpCiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXIt
PmNvbnRhaW5pbmdCbG9jaygpOworCiAgICAgaWYgKCFpczxXZWJDb3JlOjpSZW5kZXJCb3g+KCpy
ZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
LmxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikuc2Nyb2xsYWJsZUxheWVy
KCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOwogfQogCiAtICh2b2lk
KXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5CkBAIC0xMTAsNyAr
MTE5LDEwIEBAIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9mZnNldDoo
aW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6KEJPT0wpYWRqCiAgICAgaWYgKCFyZW5kZXJlci0+aGFz
T3ZlcmZsb3dDbGlwKCkgfHwgIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5k
ZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdl
YkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5zY3JvbGxhYmxlTGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCiAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAg
ICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2Vi
Q29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CmluZGV4IGVmNzM1MDA0ZWE2ZDA1ZTkxMjg2ZWNmYTZmMGY4ZDQwMTA1ZTY2ZGUuLjVlNTBkMjJj
YWZhYWM2OTliMmVkMGVjNzQyMTEyNTUzYjA3ZWRkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTQsNyArOTQsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9QbHVnaW5EYXRhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyZWREb2N1bWVudE1hcmtlci5oPgpAQCAtNzM3LDEwICs3MzcsMTAg
QEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICAg
ICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6
OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2Vs
ZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwog
I2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0xheWVyKCk7Ci0gICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpIDogbnVs
bHB0cikgeworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCkt
PnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3Qp
LCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdl
YkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Ny
b3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAg
ICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBk
YXRlKCk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRh
dGVBcHBlYXJhbmNlKCk7CiAgICAgICAgIH0KQEAgLTc1NywxMCArNzU3LDEwIEBAIC0gKHZvaWQp
X3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlIHdpdGhJbnNldDooQ0dG
bG9hdClpbnNldAogCiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkp
IHsKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2lu
Z0xheWVyKCk7Ci0gICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNjcm9sbGFibGVMYXllcigpIDogbnVsbHB0
cikgeworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNj
cm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBp
bnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNv
cmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3Nz
T3JpZ2luU2Nyb2xsaW5nOjpZZXN9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogCiAgICAgICAgICAg
ICBhdXRvIGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CiAgICAgICAgICAgICBpZiAoY29yZUZyYW1l
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGJmNjhhNzE0NWRhODk4ZWQ0
ZTdjZTc0ZTYxNTdmMDBiZDcwZjdhNjMuLmE0ZTc2M2I0NTg5MmI5OTBiMzNjNjYzOGQ5ZDAyZjY5
MjBiOGY3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC0xNDUsNyArMTQ1
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UG9wdXBNZW51V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJM
YXllclNjcm9sbGFibGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CkBAIC0yMDM1LDEwICsyMDM1LDEyIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShX
UEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IGRldmljZVNjYWxlRmFjdG9yKCk7CiAgICAgICAgIEludFNpemUgbG9naWNhbFNjcm9sbERlbHRh
KC1kZWx0YVggKiBzY2FsZUZhY3RvciwgLWRlbHRhWSAqIHNjYWxlRmFjdG9yKTsKIAotICAgICAg
ICBSZW5kZXJMYXllciogc2Nyb2xsYWJsZUxheWVyID0gbnVsbHB0cjsKKyAgICAgICAgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOwogICAgICAgICBpZiAo
bV9nZXN0dXJlVGFyZ2V0Tm9kZSAmJiBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhj
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAgICAgICAgICAgaWYgKGF1
dG8qIGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChsYXllci0+c2Nyb2xsYWJsZUxheWVyKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlTGF5
ZXIoKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogCiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTFlNzcxZTUwNDFi
ZTliODUyZWE0Y2YwNmI0ODJkZjk0NTFhNGY2NC4uZjQ2ZjZmMzRlYjE2OGQ2NWNmOGM3ZGE1NzJm
MjQ3MTIxM2QzZTZkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA4LTE2ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRl
IHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRl
ckxheWVyICYgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisgICAgICAgIFJlbW92ZSB1bm5lY2Vz
c2FyeSBnbGliIGV4cGVjdGF0aW9uIGZvciB0aGUgdGVzdAorICAgICAgICBmYXN0L3Njcm9sbGlu
Zy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLmh0bWwuCisgICAgICAgIChUaGlzIGlzIHVu
cmVsYXRlZCB0byB0aGlzIGJyYW5jaCwgYW5kIHNob3VsZCBiZSBmaXhlZCBiZWZvcmUpCisKKyAg
ICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgcy9SZW5kZXJMYXllci9SZW5kZXJMYXllclNjcm9sbGFibGUvCisg
ICAgICAgICogcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJp
bmctdXBkYXRlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFj
LXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgcy9SZW5kZXJMYXllci9SZW5kZXJMYXllclNjcm9sbGFibGUvCisKIDIw
MjAtMDgtMTYgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBPcElzT2JqZWN0T3JOdWxsIGZyb20gQ2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVj
b2RlKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmlt
YXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggOTM2YmVk
MjVjMjcxN2Y1MjFkYzU2ZDUzMjYzMDlkYjg2OTRhMjYxNS4uOWEzNDY3NWQxZjQ2Mjc0NzAwYmQ0
N2YyYmRmZWM1MjdjY2MxYjY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3Rl
ZC50eHQKQEAgLTEsMTQgKzEsMTQgQEAKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzog
bW91c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzog
bW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1v
dXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3Vz
ZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNj
cm9sbGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKIENPTlNPTEUg
TUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKLUNPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKLUNP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIK
K0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5Db250
ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlSXNE
b3duSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9s
bGFibGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCiBDT05TT0xF
IE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCitDT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGhp
cyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMt
dHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMt
ZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyYTM4Y2EyNzNj
NmQ3MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9z
dGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251
bGwKQEAgLTEsNiArMCwwIEBACi1QQVNTIGNvdW50IGlzIDAKLVBBU1MgY291bnQgPCA2IGlzIHRy
dWUKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Nj
cm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRz
LWV4cGVjdGVkLnR4dAppbmRleCA2MGNkYjY2YzFmMGEyYjEwN2Y1ODQxN2IzMzJlZjg3ZjYxNTFm
OTQyLi40NTg3ZjliNWQ0ZTE1OWRiOGMzNWM5MjRjMDQwNmVlYWZlZDYzY2UxIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmlt
YXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBl
Y3RlZC50eHQKQEAgLTEsMTEgKzEsMTEgQEAKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBt
b3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXll
cjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6
IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllcjogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5k
ZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVy
TGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitD
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVu
dEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlzRG93
bkluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FH
RTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCitD
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50
QXJlYQogVGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406712</attachid>
            <date>2020-08-17 06:00:01 -0700</date>
            <delta_ts>2020-08-17 06:45:05 -0700</delta_ts>
            <desc>Patch, v2</desc>
            <filename>bug-60305-20200817145959.patch</filename>
            <type>text/plain</type>
            <size>367038</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1NGM1MDg0NDNkNjBi
YmNjYzM5YTk4OWM5MTY1OTE0MjhhNDE0ZS4uZGE5ZDRiYTNmOGFmNDMxNjU4ZGZmZmQ5YWU4NDU5
Y2EyZjUwNjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMyBAQAorMjAyMC0wOC0xNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIFNvdXJj
ZXMudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdG8uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omdl
dFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVsRXZl
bnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6Cisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpv
dmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9y
Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRBbmRDb21t
aXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRy
aW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVlbEV2ZW50
TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9s
bGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNj
cm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFp
bnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25z
dHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkRm9yU2Nyb2xs
YWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0Zv
clNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVNYXJxdWVlRm9yU2Ny
b2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVw
ZGF0ZVNjcm9sbGluZ1Njb3Blc0ZvclNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxv
d2VkRm9yU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmF1dG9z
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHNGb3JTY3JvbGxhYmxlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFBhaW50
T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllclR5cGUgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93
U2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsZWRCeU92ZXJmbG93
U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5n
Tm9kZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9y
U2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1
cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNyZWF0ZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJy
ZW50U2Nyb2xsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxv
Z2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTA4LTE3ICBZdXN1a2UgU3V6
dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCA2MmRhZDE1MWY2NDNiMDE3NTA1NjZlYTAwYmRiYmI0MGFjYTExNGFjLi41YTMy
ZjRjYjcxNzY0OTk3YTk5MDAyMDg4MGQ5MDMxYzY3YTE2MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5n
IGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBS
ZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNj
cm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFu
Z2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMDgtMTIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgbmVlZCBmb3IgZGVmaW5pbmcgVVNFX05F
V19CVUlMRF9TWVNURU0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3
YjgwZDFjZjc0ZjJlM2U4YWJlOWZjOThjNTUwNjIzLi4yYzZlYWFjMTM1NzFlMzdiYTM1YmRkNjUx
Y2VhOTM0NzNmYmY0OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxp
YS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxh
eWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0
IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFibGUu
CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgor
CiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IGE2Y2E1NDEwYzQxYWZmZWIxYmI1ZWQxMDZhNmFkMTkzYjNiYWYz
NzguLmMyZjczYmIyYzlkZDdlMmM3MTk5YzQ1NTA0MTA1NDNlOGZiNTMxOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTM5MSw2ICsxMzkxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQxODAxYWEw
MWZlOTI4MzBiM2VhODI2ZTY5N2JkYWI4NWZjODRmOTcuLmVhYmViMGViYTI4ZjIwNTIyOTMwMjY2
NTVmYjA3MjJmNDg5OTI0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTI4LDYgKzIxMjgsNyBAQCBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0
U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmM2ODgxYmU4
MjA4ZTIwZDMzZTI0NmQyNTZlNzY5YmZkMjdmNGYwYS4uYTljNzhjZDMxYjA0Mjc4YjliYzk2NGNi
OThjZDM2OGI3N2ZlNTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA4LDYgKzMwOCw3IEBACiAJCTBGNTgwQjBFMEYxMkEy
NjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTgwQ0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRjBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5Njkz
OTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAv
KiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUzMTBGNjVEN0Ew
MDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTI1LDYgKzU5MjYsOCBAQAogCQkwRjU4MENG
QTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyTGF5ZXJCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZD
MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJM
YXllclNjcm9sbGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkMw
RjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBG
QTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBB
bmltYXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5p
bWF0aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc3Niw2
ICsyODc3OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
RmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovLAorCQkJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0
MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQx
RDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVF
ODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi8sCkBAIC0zMzEzNyw2ICszMzE0
Miw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRl
ckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDBkODM4ZDU3NDgxZmI0N2JkOWZlMjlkOTdhNWRjMDlhYjFkOGNhYjYuLjNiZjQ2Zjcz
NmU3YTUyZTVhOWQ4ZDIxOTk4ZjIwYzJhYzUyYWJiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkxNiw3ICszOTE2LDggQEAgU2Nyb2xsYWJsZUFyZWEq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxl
KCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94LmxheWVyKCkpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3Jv
bGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihi
b3gubGF5ZXIoKSkpOworICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94Lmxh
eWVyKCkpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1
MWVjNDQ0Y2QuLmM1NjgyMDVjMWRhODUyMDMzZTFkYTBkMjYxNjYyNzkxYjJjM2Y1ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFz
c0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVl
VXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdl
cihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZp
b3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpO
bzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUo
dHJ1ZSk7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5s
YXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVu
ZGVyZXItPmxheWVyKCkpLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsK
ICAgICB9CiB9CiAKQEAgLTEzMzIsOCArMTMzMiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xs
VG9wKGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIo
bmV3VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6
OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJlci0+bGF5ZXIo
KSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVy
LT5sYXllcigpKS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5
N2U2NmY4ZjhhZjA1ZmEwMjc3NmEwMDg1MGY1ZjU1YWU4NjFmM2YuLjcwZDk5OWE3YjI4NzUxYzg4
YzZjOTY2MTA2NmY1N2Y5YTk0NjYxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTI0MTIsOSArMjQxMiwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIg
PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikgPyBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA6
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUo
cmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNo
b3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRlMmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNjMjcxMjc1
Li4zODA4YzZiMjM1YzZjMDMwZGE3NDFiZjg2MTRhNjUyNzI3MDkwZWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc1LDkgQEAg
UmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5s
YXllcigpLT5tYXJxdWVlKCk7CisgICAgYXV0byogbGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpOworICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5t
YXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZm
ZDQ0ZTFjNDQyNjc4NmEzLi44OGM4ODQ0NmM5NGQ2MjljMGY2ODk1MWQzZTg2Y2ZjZjNjZDc0NjIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3
ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDYsMTMgKzI0NiwxNCBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvKiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWlubmVyVGV4dFJlbmRlcmVyKQorICAgIGlmICghaW5uZXJUZXh0
UmVuZGVyZXIgfHwgIWlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVyZXItPmxheWVyKCk7Ci0g
ICAgaWYgKCFpbm5lckxheWVyKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihp
bm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8q
IGlubmVyTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGlubmVyVGV4dFJl
bmRlcmVyLT5sYXllcigpKTsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRv
d25jYXN0PFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7
CiAgICAgaW5uZXJMYXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBl
MGU1MWZmNzYxMzkyLi5iYjcyYzY4MzNmMTY5OWY5NDA0YzU2Y2IzYTVlNjVhM2M3ZTY0YWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtMzQzLDEyICszNDMsMTUgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBw
cm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGls
ZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExh
eWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAg
ICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRm
b3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1F
dmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lk
dGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdo
ZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExh
eWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94TGF5
ZXIpKSB7CisgICAgICAgICAgICAgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3hMYXllcik7CisgICAgICAgICAgICAgICAgaWYg
KHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBib3hM
YXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0g
ZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3aGVlbEV2ZW50
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dhc0hhbmRsZWQp
IHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmVs
ZW1lbnQoKTsKQEAgLTE1NjksOSArMTU3MiwxMiBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAog
ICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwgdGhlIHJlbmRl
cmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRzIHNob3dpbmcg
dGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCiAgICAgICAgICAgICBpZiAo
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludElu
UmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBs
YXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhX
ZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcik7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHNjcm9sbGFi
bGVMYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0Lmxv
Y2FsUG9pbnQoKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMTgxMiwxMiArMTgxOCwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1N
b3VzZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkg
PyBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAg
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJl
c3VsdCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5S
ZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1v
ZGUodHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZz
ZXRGcm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cik7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
bG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0SW5SZXNpemVN
b2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNjcm9sbGFibGVMYXllcjsK
KyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNjcm9sbGFibGVMYXllci0+
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIGludmFsaWRh
dGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7
CkBAIC0xOTE4LDEyICsxOTI3LDEyIEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAoIWxh
eWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcjsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRl
ZWI4MzQ4ZTc5ZWFiYjJhMS4uODcxOWJhMDM2NTZiYTc4Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJl
bmRlckJveDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNz
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fc3ZnUGFuIHsgZmFsc2UgfTsKIAotICAgIFJlbmRlckxheWVyKiBtX3Jl
c2l6ZUxheWVyIHsgbnVsbHB0ciB9OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9yZXNp
emVMYXllciB7IG51bGxwdHIgfTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2NhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudDsKICAgICBib29sIG1fZXZlbnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmOWIxYTVkNzE1Yjc1NDcyOTQyODU4OWFlNTgxZTY5YzViN2RlMTFjLi5hNWMxZWQ0
ODY4Y2U2YzI5NzE2ZjVjZWFlNDJiMDM1ODUyMTEwZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC03Nyw5ICs3Nyw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1NjIs
NyArMjU2Miw5IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhh
c1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdp
ZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICAgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlclZpZXctPmxheWVyKCkpKTsKKyAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyVmlldy0+bGF5ZXIo
KSktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzg0MCwxMCArMzg0MiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVW
aWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgYXV0byogbGF5ZXIgPSBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigp
OwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiB9CiAK
IEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25z
dApAQCAtNDMxOCw4ICs0MzIwLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAg
IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChj
b250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJl
ciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNj
ZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXll
ci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4
dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRp
cnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgaWYgKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4ocm9vdExheWVyKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJvb3RMYXllcik7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJl
bmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVj
dCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLjUz
YzhiMjM2MzI4YTNiYjJmODdiMjRiMTE0NGYwYmM0ZGViMWYwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3
ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9z
aW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAg
ICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nTGF5ZXIpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KElu
dFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA5YmI4ZTkyY2FhYzVjZjUzMmI3OWI5MGVlYWIzY2Yy
MTU0MGFmZjQzLi44MGY1NzlmOWY5YWRlOWY0NjMzODJlYjQxOTNhODFjMDFkMDcyNWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTggQEAgdm9pZCBG
cmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigp
OworICAgIGlmICghbGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5
cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBh
dXRvIG9sZFNjcm9sbFR5cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
IAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CisgICAgc2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6
IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdl
b2xvY2F0aW9uUGVybWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KaW5kZXggYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4u
NmMzN2FkNWQ1MzZkMjI0MDE3YjQyMjQ4YjY5Y2Q5MmUyN2Q3OTZmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9y
dCAiUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgi
CiAjaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgy
LDEwIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVy
Qm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIo
KTsKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKTsK
KworICAgIHJldHVybiBudWxscHRyOwogfQogICAgIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGZp
bmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlh
ZmQ3ZmRkZTQzLi5iYjRiNzkwMTU3MDlhZjI0ODE2YTlkN2NlNjA0YTdiMmNlMmNhZTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9u
KGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQg
SGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVuZGVyVmlldy5sYXll
cigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBkb3duY2FzdDxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KG1fcmVuZGVyVmlldy5sYXllcigpKS0+cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpOwogICAgIHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFp
bnRNb2RlOjpOZXdNaW51c09sZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdo
bGlnaHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9u
LCBSZXBhaW50TW9kZQogICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRl
SWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAK
LSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAg
ICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7
CisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX3JlbmRlclZp
ZXcubGF5ZXIoKSktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgfQogCiAg
ICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0
aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0
aGUgbmV3IG9iamVjdHMgbGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IDZiNTNjYmE4NWM4ZTlkYzU5NzE1YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmJkNWEy
NWZlNzg2MjdmMWIyZDFkNDI1OGNmOTUyM2Y5NWE4ZWQyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CkBAIC01NTMsNyArNTUzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9j
ayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dD
bGlwKCkpOwotICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7CisgICAgICAgIGlmIChibG9jay0+bGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGJsb2NrLT5sYXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4oYmxvY2stPmxheWVyKCkpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBAIC01
ODQsOCArNTg1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5
ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT51cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkK
QEAgLTExMDksMTIgKzExMTEsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVz
aGVkQ2xpcCkKICAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVz
dGVkUGFpbnRPZmZzZXQpOwogCisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBPdXIgc2Nyb2xs
YmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0
aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdl
IHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdp
bGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhh
c2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6
OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCiAg
ICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWlu
dFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29u
dHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAgICBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5wYWludE92ZXJmbG93Q29udHJvbHMo
cGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQp
LCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDc0LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPCiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMo
KnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3Np
bmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXIoKSAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKCkpKSB7CisgICAgICAgICAgICAgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihl
bmNsb3NpbmdMYXllcigpKTsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnko
LXBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAg
ICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxv
YXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+
cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyks
ICZzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShzY3JvbGxh
YmxlTGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhn
YXBSZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5hZGRCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA3LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0
ZWRPZmZzZXQpKSk7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVG
b3JIaXRUZXN0KCkgY29uc3QKQEAgLTI0OTgsOSArMjUwNywxOCBAQCBpbnQgUmVuZGVyQmxvY2s6
OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExp
bmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhp
cyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgog
ICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhh
dmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAv
LyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFk
IHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIo
KSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUg
PyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIo
KSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCisKKyAgICAgICAgYm9vbCBoYXNN
YXJxdWVlID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gZmFsc2U7CisgICAgICAg
IGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBoYXNNYXJxdWVlID0gc2Nyb2xsYWJsZUxh
eWVyLT5tYXJxdWVlKCk7CisgICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3Jv
bGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxp
bmUgPSAoaGFzTWFycXVlZSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGFzVmVy
dGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGlu
ZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNl
bGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhp
YmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uZjEzMGU5
NGY2NTE4ZGQ2ZjNjZDQzMDUzMWNmN2RjYzZhZWI2MWRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCkBAIC0zNDksOCArMzQ5LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBp
ZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8v
IEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVt
IHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5
ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1pbkxvZ2ljYWxX
aWR0aCA9IDA7CisgICAgICAgIGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIoKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCktPmlz
SG9yaXpvbnRhbCgpKQorICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxsPigqdGhpcykpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjEyMzc2YmFhZDYxYmQ2MmZh
M2NlZGE4ZGRhMmFhMjY0M2I3OTlkYi4uZmJlZDVhN2ZhY2I1NGI1NzAxZDBhODlmMGViYzkyZmMy
YTNhODIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDgg
KzU4LDggQEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CkBAIC0zMTksMTEgKzMxOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8g
SWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExl
ZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3
IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5
bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9s
bFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBm
bG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2Nh
bGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24pOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1
ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01
NDIsOCArNTQzLDExIEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25z
dAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxX
aWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbFdpZHRo
KCk7CisgICAgfQorCiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0
aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdy
aXRpbmcgbW9kZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7
CkBAIC01NTUsOCArNTU5LDExIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhl
aWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbEhlaWdo
dCgpOworICAgIH0KKwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywg
dGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3
cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNp
emUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCkBAIC01NjUsMTIgKzU3Miwy
MiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94
OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5zY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9s
bFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
LT5zY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9p
ZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVlZGVkKCkKQEAg
LTU3OSw3ICs1OTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3Jl
TGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDBfbHUpOwogfQogCi1z
dGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKK3N0
YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBs
YXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBAIC01ODksMjYgKzYwNiwyOSBA
QCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikK
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0
b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVy
ID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxlTGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5z
Y3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1v
bml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBhdXRvJiBzY3JvbGxhYmxlTGF5
ZXIgPSAqZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKHNjcm9sbGFibGVMYXllcik7CisgICAgc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXll
cigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQogICAgICAgICByZXR1
cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxl
TGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MjgsMzQgQEAgYm9vbCBSZW5kZXJC
b3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYm
ICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBP
dmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9y
aXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAg
ICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
IHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBSZW5k
ZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmNs
dWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCkgOiAwOworICAgIGlmIChpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgJiYgbGF5
ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOworICAgIHJldHVybiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250
YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkg
OiAwOworICAgIGlmIChpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBsYXllcigp
ICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBAIC04MzQsMTIgKzg2NCwxNCBAQCBpbnQg
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHls
ZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3Jv
bGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAg
ICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NF
UlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAg
ICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkt
Pmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg4MCwxNCBAQCBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRl
ckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hM
YXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAgICAgICpzdG9wRWxlbWVu
dCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKSA/IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIoKSkgOiBudWxscHRyOworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RvcEVsZW1lbnQp
CisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0
b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVu
dEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzkwOSwxNCBAQCBib29sIFJlbmRlckJveDo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNl
OwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCkgeworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSkpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KSA6IG51bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlv
biBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhv
bWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0g
ICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJ
bmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBzY3JvbGxlZCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBT
Y3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAg
ICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xs
ZWQpIHsKQEAgLTg5OSw5ICs5MjksOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlm
IChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0
dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygp
OworICAgIGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1
cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzk2Miwx
MSBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0
CiAKIGJvb2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbikKQEAgLTk5MSw4ICsxMDI1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZp
bmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJv
eDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkp
Ci0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChs
YXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnBhblNjcm9sbEZyb21Qb2lu
dChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdApAQCAtMTAxNywxMSArMTA1MSw5IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZl
cnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJC
b3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
KQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkgfHwgIWlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKLQotICAg
IEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24o
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+
c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVG
b3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNjAxLDcgQEAgYm9vbCBSZW5kZXJC
b3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zm
c2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICho
YXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKKyAg
ICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGZvcmVn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFja2dyb3VuZE9i
c2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTIgKzE5MjAsMTMgQEAgTGF5b3V0UmVj
dCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9u
LCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExh
eW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3Jk
ZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2
ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxh
eWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNs
aXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKLSAgICB9
CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
KQorICAgICAgICByZXR1cm4gY2xpcFJlY3Q7CiAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpOworICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIGNsaXBSZWN0
Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IDApOworICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA1
ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgzOTg3Li4wOGM0Y2YxYjhmMzgyNDcx
NzdiZDliZjhmODBjZjQxZGZlNDAwNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4LDkgKzQ4LDkgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCArNDkwLDggQEAgdm9pZCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9z
aXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5j
ZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwK
ICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGlu
Z0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWlu
aW5nQmxvY2sgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyKSkKKyAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBp
bmdMYXllciktPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmlu
Z0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAg
LTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5
UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3Np
bmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5j
bG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRk
aW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5p
bmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAg
ICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpKQorICAgICAgICAgICAg
c3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xheWVyKS0+c2Nyb2xsT2Zmc2V0
KCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMg
bm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rv
ci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7
CkBAIC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRS
ZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFp
bmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0g
ICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xs
T2Zmc2V0OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdD
bGlwcGluZ0xheWVyKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBpbmdMYXllciktPnNjcm9sbE9mZnNldCgp
OwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNs
b3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9z
aW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVu
Y2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xp
cHBpbmdCb3gubGF5ZXIoKSktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQu
eSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQxLDExICs4NDMs
MTkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3Zl
cmZsb3cgYXJlYS4KICAgICAgICAgYXV0byYgdGhpc0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KnRoaXMpOwogICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0NsaXBSZWN0KHJl
Y3QubG9jYXRpb24oKSkpOwotICAgICAgICAKKworICAgICAgICBpbnQgc2Nyb2xsV2lkdGggPSAw
OworICAgICAgICBpbnQgc2Nyb2xsSGVpZ2h0ID0gMDsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYg
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSkgeworICAgICAgICAgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KTsKKyAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0
aCgpOworICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxI
ZWlnaHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0
byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRz
LgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgbGF5ZXIo
KS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNl
dEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsgYm9yZGVyQm90
dG9tKCkpOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIHNjcm9s
bFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJv
cmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwogICAgIH0KICAgICAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlcihj
b250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA5OWU4MjRkMTM1NzA2MzllM2U0ZDQ0M2M5NjVmMTQ0ZTlkNDhmNDQ2Li43MDM3MzhlMDEy
MTM2ZDVlZDgzZTI1MmE2OTI0NjZkYTQ0NmM0ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NywxNiArMjg3LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMmIGNsaXBSZWN0cykK
IAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQot
ewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwotICAgIHJldHVy
biArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lzUmVuZGVy
Vmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKK1JlbmRl
ckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVy
TW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQorICAgIDogbV9s
YXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXllcihyZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29u
dGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1h
bEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4dChmYWxzZSkKQEAg
LTMwNCwxOSArMjk5LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1v
ZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX3pPcmRlckxpc3Rz
RGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1f
aGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2Up
Ci0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQog
ICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZs
b3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFp
bnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFz
VmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGly
dHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3Rp
bmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBt
XzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMzMCwxNSArMzIx
LDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChm
YWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAg
ICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2Vu
ZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkK
LSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwg
bV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzUzLDUzICszMzUs
NDIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJl
Tm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRleHQoc2hvdWxkQmVD
U1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91
bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIoKSkK
LSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9
IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRpbmdMYXllciBpcyBp
bml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3VnaAorICAgIC8vIGl0
IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAgICAvLyAibV9pc1Nl
bGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOyIKKyAgICAvLyBo
ZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxheWVyU1ZHL0hUTUwg
Y2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFyZW5kZXJlcigpLmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxz
ZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUg
YW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFs
dWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50
LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0
aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVu
ZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAgICAgcmVuZGVyZXIo
KS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7Ci0KLSAgICBB
U1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgp
KQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xs
YWJsZUFyZWEoKnRoaXMpOworICAgIGRlc3Ryb3koKTsKK30KIAordm9pZCBSZW5kZXJMYXllcjo6
ZGVzdHJveSgpCit7CisgICAgLy8gUmVseWluZyBvbiBDKysgYnVpbHRpbiBkZXN0cnVjdGlvbiBv
cmRlciBpcyBkYW5nZXJvdXMgZm9yIFJlbmRlckxheWVyL1JlbmRlckxheWVyU2Nyb2xsYWJsZSwK
KyAgICAvLyBzaW5jZSBzb21lIGZ1bmN0aW9uIGNhbGxzIGludm9rZWQgYnkgdGhlIFJlbmRlckxh
eWVyIGRlc3RydWN0b3IsIG9wZXJhdGUgb24gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorICAgIC8v
CisgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBjYWxsIHRvIGNsZWFyQmFja2luZygpIGJlbG93LCB3
aWxsIGludm9rZSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0b3IsCisgICAgLy8gd2hp
Y2ggY2FsbHMgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkuIFRoaXMgaW4gdHVybnMgdHJpZXMgdG8gY2FzdAorICAgIC8vIHRoZSAnbV9vd25pbmdMYXll
cicgZnJvbSBhIFJlbmRlckxheWVyIC0+IFJlbmRlckxheWVyU2Nyb2xsYWJsZSwgdG8gZ2V0IGFj
Y2VzcyB0byB0aGUgU2Nyb2xsYWJsZUFyZWEuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBsZXQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlIGRlc3RydWN0IGl0c2VsZiwgYmVmb3JlIHRoZSAoaW1wbGljaXQp
IGNhbGwgb2YgdGhlIFJlbmRlckxheWVyIGRlc3RydWN0b3IsCisgICAgLy8gaXQgd2lsbCBjcmFz
aC4gVGhlIGZpeCBpcyB0byBtb3ZlIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGludG8gYSBk
ZWRpY2F0ZWQgZGVzdHJveSgpIGZ1bmN0aW9uCisgICAgLy8gYW5kIGNhbGwgdGhhdCBkZXN0cm95
KCkgZnVuY3Rpb24gZGlyZWN0bHkgZnJvbSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0
b3IuIFRoaXMgd2F5IHRoZQorICAgIC8vIFNjcm9sbGFibGVBcmVhIG9iamVjdCByZW1haW5zIHZh
bGlkIGZvciB0aGUgd2hvbGUgc2NvcGUgb2YgdGhlIGRlc3RydWN0b3IgLT4gcHJvYmxlbSBzb2x2
ZWQuCisgICAgLy8KKyAgICAvLyBTaW5jZSBhbGwgZnVuY3Rpb24gY2FsbHMgaW52b2tlZCBieSB0
aGUgUmVuZGVyTGF5ZXIgZGVzdHJ1Y3RvciwgYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkCisgICAg
Ly8gdGhlIHNhZmUgc29sdXRpb24gaXMgdG8gc2ltcGx5IGludm9rZSBkZXN0cm95KCkgZnJvbSBS
ZW5kZXJMYXllclNjcm9sbGFibGUgZGVzdHJ1Y3Rvci4KKyAgICAvLyBUaGUgbmV4dCBjYWxsIHRv
IGRlc3Ryb3koKSBmcm9tIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGlzIHRoZW4gYSBuby1v
cCAtIGFzIGRlc2lyZWQuCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVm
bGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIo
KTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3Zp
ZGVkQmFja2luZygpKSB7CkBAIC05MzIsMTAgKzkwMyw0OSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUs
IGJvbwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zKCZnZW9tZXRyeU1hcCwgdXBkYXRlTGF5ZXJQ
b3NpdGlvbkZsYWdzKGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBkaWRGdWxsUmVwYWludCkpOwogfQog
CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChs
YXllci5sYXllclR5cGUoKSkgeworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3Rh
dGljOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpT
Y3JvbGxhYmxlOgorICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KS5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXllcihSZW5kZXJM
YXllciYgbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKK3sKKyAgICBzd2l0
Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBl
OjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5
cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpLnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhXVEY6Om51bGxvcHQsIGdlb21ldHJ5TWFw
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkgewor
ICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS51cGRhdGVNYXJxdWVlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAq
IGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykK
IHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uSWZOZWVkZWRGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMpOwogCiAgICAgaWYgKGdlb21ldHJ5
TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CkBAIC05NDMsMTggKzk1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAg
ICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJD
bGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKLSAgICAgICAg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKLSAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQotICAg
ICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5
TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSXQgbG9va3Mgc3VzcGljaW91cyB0byBjYWxsIGNvbnZlcnRUb0xh
eWVyQ29vcmRzIGhlcmUKLSAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3Rv
ciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBvZmZzZXRG
cm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwotICAgICAgICB9Ci0gICAgICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkp
OwotICAgIH0KLQorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXll
cigqdGhpcywgZ2VvbWV0cnlNYXApOwogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFn
cygpOwogCiAgICAgaWYgKGZsYWdzICYgVXBkYXRlUGFnaW5hdGlvbikKQEAgLTEwMjksMTMgKzEw
MjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9t
ZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBj
aGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8u
Ci0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1
c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAg
ICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAg
ICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Cisg
ICAgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcigqdGhpcyk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBi
b29sIGludGVyc2VjdHNWaWV3cG9ydCA9IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50ZXJzZWN0
c1ZpZXdwb3J0KCp0aGlzKTsKQEAgLTExMTUsOTIgKzExMDgsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlcGFpbnRSZWN0cygpCiAgICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRMYXlvdXRS
ZWN0cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKQotewotICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpOwotCi0gICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21ldHJ5TWFw
IGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKQotICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2Vz
dG9yKHBhcmVudCgpLCBudWxscHRyKTsKLQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8g
bm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwotICAgIC8v
IGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhh
c1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxGbGFnPiBmbGFncykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUg
bmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCi0gICAgLy8gdGhl
c2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cg
aXMgdmFsaWQuCi0gICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0KLSAgICAv
LyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50
cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKLSAgICAvLyBvdXIgcmVjdGFuZ2xlcyBh
cyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBl
eHBlY3RlZCB0bwotICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCi0g
ICAgaWYgKCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVy
UG9zaXRpb24oKTsKLSAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQotICAgICAgICBmbGFncy5hZGQo
SGFzQ2hhbmdlZEFuY2VzdG9yKTsKLQotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0No
YW5nZWRBbmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVy
Zmxvd1Njcm9sbCB9KSkKLSAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKLQotICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCi0gICAgICAg
IGZsYWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKLQotICAgIGlm
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRDb21wdXRl
UmVwYWludFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwot
ICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOwotICAgIGJv
b2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21w
dXRlUmVwYWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Ci0g
ICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnB1
c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwotCi0gICAgaWYgKHNob3VsZENv
bXB1dGVSZXBhaW50UmVjdHMpIHsKLSAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0
IGNvbXB1dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KLSAg
ICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSkKLSAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3Rz
KCk7Ci0gICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNv
bnRhaW5lciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCi0gICAgICAgICAgICBjb21wdXRlUmVw
YWludFJlY3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7
Ci0gICAgfSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1X
aWRnZXQoKSkgewotICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNv
bnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFp
bnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9tCi0gICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3Zl
cmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUg
aW52YWxpZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2Iv
MTg4MTIxKS4KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3Jy
ZWN0LgotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
fHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCkpKTsKLSAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlv
dXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94
ID09IHJlbmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1h
cCwgZmxhZ3MpOwotCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNj
cm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgp
Ci0gICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBh
aW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCi0gICAgLy8gdXBk
YXRlZCBhYm92ZS4KLQotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFB1
c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSk7Ci0KLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmlu
dmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKLX0KLQogI2lmIEVOQUJMRShDU1NfQ09NUE9T
SVRJTkcpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUJsZW5kTW9kZSgpCkBAIC0xNjQ2LDYg
KzE1NTMsMTkgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnRTdGF0dXMoKQogICAgIHJldHVybiBoYXMzRFRyYW5zZm9ybSgpOwogfQogCitzdGF0aWMgaW5s
aW5lIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JT
Y3JvbGxhYmxlTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXlvdXRQb2ludCYgbG9jYWxQb2lu
dCkKK3sKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJM
YXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRl
ckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIpLnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzKQogewogICAg
IExheW91dFBvaW50IGxvY2FsUG9pbnQ7CkBAIC0xNjkxLDM0ICsxNjExLDkgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlv
bnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVy
VGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQu
Ci0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCku
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdB
bmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAg
ICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xv
c2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0
aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBs
b2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
LmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVu
dC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNh
c3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJ
bkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAg
QVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAg
ICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgp
KSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3Jv
bGxQb3NpdGlvbigpKTsKLQotICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXll
ci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwotICAgIH0KIAotICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2Nv
cGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5n
U2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgIG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgLy8gU3Vi
dHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgc3VidHJhY3RTY3JvbGxPZmZz
ZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMsIGxvY2Fs
UG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0Q2hhbmdlZCA9IGZhbHNlOwogICAg
IGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xODQwLDg2ICsxNzM1
LDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci19Ci0K
LXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRh
cmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7
Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJ
bkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAg
IGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKLXsKLSAgICBSZW5kZXJUcmVlTXV0
YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlOwot
Ci0gICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKSB7Ci0gICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkp
ICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFu
ZEhhc1Njcm9sbGFibGVBcmVhKCk7Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpKSB7Ci0gICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIp
KQotICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVG
aXhlZCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7
Ci0jZW5kaWYKKyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVyUmVuZGVyZXIg
PSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z1RyYW5zZm9ybWVkQW5jZXN0b3IoKSBjb25zdApAQCAtMjQ0Nyw0ODMgKzIyODQsMTI4IEBAIExh
eW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9M
YXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5z
KSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdAorc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwo
SFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVW
aWV3KQogewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdz
KCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5H
X1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJl
bmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgorICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2Vs
ZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9m
IFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAg
IC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQgc2Nyb2xscyBz
aG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCisgICAgaWYgKGZyYW1lVmlldy53YXNTY3JvbGxl
ZEJ5VXNlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlm
ICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cisg
ICAgLy8gRm9yYmlkIGF1dG9zY3JvbGxzIHdoZW4gc2Nyb2xsYmFycyBhcmUgb2ZmLCBidXQgcGVy
bWl0cyBvdGhlciBwcm9ncmFtbWF0aWMgc2Nyb2xscywKKyAgICAvLyBsaWtlIG5hdmlnYXRpb24g
dG8gYW4gYW5jaG9yLgorICAgIHJldHVybiAhZnJhbWVWaWV3LmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3N0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxs
b3dlZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8
fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAg
IHJldHVybjsKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5k
ZXJMYXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuc2Nyb2xsUmVjdFRv
VmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVk
LCBvcHRpb25zKTsKKyAgICB9CiAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9Ci0jZW5kaWYgLy8gRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIg
d2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRl
ZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KKyAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkxheWVyICIgPDwgdGhpcyA8PCAiIHNjcm9sbFJl
Y3RUb1Zpc2libGUgIiA8PCBhYnNvbHV0ZVJlY3QpOwogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0Fz
eW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3Jk
aW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQorICAgIExheW91dFJlY3QgbmV3UmVj
dCA9IGFic29sdXRlUmVjdDsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBib29sIGF1
dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNj
cm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlv
biBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVm
b3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBj
b25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Ny
b2xsUmVzdWx0ID0gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZEZv
clNjcm9sbGFibGVMYXllcigqdGhpcywgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9u
cyk7CisgICAgaWYgKHNjcm9sbFJlc3VsdCkKKyAgICAgICAgbmV3UmVjdCA9ICpzY3JvbGxSZXN1
bHQ7CisgICAgZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpOwogCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVk
dWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEg
PSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJs
ZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0x
KQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRh
ICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKyAgICAg
ICAgaWYgKG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlID0gbnVsbHB0cjsK
IAotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQorICAgICAgICAgICAgaWYgKGlzPEhUTUxG
cmFtZUVsZW1lbnRCYXNlPigqb3duZXJFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBmcmFtZUVs
ZW1lbnRCYXNlID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCk7
CiAKLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVs
dGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KKyAg
ICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVu
dEJhc2UsIGZyYW1lVmlldykpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlv
biBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRl
c3Ryb3llZC4KKyAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRo
cmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVj
ayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4g
V2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNv
aGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBp
ZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxh
c3RLbm93bk1vdXNlUG9zaXRpb247CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3Nl
UmVjdCA9IGdldFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhl
ZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisgICAgICAgICAgICAgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRp
b24oKSkpOworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0
c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdlLgorICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBv
aW50KGZyYW1lVmlldy5jb250ZW50c1NpemUoKSkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Cisg
ICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDUwNTkKKyAgICAgICAgICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFu
aW1hdGVkU2Nyb2xsOjpObzsKKyAgICAgICAgICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJv
Z3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgJiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1l
bnQoKQorICAgICAgICAgICAgICAgICAgICAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5i
ZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpKQorICAgICAgICAgICAgICAgICAgICBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7
CisgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCi0gICAgaWYgKGFicyhk
ZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhl
IGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRX
aWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICAgICAg
ICAgIGlmIChvcHRpb25zLnNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxk
QWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdh
dGVTY3JvbGxUb1BhcmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNs
b3NpbmdMYXllciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
ZW5jbG9zaW5nTGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVy
ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdMYXllciktPmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Yg
dGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICBuZXdSZWN0
ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0lu
dFJlY3QobmV3UmVjdCkpOworICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNl
OyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlz
IGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9PSBTZWxlY3Rp
b25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5mcmFtZSgpLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Nyb2xsQnlSZWN1
cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19CisgICAgICAgICAgICBhdXRv
IG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKTsKIAotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zp
c2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17
Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47CisjaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3
LnZpc2libGVDb250ZW50UmVjdCgpOworI2Vsc2UKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDb250
ZW50SW5zZXRzIHNob3VsZCBiZSB0YWtlbiBjYXJlIG9mIGluIFVJIHByb2Nlc3Mgc2lkZS4gd2Vi
a2l0Lm9yZy9iLzE5OTY4MgorICAgICAgICAgICAgLy8gVG8gZG8gdGhhdCwgZ2V0UmVjdFRvRXhw
b3NlIG5lZWRzIHRvIHJldHVybiB0aGUgYWRkaXRpb25hbCBzY3JvbGxpbmcgdG8gZG8gYmV5b25k
IGNvbnRlbnQgcmVjdC4KKyAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZp
ZXcudmlld1JlY3RFeHBhbmRlZEJ5Q29udGVudEluc2V0cygpOwogCi0gICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAg
ICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxl
KCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Via2l0Lm9y
Zy9iLzE5OTY4MyBGcmFtZVZpZXc6OnZpc2libGVDb250ZW50UmVjdCBpcyB3cm9uZyB3aGVuIGNv
bnRlbnQgaW5zZXRzIGFyZSBwcmVzZW50CisgICAgICAgICAgICBtYXhTY3JvbGxQb3NpdGlvbiA9
IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoU2Nyb2xsUG9zaXRpb24oZnJhbWVW
aWV3LnRvdGFsQ29udGVudHNTaXplKCkgLSBmbG9vcmVkSW50U2l6ZSh2aWV3UmVjdC5zaXplKCkp
KSk7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3Rl
ZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxP
ZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVk
QXJlYSA9IHRoaXM7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29u
dGVudEluc2V0cygpOworICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVu
dEluc2V0cy5sZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKKyAgICAgICAgICAgIG1heFNj
cm9sbFBvc2l0aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJv
dHRvbSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50
byAic2Nyb2xsVmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBMYXlvdXRS
ZWN0IHRhcmdldFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CisgICAgICAgICAgICB0YXJnZXRSZWN0Lm1v
dmUoMCwgZnJhbWVWaWV3LmhlYWRlckhlaWdodCgpKTsKIAotICAgICAgICAvLyBJZiB0aGlzIGxh
eWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2Fu
IHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBu
ZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdT
Y3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBy
ZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVG
aXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKKyAgICAgICAgICAgIC8vIEF2
b2lkIHNjcm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9u
KCkgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKKyAgICAgICAgICAgIGlmIChy
ZXZlYWxSZWN0ICE9IHZpZXdSZWN0KSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNs
YW1wZWRTY3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9u
KCkpLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRp
b24pOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCkt
PnNjcm9sbGluZ0VsZW1lbnQoKT8KKyAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQorICAgICAgICAgICAgICAgIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICAgICAgICAg
IGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9u
cy5iZWhhdmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOworICAgICAg
ICAgICAgICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRp
b24sIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRv
c2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElm
IHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHBy
b2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUgYW4g
b3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhh
dCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAg
ICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2Fu
dCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwotICAg
IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0g
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBl
LCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQot
ewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9u
KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3Jv
bGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZz
ZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7
Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNj
cm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAg
IGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAgICBz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBp
bmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9s
bFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRp
b24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUp
OwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsK
LSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNh
bmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5p
bWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2
aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3Np
dGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xs
ICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsK
LQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5z
aW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93Omhp
ZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAg
ICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWlu
ZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAg
ICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9s
bFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNl
dCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNh
cmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBj
YXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsK
LQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAg
ICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCku
dmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVy
cyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBh
IHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVj
YXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5j
ZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVu
ZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Yg
bGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVk
LgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQot
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAg
ICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUg
c3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0
aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVw
LXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3
ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3Np
dGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0g
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAg
ICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9z
aXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAg
ICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFp
bnQtb3JkZXIgcGFyZW50LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHBhaW50T3JkZXJQYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGlu
ZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygp
OwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUo
KSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQg
PSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBz
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0g
ICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3Np
dGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWlu
dCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRl
cmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJn
ZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3
LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZp
ZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRl
ckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxl
bWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVu
dEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQotewotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgotICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgc2Nyb2xs
YmFycyBhcmUgZm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBvYnZpb3Vz
bHkgYmUgaWdub3JlZC4KLSAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2VyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvcmJpZCBhdXRvc2Nyb2xscyB3aGVuIHNj
cm9sbGJhcnMgYXJlIG9mZiwgYnV0IHBlcm1pdHMgb3RoZXIgcHJvZ3JhbW1hdGljIHNjcm9sbHMs
Ci0gICAgLy8gbGlrZSBuYXZpZ2F0aW9uIHRvIGFuIGFuY2hvci4KLSAgICByZXR1cm4gIWZyYW1l
Vmlldy5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdAotewotICAgIGlm
ICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlz
IHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAgICAvLyBG
SVhNRTogSXMgdGhpcyBzdGlsbCBuZWVkZWQ/IEl0IHVzZWQgdG8gYmUgcmVsZXZhbnQgZm9yIFNh
ZmFyaSBSU1MuCi0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkgJiYgIXJlbmRlcmVyKCkucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
IC8vIE9ubHkgYm94ZXMgY2FuIGhhdmUgb3ZlcmZsb3dDbGlwIHNldC4KLQotICAgIGlmIChyZW5k
ZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKSkgewot
ICAgICAgICAvLyBUaGUgInByb2dyYW1tYXRpY2FsbHkiIGhlcmUgaXMgbWlzbGVhZGluZzsgdGhp
cyBhc2tzIHdoZXRoZXIgdGhlIGJveCBoYXMgc2Nyb2xsYWJsZSBvdmVyZmxvdywKLSAgICAgICAg
Ly8gb3IgaXMgYSBzcGVjaWFsIGNhc2UgbGlrZSBhIGZvcm0gY29udHJvbC4KLSAgICAgICAgcmV0
dXJuIGJveC0+Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpOwotICAgIH0KLQotICAgIC8v
IFByb2dyYW1tYXRpYyBzY3JvbGxzIGNhbiBzY3JvbGwgb3ZlcmZsb3c6aGlkZGVuLgotICAgIHJl
dHVybiBib3gtPmhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGJveC0+aGFzVmVydGljYWxPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJMYXllciAiIDw8IHRoaXMgPDwgIiBzY3JvbGxSZWN0VG9WaXNp
YmxlICIgPDwgYWJzb2x1dGVSZWN0KTsKLQotICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGFic29s
dXRlUmVjdDsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7Ci0gICAgYm9vbCBhdXRv
c2Nyb2xsTm90SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
YXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKLQotICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkp
IHsKLSAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0
aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAg
ICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4g
YnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgotICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgICAgICBBU1NFUlQoYm94KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsb2Nh
bEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
YWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZGly
ZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwg
YmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKLSAgICAgICAgICAgIC8v
IHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxv
Y2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0g
ICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIExheW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXll
ckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9w
dGlvbnMuYWxpZ25ZKTsKLQotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNl
dCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJ
bnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAg
ICAgICAgIGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmco
b3B0aW9ucy5iZWhhdmlvciwgYm94LT5lbGVtZW50KCkpKQotICAgICAgICAgICAgICAgIGFuaW1h
dGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAg
ICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3Zl
KC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRS
ZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhw
b3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7Ci0gICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwot
Ci0gICAgICAgIGlmIChvd25lckVsZW1lbnQgJiYgb3duZXJFbGVtZW50LT5yZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSA9IG51
bGxwdHI7Ci0KLSAgICAgICAgICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVy
RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZnJhbWVFbGVtZW50QmFzZSA9IGRvd25jYXN0PEhU
TUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJh
bWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChmcmFtZUVsZW1lbnRCYXNlLCBmcmFtZVZpZXcp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0
byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCi0gICAgICAg
ICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxs
b3dlZFNjb3BlOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Ci0g
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZp
ZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9u
cy5hbGlnblkpOwotCi0gICAgICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91
bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRpb24oKSkpOwotICAgICAgICAgICAgICAgIC8v
IEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdl
LgotICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBvaW50KGZyYW1lVmlldy5jb250ZW50c1NpemUo
KSkpOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1
bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwNTkKLSAgICAgICAgICAgICAg
ICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MKLSAgICAgICAgICAgICAgICAgICAg
JiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAm
JiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250
ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpKQotICAgICAgICAgICAgICAgICAgICBh
bmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7Ci0gICAgICAgICAgICAgICAgZnJhbWVWaWV3
LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgYW5pbWF0ZWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwotICAg
ICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgotICAgICAgICAgICAgICAgICAg
ICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVu
Y2xvc2luZ0ludFJlY3QobmV3UmVjdCkpOwotICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhl
ZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxp
ZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9
PSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5m
cmFtZSgpLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBhdXRvIG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3Np
dGlvbigpOwotICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogQ29udGVudEluc2V0cyBzaG91bGQg
YmUgdGFrZW4gY2FyZSBvZiBpbiBVSSBwcm9jZXNzIHNpZGUuIHdlYmtpdC5vcmcvYi8xOTk2ODIK
LSAgICAgICAgICAgIC8vIFRvIGRvIHRoYXQsIGdldFJlY3RUb0V4cG9zZSBuZWVkcyB0byByZXR1
cm4gdGhlIGFkZGl0aW9uYWwgc2Nyb2xsaW5nIHRvIGRvIGJleW9uZCBjb250ZW50IHJlY3QuCi0g
ICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpZXdSZWN0RXhwYW5k
ZWRCeUNvbnRlbnRJbnNldHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHdlYmtpdC5vcmcv
Yi8xOTk2ODMgRnJhbWVWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QgaXMgd3Jvbmcgd2hlbiBjb250
ZW50IGluc2V0cyBhcmUgcHJlc2VudAotICAgICAgICAgICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBm
cmFtZVZpZXcuc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KFNjcm9sbFBvc2l0aW9uKGZyYW1lVmll
dy50b3RhbENvbnRlbnRzU2l6ZSgpIC0gZmxvb3JlZEludFNpemUodmlld1JlY3Quc2l6ZSgpKSkp
OwotCi0gICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29udGVudEluc2V0
cygpOwotICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVudEluc2V0cy5s
ZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKLSAgICAgICAgICAgIG1heFNjcm9sbFBvc2l0
aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJvdHRvbSgpKTsK
LSNlbmRpZgotICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50byAic2Nyb2xs
VmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IHRhcmdl
dFJlY3QgPSBhYnNvbHV0ZVJlY3Q7Ci0gICAgICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoMCwgZnJh
bWVWaWV3LmhlYWRlckhlaWdodCgpKTsKLQotICAgICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxS
ZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVGaXhlZCwg
b3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKLSAgICAgICAgICAgIC8vIEF2b2lkIHNj
cm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9uKCkgaWYg
d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKLSAgICAgICAgICAgIGlmIChyZXZlYWxS
ZWN0ICE9IHZpZXdSZWN0KSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRT
Y3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9uKCkpLmNv
bnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pOwot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCktPnNjcm9s
bGluZ0VsZW1lbnQoKT8KLSAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQotICAgICAgICAgICAgICAgIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwotICAgICAgICAgICAgICAgIGlmIChh
dXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhh
dmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAg
ICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRpb24sIFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVybW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFm
dGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UKLSAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29u
dGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Nyb2xsUmVjdEludG9WaWV3LgotICAgICAgICAgICAg
Ly8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNh
dGlvbnMKLSAgICAgICAgICAgIC8vIHRoYXQgcHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBj
b250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBYIE1haWwuCi0gICAgICAgICAgICAvLyBUaGUgY2Fu
QXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlz
LgotICAgICAgICAgICAgcGFnZSgpLmNocm9tZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVk
SW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVy
bW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFmdGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UK
KyAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29udGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Ny
b2xsUmVjdEludG9WaWV3LgorICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qg
b24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgIC8vIHRoYXQg
cHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBjb250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBY
IE1haWwuCisgICAgICAgICAgICAvLyBUaGUgY2FuQXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVu
dEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlzLgorICAgICAgICAgICAgcGFnZSgpLmNocm9t
ZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVkSW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTI5MzEsMjMgKzI0MTMsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdS
ZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCku
aGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5n
IGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50
cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21w
b3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBi
ZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVk
IGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXRE
ZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYg
YWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwpAQCAtMzA0
MywxMTM4ICsyNTA4LDgwIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9z
ZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIHkgPSB2
aXNpYmxlUmVjdC55KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKICAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGln
bm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgp
ICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwotICAg
IGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0gICAgcmV0dXJuIExheW91dFJl
Y3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCi17
Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cpOwotICAgIHNj
cm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5
b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29uc3QKLXsKLSAgICAvLyBXZSBu
ZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQot
ICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBj
bGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcg
dGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCBy
ZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVu
dCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5S
ZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRl
cmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBo
ZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwg
d2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCku
ZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVt
ZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3Vz
ZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGF1dG8gYWJzb2x1dGVQb2lu
dCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7Ci0g
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhh
YnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21S
ZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZz
ZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGN1cnJlbnRT
aXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVy
LT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBl
bGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOwot
ICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwotICAg
IAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewot
ICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKLSAgICAgICAg
YWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOwot
ICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBu
ZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBj
dXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0g
cmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7Ci0K
LSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7Ci0gICAgaWYg
KHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6
b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlv
dXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVy
ID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsK
LSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3Vu
ZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRp
ZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZy
b20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAv
IHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhl
aWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0
IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5j
ZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50
LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91
bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBv
aW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21w
b3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Ny
b2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwot
fQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNp
YmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNw
YWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNp
b24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xs
YmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2li
bGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2
aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAs
IHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0K
LQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJi
ZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNl
IG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFy
ZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAg
ICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAo
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQo
c2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdo
dCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2gu
c2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNp
YmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0g
KHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4g
c3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29s
IFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJl
dHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJM
YXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAg
IEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVj
dCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIo
KSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwg
cGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVT
aXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlm
ICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUo
cm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwot
Ci0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNv
bnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJs
ZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNT
aXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29u
dGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNo
YW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJs
ZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJl
YXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewot
ICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0K
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRF
bmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRl
U2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xs
LCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQot
I2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNS
ZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwot
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0g
ICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1
dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7
Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jp
em9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0g
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Ny
b2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAg
IGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXpl
OjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5
SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8
fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNp
emU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5
IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAg
IGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwK
LSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQot
ICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAg
ICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAg
ICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAg
ICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAg
ICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRo
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3Qo
Y29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jp
em9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0g
ICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0g
ICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAg
YmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQot
ICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQot
ICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAg
IGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90
dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlD
b3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVy
LngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3Ju
ZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3Ju
ZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAg
ICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAg
aWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0g
ICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5y
ZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tu
ZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50
U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRv
SW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgm
c2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVT
Y3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092
ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3Rh
bmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFp
bnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3Jv
bGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFk
b3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
LXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9y
U2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0g
ICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAg
ICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRU
ZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
YWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAg
IGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxi
YXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBp
ZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVT
Y3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3co
KSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVS
ZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0
aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFy
J3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQo
KTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92
QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9s
bHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3Vi
U2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDog
U2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8v
IERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBj
b3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAg
cmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBm
b3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlz
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewot
ICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
c2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIg
KyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQo
IlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMp
LCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7
Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRy
YW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlm
IChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9k
ZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRl
Z3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAi
ICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJl
bmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0
Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5l
cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVy
ZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21S
b290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJv
b3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRG
cmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3Rz
LnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3Jv
bGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVz
LgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
OjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAg
aWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxh
eWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29y
ZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91
dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1Jl
Y3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwot
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBB
U1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAg
ICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVy
Zmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVy
Zmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkp
OwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0g
ICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9w
KCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNj
cm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAg
ICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0g
ICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Ny
b2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwot
Ci0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGll
bnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICBy
ZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJm
bG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNj
cm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9v
bCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2Vs
dmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNI
b3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0K
LSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5l
ZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAg
ICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmICht
X3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRp
Y2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQg
dG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAg
IGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFs
U2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
IT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYm
IChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAg
aWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxC
YXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhh
c0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVy
KCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAg
aWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxv
d1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJs
b2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0
b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxh
eW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1Jl
bGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94
KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xl
YXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8g
U2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsK
LSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVp
Z2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5
b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5
bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9z
aXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9s
bCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgot
ICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAv
LyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBv
bmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50cy4KLSAgICAgICAg
Ly8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5z
ZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQotICAg
ICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3Vu
ZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCi0gICAg
ICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSNlbmRpZgotICAg
ICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0
KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZp
Z3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwot
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMu
c2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6QWxpZ25DZW50ZXIpCisgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBv
c2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKyAgICBlbHNlCisg
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQg
UmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxi
YXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2lu
dCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7CisgICAgc2Nyb2xsUmVjdFRvVmlz
aWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEp
KSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qs
IGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVn
RGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0g
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
Ci0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0g
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
LSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOwotCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0
b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
ICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdl
dHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVy
aW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91
dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1l
bnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkp
OwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhl
IHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChs
YXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCku
d2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Ny
b2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0
IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAg
cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVj
dCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBv
biB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0g
ICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92
ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGlu
Z0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICBpZiAo
bV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3Qo
Y29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxl
bmQgbW9kZSJfcyk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlm
IHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2Vl
IHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAg
ICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWJzUmVjdCk7Ci19CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXpl
Q29ybmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFr
UmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlS
ZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUo
KTsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VM
b1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIp
LmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1h
Z2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+
c2l6ZSgpOworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0
dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0
cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3Qu
eCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsg
cmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBp
ZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVz
aXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXpl
KSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJl
c2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29y
bmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3Qp
OworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNp
emVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
Y29udGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9t
IGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
IChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVj
dCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0g
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRo
KCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRy
YXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+
bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKIHsKLSAgICBp
ZiAoIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCitMYXlvdXRVbml0IFJlbmRlckxheWVy
OjpvdmVyZmxvd0xlZnQoKSBjb25zdAogewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQg
dGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1
bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0
aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxv
Y2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0g
ICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQp
KSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK0xheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0K
IAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNl
dCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQq
IGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQxOTIsMTcgKzI1OTksNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5j
bG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBz
dWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXll
cjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBy
dWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjI1LDcgKzI2MjEsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNv
bmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBv
dmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hh
aW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXll
ciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7
IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50
QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xs
Q29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAg
ICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
PihsYXllcikgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250
YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3Rvckxh
eWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjcsNyArMjgyNCw4
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMg
b3Igc3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
IHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJl
cigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAo
c2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pv
b21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzIyLDggKzMxMjAsOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1
cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Ny
b2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAg
ICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fbGF5ZXJUeXBlID09IFJl
bmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpLT5wYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAg
ICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQg
Y29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRv
IHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODksNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6
IGxheWVyRnJhZ21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0g
ICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9M
YXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9j
YXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAg
ICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsK
LSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RF
dmVudFJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxv
Y2FsUGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikK
IHsKICAgICBBU1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAg
LTUyMzYsNyArMzYyMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAg
ICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxh
eWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTUzNTQsNiAr
Mzc0MCwxOSBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRpZGF0ZShjb25zdCBSZW5kZXJMYXllciog
aGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3VibAogICAgIHJldHVybiB0cnVlOwogfQog
CitzdGF0aWMgaW5saW5lIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50c0ZvclNjcm9sbGFi
bGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkg
eworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuaGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBw
b2ludEluRnJhZ21lbnQpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogLy8gaGl0VGVzdExvY2F0aW9uIGFuZCBoaXRUZXN0UmVjdCBh
cmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMgb25l
IHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVk
VHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0dGVu
aW5nIGxheWVyLgpAQCAtNTQ2Nyw3ICszODY2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQK
ICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9p
bnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewor
ICAgIGlmIChoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzRm9yU2Nyb2xsYWJsZUxheWVyKCp0aGlz
LCBsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewogICAgICAg
ICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNTU0MiwzNSArMzk0MSw2IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0
ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJC
b3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21l
bnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVy
KCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRv
bUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmln
aHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4
WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCks
IHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJG
cmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJG
cmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byBy
ZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVj
dChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6
ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkp
KSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RM
b2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXll
ckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWlu
ZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSog
dHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKQEAgLTYwMTEsMzYgKzQzODEsNiBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRz
Qm91bmRzKSBjb25zdAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykK
LXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KGJvdW5kcykpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7
Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpCi17Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+
cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCi0gICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVjdCBy
ZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9s
bFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwg
bnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAo
cmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAoIXJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KIGJv
b2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgT3B0
aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8vIEFs
d2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgpAQCAtNjMzNywyMSArNDY3Nyw2
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1
cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNz
TGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6Omxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0K
LUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zv
cm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAg
Ym9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50
c0ludG9XaW5kb3coKTsKQEAgLTYzODIsMTEgKzQ3MDcsNiBAQCBib29sIFJlbmRlckxheWVyOjpz
aG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWlu
dGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxz
T3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRl
ckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYm
ICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MTAsOSArNDgzMCwxMyBA
QCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAg
ICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBy
ZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpIHx8IHNjcm9sbGFi
bGVMYXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCiAgICAg
ICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzVmlk
ZW8oKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzRW1iZWRkZWRPYmplY3QoKQpAQCAtNjYyMywx
MSArNDk0NywyMyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7CiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6
Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9sYXllclR5cGUp
IHsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlN0YXRpYzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZToK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPmhh
c092ZXJmbG93Q29udHJvbHMoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOwogfQogCkBAIC02NjYzLDM4
ICs0OTk5LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRD
b250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1wdHlDaGls
ZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAg
ICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJv
eC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0
eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGlu
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRp
YyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250
YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxi
YXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1Zl
cnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Ny
b2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgot
ICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5h
YmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9u
dGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBt
X2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGlj
YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1f
dkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQog
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91
bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjcxNyw2ICs1MDIxLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKIAogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMg
dmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhp
cyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVz
dC4KKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KHRoaXMpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSA6IG51bGxwdHI7
CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBv
bGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7
CiAgICAgICAgIGlmIChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUo
KS51c2VkWkluZGV4KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMzEs
MTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZp
c2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAg
ICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYg
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJl
cigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9y
KCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAg
ICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8
UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0
eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51
bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0K
IAotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNv
IHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2
ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAs
MTUgKzUwNTIsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7
CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBj
dXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9o
QmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHls
ZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQog
CiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNm
b3JtKCk7CkBAIC02Nzc5LDk4ICs1MDc4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNl
bmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRl
cmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlz
U2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7
Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
LSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVk
KSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRv
dWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYg
d2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBh
cyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAg
YXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0s
ICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIp
IHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCks
IFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQg
YmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFy
ZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
LXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVz
aXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICgh
cmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92
ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBj
aGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAg
bV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZs
ZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxl
Y3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MjA5LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJu
IHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29s
IFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0
CkBAIC03MjQ4LDExICs1NDU1LDE0IEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVl
UmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBz
dHJlYW0gPDwgIiAiOwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7
Ci0gICAgc3RyZWFtIDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxp
bmdTY29wZSgpOworICAgIGlmIChpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9s
bGFibGVMYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOworICAgICAgICBzdHJlYW0gPDwgIiAiOwor
ICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKIAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAgfQog
CiAgICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIyN2RjY2U1ZWVlMDk0ZmVl
OWJmNC4uZjNkMGI0NjU0NjliNmY1NWM0MzQ3NzA3NTE1NmZlNzFlNzk4MGE2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxC
ZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBA
IC0xNDAsMjAgKzEzOSwyNiBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewog
ICAgIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZpb3I6OkF1dG8gfTsKIH07
CiAKLXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZp
bmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7CisgICAgICAgIFN0YXRpYywK
KyAgICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAor
ICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZTsgfQor
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5k
ZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2ls
bEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworICAgIHZvaWQgZGVzdHJveSgp
OworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRl
ciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4
ICs0MjAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBt
YXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlz
U2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7
IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0
NDAsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVT
aXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5h
bDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7
Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwot
Ci0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhl
aXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUm
IGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAg
Ym9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRv
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNj
cm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAg
IHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
ID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3Jv
bGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7
IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAg
dm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0
IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMg
Y2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3
YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIg
aXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQs
IGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNP
dmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92
QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZv
aWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCBy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlv
biA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1
aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3Rh
cnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZv
aWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1
ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxv
b2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAg
IGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMg
dHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVz
IGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAg
IGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9s
KEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJ
bnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
IGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlv
dXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lk
IGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29u
c3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5
b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJl
c2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6
ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wg
aXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9y
dHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1NSw5ICs0NjMsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJl
ZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9z
aW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9u
TW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRl
ZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg0
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50
cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9p
ZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RU
eXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlv
dXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAg
IHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0
byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9CkBAIC01OTMsNyArNDk0LDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSBj
b25zdDsKICAgICBib29sIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0OwotICAgIAor
ICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCiAgICAgYm9vbCBiZWhhdmVz
QXNGaXhlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVoYXZlc0FzRml4ZWQ7IH0KIAogICAgIHN0cnVj
dCBQYWludGVkQ29udGVudFJlcXVlc3QgewpAQCAtNjM3LDYgKzUzOSw4IEBAIHB1YmxpYzoKICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUp
IGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmlu
Z0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIg
cmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1
dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpA
QCAtNjk4LDcgKzYwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9y
aWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVz
dWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3Qg
Q2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVy
TGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGlu
UmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQsMTEgKzY4
Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVu
aXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAg
dm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0
aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhh
dCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Niw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxh
eWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9s
bGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcjsg
fQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAvLyBMYXllcnMg
d2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24g
YW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAgICBPcHRpb25h
bDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7
IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAoaXNUcmFu
c3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5nKCkgJiYgIXJl
bmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAhaXNDb21wb3Np
dGVkKCkpOwpAQCAtODg1LDExICs3NzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJl
Y3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9v
bCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRl
cnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkg
Y29uc3Q7CiAKQEAgLTkxOCw4ICs4MDAsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7
IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQYWludEZyZXF1
ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAgIGJvb2wgcGFp
bnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIu
cGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgxMCw3IEBAIHB1YmxpYzoKICAg
ICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRp
bmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFs
aWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBT
dHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkwLDYgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51
bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFj
a2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5MDcsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0
cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0
b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQotICAgIFNjcm9s
bE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQog
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0Owog
CiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5s
b2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5MzksNiBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwg
Ym9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7
CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFz
ZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjYgKzk2NSwxNSBAQCBwcml2YXRlOgogICAg
IAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJv
b2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQg
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogCiAg
ICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAKLSAgICAvLyBTY3Jv
bGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQg
c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250
ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlz
aWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgb3Zlcmhh
bmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZp
bmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
KSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQg
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNl
dFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29u
c3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7Ci0gICAgCi0gICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7
Ci0KICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7
CiAgICAgdm9pZCBzZXRBbmNlc3RvckNoYWluSGFzVmlzaWJsZURlc2NlbmRhbnQoKTsKIApAQCAt
MTE5NiwxNCArMTAxMSw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFi
c29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50CiAgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQg
Y2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7
Ci0KICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9z
aXRpbmdEZXNjZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBi
OyB9CkBAIC0xMjE3LDIwICsxMDI0LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG92ZXJm
bG93TGVmdCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0Owog
Ci0gICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKLSAgICAgICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyOwotICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKLSAgICAgICAgSW50UmVjdCByZXNpemVyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3Ju
ZXIgOiByZXNpemVyOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0
cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmZsb3dDb250
cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKLQorICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29t
cG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIg
OiAxOwpAQCAtMTI0NCwxMCArMTAzOCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25vcm1hbEZs
b3dMaXN0RGlydHk6IDE7CiAgICAgYm9vbCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdCA6IDE7CiAK
LSAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVz
aXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCi0g
ICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7Ci0KLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAv
LyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8g
d2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0x
MjU5LDE0ICsxMDQ5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50
cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAv
LyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGlj
YS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3Jl
cGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNv
bnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsK
ICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBt
X2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsK
ICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjg3LDE3ICsxMDc1LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gOiA0OyAv
LyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0
cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7
Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93
ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM4LDI1ICsxMTE1LDggQEAgcHJpdmF0ZToKICAgICAvLyBU
aGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAg
U2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVp
Z2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0g
ICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxi
YXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJl
Y3RzQ2FjaGU7CiAgICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0OwotCi0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFp
dHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwotICAgIE1hcmthYmxl
PFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAw
Pj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8v
IENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVu
dHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJ
bmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAg
LTEzNjYsMTAgKzExMjYsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4
dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAg
ICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVy
ZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJl
bmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQ
dHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0
aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4g
SXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVy
PiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA1MTlkMzYxMDc4MDhlMzYyZjdjMDQw
ZjQyNzhjODgzYTJmMzkwNjFlLi5hZmJkMjUyMDVlOWMyZmY4MjY4MTBiZmEzMTFlNGI3N2Y0MmJk
ZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0yNjksNyArMjcw
LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCgpCiAjZW5kaWYK
IAogICAgIEFTU0VSVChtX293bmluZ0xheWVyLmJhY2tpbmcoKSA9PSB0aGlzKTsKLSAgICBjb21w
b3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKG1fb3duaW5nTGF5ZXIp
OworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKQorICAg
ICAgICBjb21wb3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpOwogCiAgICAgY2xlYXJC
YWNraW5nU2hhcmluZ0xheWVycygpOwogfQpAQCAtNDIxLDExICs0MjMsMTIgQEAgc3RhdGljIFRp
bGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxvd1RpbGVkQmFja2luZ0NvdmVy
YWdlKGNvbnN0IFJlbmQKIAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3Zl
cmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVz
ZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7
Ci0gICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgaWYgKCF1c2VN
aW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpKSB7CisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVDb3ZlcmFn
ZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsKIAotICAg
ICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQogICAg
ICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNh
bFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKQEAgLTEyMzIsOCAr
MTIzNSwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdy
YXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlmIChjb21wb3NpdGVkQW5j
ZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9z
aXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNj
cm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29u
dGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91
bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250
YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNvbXBvc2l0ZWRBbmNlc3RvcikpCisg
ICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSB0b0xheW91dFNpemUoZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihjb21wb3NpdGVkQW5jZXN0b3IpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAg
ICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVy
Qm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxv
Y2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsx
MjkwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGlu
Z0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVyZmxvd1Njcm9sbCkgewotICAgICAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGlu
Z0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci5nZXQoKSktPnNj
cm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0
Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbGFzdENsaXBMYXll
clJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMTM5MCw3ICsxMzk2LDkgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21w
b3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSBwYXJlbnRMYXll
ckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNl
dFNpemUocm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShzY3JvbGxDb250YWluZXJCb3gud2lkdGgo
KSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdodCgpKSkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpOworICAgICAgICBB
U1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAg
IGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bV9vd25pbmdMYXllcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTQw
NCw3ICsxNDEyLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAKICAgICAgICAgYm9vbCBwYWRk
aW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCi0gICAgICAgIEludFNpemUg
c2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5ZXIuc2Ny
b2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUoc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFk
ZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTcsMTggQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9m
ZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVy
LmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGlmICghaXM8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihtX293bmluZ0xheWVyKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcg
aXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVy
IGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAg
ICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhlIGNvbnRl
bnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwgcmF0aGVyIHRo
YW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3Jv
bGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6
U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQo
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwx
MiArMTkyMywxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxT
Y3JvbGxiYXIoKSk7CisgICAgaWYgKCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVy
KS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVx
dWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFy
KGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikudmVydGljYWxT
Y3JvbGxiYXIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9s
bENvcm5lckxheWVyKCkgY29uc3QKQEAgLTE5MjQsMTIgKzE5NDAsMTYgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICgh
aXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJs
ZUxheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3Qo
KTsKICAgICBpZiAoY29ybmVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBtX293bmluZ0xheWVyLnZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0gICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRp
Y2FsU2Nyb2xsYmFyIDogbV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNj
cm9sbGJhciA6IHNjcm9sbGFibGVMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0
dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwx
MCArMTk4NSwxMyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQg
fD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3Jv
bGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9v
d25pbmdMYXllcikpOworCisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CiAgICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXll
ciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIs
IEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXll
ckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKQEAgLTE5NzYsNyArMTk5OSwxMCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIu
aGFzU2Nyb2xsYmFycygpKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293
bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9
IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYg
KzIwMjQsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0
byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLm92
ZXJmbG93Q29udHJvbHNSZWN0cygpOwogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigq
bGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNl
dERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxNjUsNyArMjE5MSw4IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Nj
cm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hv
clBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCpt
X3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRv
cigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0
aGlzKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdM
YXllcikpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0
aEJhY2tpbmcoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSwg
KnRoaXMpOwogCiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxDb250YWluZXJMYXll
ci5nZXQoKSk7CiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXIuZ2V0KCkpOwpAQCAtMjE3NCw5ICsyMjAxLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAg
ICAgR3JhcGhpY3NMYXllcjo6dW5wYXJlbnRBbmRDbGVhcihtX3Njcm9sbGVkQ29udGVudHNMYXll
cik7CiAgICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpCi0gICAgICAgIGNv
bXBvc2l0b3IoKS5kaWRBZGRTY3JvbGxpbmdMYXllcihtX293bmluZ0xheWVyKTsKLSAgICAKKyAg
ICBpZiAobV9zY3JvbGxDb250YWluZXJMYXllcikgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAgIGNvbXBvc2l0b3IoKS5k
aWRBZGRTY3JvbGxpbmdMYXllcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3du
aW5nTGF5ZXIpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk4NSw4ICsz
MDE0LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJ
blJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAKICAgICBpZiAobV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVu
dCgpKSB7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVk
UmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVk
Q29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsK
KyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9m
ZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNl
dEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAg
LTMwMzIsOCArMzA2MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5
ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAo
JmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVy
Q29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAg
ICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJl
Z2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNv
bnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVy
RmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbGF5
ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8
IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKQEAg
LTMzMjMsMTcgKzMzNTUsMjMgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgICAg
IHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAogICAgIH0gZWxz
ZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikpOworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpLmhvcml6b250YWxTY3JvbGxi
YXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsK
KyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikp
OworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+
KG1fb3duaW5nTGF5ZXIpLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIEFTU0VSVChp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKTsKKyAgICAgICAgYXV0byYg
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmlu
Z0xheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlv
dXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5z
Zm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25p
bmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50
UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6
ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBl
ZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci5wYWlu
dFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAj
aWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi42ZWNm
YzBmNzI4M2JkOWUxYjY3YjAxOTNmMWRmNDAyM2MxMDNlZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICsz
MTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0
CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYg
KCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSB8fCAhZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcikuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocXVlcnlEYXRhLmxheW91dFVwVG9EYXRlID09IExh
eW91dFVwVG9EYXRlOjpObykgewpAQCAtMzI5Myw3ICszMjkzLDkgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGwKIAogc3RhdGljIGJvb2wgaXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXllcihj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBvdmVyZmxvd1Njcm9s
bExheWVyKQogewotICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJm
bG93U2Nyb2xsTGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVChpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS5ib3hTY3JvbGxpbmdTY29wZSgpID09IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikuY29udGVudHNT
Y3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBv
c2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRl
ckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRlTGF5ZXIpCkBA
IC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJv
bVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXll
ckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5LDExIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JWaWV3cG9ydENvbnN0cmFp
bmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3Jv
bGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBh
bmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBhbmNlc3RvckxheWVyIG5lZWRz
IHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxkIGJlY29tZSBhIHJlZmVyZW5jZS4KLSAg
ICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5
b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7CisgICAgaWYgKCFhbmNlc3RvckxheWVyKSB7
CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKS52aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CisgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBp
ZiAoaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEgKzQ1OTMsMTQg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91
bmRMYXllcigpLCBjbGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAg
IGZyYW1lVmlldy5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA/IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oJmxheWVyKSA6IG51bGxwdHI7CisKICAgICAgICAg
YXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAog
ICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9s
bGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXll
ci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDog
bnVsbHB0ciwKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAg
LTQ2MzAsOCArNDYzOCwxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1
cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29y
ZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9t
ZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkg
eworICAgICAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKTsK
KyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xs
YWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdOb2RlSUQ7CkBA
IC00NzY3LDIwICs0Nzc3LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
eW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAgIGF1dG8gcmVsZXZhbnRTY3Jv
bGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigp
ID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29w
ZSgpOwogICAgICAgICByZXR1cm4gbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAg
IH07CiAKLSAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5sYXllcigp
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdT
Y29wZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVy
IDogKnNsb3dSZXBhaW50T2JqZWN0cykgewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIu
ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXll
ciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3JvbGxpbmdT
Y29wZShyZW5kZXJlciwgKmxheWVyKTsKKyAgICAgICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJl
bGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpkb3duY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGxheWVyKSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xs
aW5nU2NvcGUpIHsKICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0g
YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMiBAQCBT
Y3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNj
cm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdl
dChub2RlSUQpLmdldCgpOworICAgIGF1dG8qIHJlc3VsdCA9IG1fc2Nyb2xsaW5nTm9kZVRvTGF5
ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVzdWx0KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4ocmVzdWx0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJC
YWNraW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIsIFJl
bmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRl
ckxheWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjYWxsZWQg
ZnJvbSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDkzOCw3ICs0OTUxLDcgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxp
bmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWUK
ICAgICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVy
TWFwLCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIu
YmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIgKzQ5NzgsMTIgQEAg
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxs
U2Nyb2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQor
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1fc2Nyb2xsaW5nTGF5
ZXJzLmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVy
TGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxh
eWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5n
TGF5ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9sbENvbnRhaW5lckxh
eWVyID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CkBA
IC00OTc5LDcgKzQ5OTIsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIH0KIH0KIAot
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAg
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4
NWIyNjk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVhOWVmNTYwNGY0Nzdh
MzBjYmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgog
I2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTIxLDIwICsx
MjEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAgICAKLSAgICB2b2lk
IGFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgYWRk
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAgdm9pZCByZW1vdmVT
Y3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJMYXllckJhY2tpbmcm
KTsKIAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7
CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsK
IAotICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHJlbW92ZUxh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xpZW50JiBtX2Nocm9t
ZUNsaWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsK
KyAgICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xsaW5nTGF5ZXJzOwog
ICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAK
ICAgICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CkBA
IC0zNTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKIAotICAg
IHZvaWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9pZCBkaWRBZGRTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xh
eWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5n
Jik7CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUm
KTsKIAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCBzZXRU
cmFja3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFja2luZ1JlcGFpbnRz
ID0gdHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRh
YWY0YTA4MTUxYThjYjFkLi5jNTAyZWE1NmZhZDEzYjgxMjQzZDJiMzQwYTcwZDZlYmQwOTAwZmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCkBAIC05NSw3ICs5NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
ZGVzdHJveUxheWVyKCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIo
KQogewogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXI+KCp0aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8g
b25seSBjcmVhdGUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9s
YXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0
SGFzTGF5ZXIodHJ1ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJM
YXllcjo6TGF5ZXJDaGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KQEAgLTIwOCw5ICsyMDks
MTAgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9s
ZFN0eWxlICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRl
KCpvbGRTdHlsZSwgbmV3U3R5bGUpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIgPSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9m
ZnNldHMoKTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KTsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cigpKSkgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNE
b2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVT
bmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyNSwxMSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7
CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5z
dHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVz
cyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9s
bFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAg
c2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihzY3JvbGxTbmFwQm94LT5sYXllcigpKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHNj
cm9sbFNuYXBCb3gtPmxheWVyKCkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5p
c0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNu
YXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29yZGluYXRvclNjcm9s
bFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQz
NzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li40MjM1ZGQyOGVlNWU1NWViYTQyMDRjNDg3ZDU2YzYy
YmQ2OTFlMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTsKIAogc3RydWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVj
dCBtX3JlcGFpbnRSZWN0OyAvLyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2Jq
ZWN0cyAoZS5nLiwgb3ZlcmZsb3c6aGlkZGVuKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4MzJjMTliNDlj
OTIwYTZhYWYwNTRlNDRlZTkyNWZjZDUxZTllOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCkBAIC0wLDAgKzEsMjA4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
CisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZv
dW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0
cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBs
aWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Yg
b25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICog
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBj
YXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkK
K3sKKyAgICBzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKKyAgICByZXR1
cm4gKytjdXJyZW50U2NvcGU7Cit9CisKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0KQorICAgIDogUmVuZGVyTGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0
LCBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlKQorICAgICwgbV9pblJlc2l6ZU1v
ZGUoZmFsc2UpCisgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9p
bk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YShmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKK3sKKyAgICBtX2lzU2Vs
ZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICBpZiAo
aXNSZW5kZXJWaWV3TGF5ZXIoKSkKKyAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworCisgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgeworICAgICAgICAvLyBXZSBz
YXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xs
IHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxl
bWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQ
b3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVu
dFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7CisgICAgfQorfQorCitSZW5kZXJMYXllclNj
cm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUoKQoreworICAgIGlmIChpblJlc2l6ZU1v
ZGUoKSkKKyAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxh
eWVyRGVzdHJveWVkKCk7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
PT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0
aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5
ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJl
cigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNj
cm9sbENvcm5lcigpOworICAgIGNsZWFyUmVzaXplcigpOworCisgICAgLy8gU2VlIHRoZSBjb21t
ZW50IGluIFJlbmRlckxheWVyOjpkZXN0cm95KCkgd2h5IHRoaXMgaXMgbmVlZGVkLgorICAgIFJl
bmRlckxheWVyOjpkZXN0cm95KCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVy
biBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gt
PmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
b250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCks
IHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1p
bihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBp
ZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6
ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgp
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGlu
c3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXpl
LndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBU
aGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1v
emlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIu
eG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRq
dXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1
c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4o
YWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkp
IC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVk
RGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0
PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVs
dGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0
IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBr
bm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3Rh
dGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91
c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAg
ICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAg
ICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNv
dXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhl
aWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEu
c2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCku
cGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsK
KyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAg
IC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5
ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4K
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBo
ZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRp
Y2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cg
Y2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUg
c2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5
KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxl
ZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklY
TUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkg
bG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVy
Kj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwor
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1h
dGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFs
dWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0Owor
fQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAoreworICAgIFJlbmRlclRy
ZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGU7CisKKyAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVy
ZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB9OworCisgICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGUqPih0aGlzKTsKKworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJv
dW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5
ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihuZXh0
TGF5ZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KG5leHRMYXllcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hh
bmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxl
QXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBpZiAocmVh
c29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxk
cmVuKHRydWUpOworICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xs
YWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250
YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3go
KS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAo
aGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAm
JiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdp
b25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNp
dHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhh
c1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAg
ICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9
IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5n
Rm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21h
dGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRW
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisg
ICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xs
YmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRl
IHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9s
bGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9v
dCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAg
ICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2Vu
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNj
cm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7CisgICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Cisg
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQor
ICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24p
OworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0g
bnVsbHB0cjsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNI
aWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7
Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OworCisgICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQor
eworICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3go
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRM
YXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihuZXh0TGF5ZXIpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obmV4dExheWVyKS0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJl
dHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOworfQorI2VuZGlmCisK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50
KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNj
cm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRp
ZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRpZEVuZFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92
ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRVcGRh
dGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3Jv
bGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgcGFn
ZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9
CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJl
cigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3Jl
aWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZM
T1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkg
fHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3Jv
bGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAg
ICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAg
ICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIo
KS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2Nh
bFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3Rz
LnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENv
cm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFy
ICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Cisg
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
CisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisg
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
KyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KHBhaW50aW5nUm9vdCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KHBhaW50aW5nUm9vdCktPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sg
aXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNl
LgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAg
ICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsK
KworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9y
bWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1l
cworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0
IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5z
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2Un
cmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVt
LgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIg
JiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGgg
d2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5
IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICAKKyAgICAv
LyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Ny
b2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNl
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQp
OworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWlu
dEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2Ug
aGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hh
dCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNS
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVy
QWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4
dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVz
aXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQu
CisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Vz
IG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZC
YXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Cisg
ICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAg
IGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAx
X2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0
KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworLy8gVGhpcyBpcyBj
YWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBT
Y3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAg
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4g
Y2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBp
ZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBzZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIp
Cit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5S
ZXNpemUoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJh
bWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCisgICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhv
d2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCisgICAg
Ly8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCisgICAgcmV0dXJuIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkg
JiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0
IG5vdy4KKyAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVy
ZXIoKS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIg
aXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPworICAgIC8vIElmIHRo
ZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0
bHkuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsK
KworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKworICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7CisgICAgYXV0byBsb2NhbFBvaW50
ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7CisK
KyAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvcik7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShy
ZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOworICAgIGVsZW1lbnQtPnNldE1p
bmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOworICAgIAorICAgIExheW91dFNpemUg
YWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBuZXdPZmZzZXQu
c2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQu
c2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOworICAgIH0KKyAgICAKKyAgICBM
YXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3Rl
ZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKKworICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihl
bGVtZW50KTsKKyAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCku
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7CisKKyAgICBSZXNpemUgcmVzaXpl
ID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7CisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6
OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVy
LT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9
IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZVdpZHRo
ID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAg
IGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
IHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewor
ICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxp
Y2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4K
KyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRv
bSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAg
ICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6
aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwor
CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xs
IHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJz
b3IgaW4gdmlldy4KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpCit7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMp
Cit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChib3VuZHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXll
ciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGls
ZCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+
Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKQoreworICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgp
OworICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9
CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5k
ZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGlsZCkpCisgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+cmVwYWludEJsb2NrU2VsZWN0
aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRC
bG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5
UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0
IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgp
LCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlm
IChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7
IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlz
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xh
eWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBt
X2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zv
ckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVu
ZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNB
dXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxi
YXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDog
c3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9
IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBv
dmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93
IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVy
Zmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2lu
ZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtl
ZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAg
IGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAm
JiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29s
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFz
VmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Ym94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJs
YXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5
IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdl
IG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIg
JiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFy
ICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3Jv
bGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3Zl
cmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNh
bE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwg
dGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAm
JiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigp
LnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVk
KGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVo
YXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBv
ciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1
dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRl
U2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKwor
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykg
eworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJl
cigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJl
bnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJv
eD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Cisg
ICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXAp
LgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6
OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94
LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFn
ZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciog
bGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdz
KQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4oY2hpbGQpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihjaGlsZCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
Z2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZl
bHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGNoaWxkLCBnZW9tZXRyeU1hcCwgZmxh
Z3MpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBj
b3JuZXIgY2FzZXMgd2hlcmUKKyAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVw
ZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KKyAgICB1cGRhdGVEZXNjZW5k
YW50RGVwZW5kZW50RmxhZ3MoKTsKKworICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250
ZW50IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1
dGluZworICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3Vy
IHZpc2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCisgICAgLy8gcmVjb21wdXRl
IGFsbCBvdXIgcG9zaXRpb25zIGFueXdheS4KKyAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRh
bnQgJiYgIW1faGFzVmlzaWJsZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
cG9zaXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigpOworICAgIGlmIChwb3NpdGlv
bkNoYW5nZWQpCisgICAgICAgIGZsYWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOworCisgICAg
aWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3Bv
cnRDb25zdHJhaW5lZEFuY2VzdG9yLCBJc092ZXJmbG93U2Nyb2xsIH0pKQorICAgICAgICBjbGVh
ckNsaXBSZWN0cygpOworCisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENv
bnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENv
bnN0cmFpbmVkQW5jZXN0b3IpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgIGZsYWdzLmFkZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsK
KyAgICAKKyAgICBib29sIHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFp
bnMoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNB
bGwoeyBJc092ZXJmbG93U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0p
KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAh
aXNWaXN1YWxseU5vbkVtcHR5KCk7CisgICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3Mg
PSBnZW9tZXRyeU1hcCAmJiAoKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFs
bHlFbXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBp
bmdzKQorICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CisKKyAgICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgeworICAgICAg
ICAvLyBXaGVuIHNjcm9sbGluZywgd2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2
aXN1YWxseSBub24tZW1wdHkgbGF5ZXJzLgorICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQor
ICAgICAgICAgICAgY2xlYXJSZXBhaW50UmVjdHMoKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTog
V2UgY291bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUg
dHJlZS4KKyAgICAgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIFdoZW4g
U2Nyb2xsVmlldydzIG1fcGFpbnRzRW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5
ZXIgYmFja2luZyBjaGFuZ2VzLCB0aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KKyAg
ICAgICAgLy8gdmlzdWFsIHRvIGxheW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhl
IGNhY2hlZCByZXBhaW50IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUg
cmVjb21wdXRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xODgxMjEpLgorICAgICAgICAvLyBDaGVjayB0
aGF0IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNvcnJlY3QuCisgICAgICAgIEFTU0VSVCghcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRS
ZWN0cygpLm1fcmVwYWludFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgICAgICBBU1NF
UlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBh
aW50TGF5b3V0UmVjdHMoKS5tX291dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRz
Rm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgIH0KKwor
ICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCh0aGlzLCBnZW9t
ZXRyeU1hcCwgZmxhZ3MpOyAgICAKKworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVj
dGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2Ug
dGhlIHNpemUoKQorICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwg
c3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwor
ICAgIC8vIHVwZGF0ZWQgYWJvdmUuCisKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIGJv
b2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KKworICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOworCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1h
cmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Cit9CisKK1Njcm9sbE9mZnNl
dCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29u
c3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykK
K3sKKyAgICBpZiAoIWhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250
ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBp
eGVsT2Zmc2V0KSksCisgICAgICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAor
eworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNj
cm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJu
IHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhl
IHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAor
eworICAgIGlmICghY2FuUmVzaXplKCkgfHwgbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50
UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Cisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3Ju
ZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29u
c3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRG
cm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdt
ZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNp
emUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAg
ICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJv
eFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAt
IG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5G
cmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lmxh
eWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdt
ZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAg
ICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50
KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdp
ZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBt
X3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJm
bG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0lu
dChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVm
dE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJs
ZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3Ao
KSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93
LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
JiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJl
cGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNp
emVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Ny
b2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3go
KSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRS
ZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAg
IHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0
Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBj
b25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5n
KCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xs
aW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50
UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxi
YXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIElu
dFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYm
IHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xs
YmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVT
aXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigp
LCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0
aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5o
ZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3Zlcmhh
bmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAo
IXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0
cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVz
dCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBh
dXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlm
IChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xs
T2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3Jv
bGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkK
KyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVT
aXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0
LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiBy
ZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5z
ZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2li
bGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIElu
dFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hh
bmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwor
fQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGlu
Z0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigp
LmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNp
ZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZs
b3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxB
bmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9s
bEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVy
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2Fn
ZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQor
eworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5k
ZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVt
ZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24g
PDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxU
eXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRv
IGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hh
dCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdp
dGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgp
IC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Cisg
ICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAg
ICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYg
KHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
WE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Nj
cm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9m
ZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxY
T2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAg
ICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGgg
YW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAg
ICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdl
IHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRz
Q29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3
JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRl
KCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUg
bG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxp
bmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRh
bnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAg
ICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRh
dGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFy
IHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJp
bmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlv
dXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5k
ZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJl
dCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0
UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
PyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJl
cigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisg
ICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZv
clJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFr
ZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVu
dCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5u
ZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNj
aGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVw
YWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBh
bmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBl
bmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJm
bG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAg
ZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgp
Cit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkg
eworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29u
dGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVw
b3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRl
eHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRT
Y3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hv
c2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRI
aWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9z
aXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lu
dFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAg
ICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2li
bGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9
IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hp
dFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVU
b0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYg
aXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNv
bnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQor
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgT3B0aW9uYWw8SW50U2l6ZT4m
IG9mZnNldEZyb21Sb290LCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApCit7CisgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUg
b2Zmc2V0OworICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKKyAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0
RnJvbVJvb3QudmFsdWUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgTGF5b3V0U2l6ZSBjb21wdXRl
ZE9mZnNldEZyb21Sb290OworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgICAgICBj
b21wdXRlZE9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1h
cC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEl0IGxvb2tzIHN1c3BpY2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9MYXll
ckNvb3JkcyBoZXJlCisgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3Ig
bWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgorICAgICAgICAgICAgY29tcHV0ZWRP
ZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOworICAgICAgICB9Cisg
ICAgICAgIG9mZnNldCA9IHJvdW5kZWRJbnRTaXplKGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3QpOwor
ICAgIH0KKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXQpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgfQorICAgIAorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0
KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENv
cm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxD
b3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFt
ZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVu
ZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5l
ciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5j
YWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJl
bmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAg
ICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
Y29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxk
IG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRl
cmVyKCkpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUo
KQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3Jv
bGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50
KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hv
dWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyUmVzaXplcigpCit7Cisg
ICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBh
cmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAg
UmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVz
aXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29y
bmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNv
cm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXpl
Q29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVy
SW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCitS
ZW5kZXJMYXllclNjcm9sbGFibGU6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8
UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhl
IGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0g
c25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9o
QmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92
QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xs
YmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisg
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxT
Y3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29s
IHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZv
aWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJs
YXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIp
KTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUg
Y29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0
OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJS
ZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9s
bGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJS
ZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAg
ICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAg
IH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxi
YXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VU
byhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAs
IGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJh
ciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUg
Y29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVm
dCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNv
cm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlD
b3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5l
clJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVz
dWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9s
bGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVz
cygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFy
VGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAor
eworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0
cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3Jv
bGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkKK3sKKyAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1
dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVl
ZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVo
YXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJx
dWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0
aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVs
c2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Ny
b2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0
IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVk
UGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChw
b3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigp
LnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KHBvc2l0aW9uZWRQYXJlbnQpKSB7CisgICAgICAgICAgICBhdXRvKiBwb3NpdGlvbmVk
UGFyZW50U2Nyb2xsYWJsZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocG9zaXRp
b25lZFBhcmVudCk7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1
YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0
LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlv
dXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKwor
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5y
ZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNl
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVy
ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocGFy
ZW50TGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGUgPSBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHBhcmVudExheWVyKTsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRMYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJT
Y3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgQVNTRVJUKHBhcmVu
dExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdMYXllciA9IHBhcmVudExheWVyLT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxl
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHdoaWxlIChlbmNsb3NpbmdMYXllcikgeworICAgICAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkg
eworICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuY2xvc2lu
Z0xheWVyID0gZW5jbG9zaW5nTGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSB7CisgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNT
Y3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250
ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlm
ICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAh
PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUg
PSBtX2JveFNjcm9sbGluZ1Njb3BlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBh
IHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4K
KyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlm
IChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3QKK3sKKyAgICBp
ZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBp
cyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCisgICAgLy8g
RklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2VkIHRvIGJlIHJlbGV2YW50IGZvciBT
YWZhcmkgUlNTLgorICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpICYmICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xpcCBzZXQuCisKKyAgICBpZiAocmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCkpIHsK
KyAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJlIGlzIG1pc2xlYWRpbmc7IHRo
aXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUgb3ZlcmZsb3csCisgICAgICAg
IC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNvbnRyb2wuCisgICAgICAgIHJl
dHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKTsKKyAgICB9CisKKyAgICAv
LyBQcm9ncmFtbWF0aWMgc2Nyb2xscyBjYW4gc2Nyb2xsIG92ZXJmbG93OmhpZGRlbi4KKyAgICBy
ZXR1cm4gYm94LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBib3gtPmhhc1ZlcnRpY2FsT3Zl
cmZsb3coKTsKK30KKworT3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxvd2VkKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRv
VmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFhbGxvd3NDdXJyZW50U2Nyb2xs
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBEb24ndCBzY3JvbGwg
dG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdl
YmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZy
b20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KKyAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExh
eW91dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1
YWQoRmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIC8vIEZv
ciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNj
cm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAorICAgICAgICAv
LyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBs
b2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgor
ICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCksIDApKTsKKyAgICB9CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOworICAgIExh
eW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxF
eHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsK
KworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCku
bG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNl
dCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNz
ID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVz
cygpOworICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgJiYgdXNlU21vb3RoU2Ny
b2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIGJveC0+ZWxlbWVudCgpKSkKKyAgICAgICAgICAgIGFu
aW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQg
LSBvbGRTY3JvbGxPZmZzZXQ7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRy
YW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHJldHVybiBhYnNvbHV0ZVJl
Y3Q7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTE1NjkzYzEyNDZhZjYyMzQ0YTUzN2I2MjNhYWFmYWE5
YjhiMjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmlj
YXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9i
ZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJv
bkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJA
d2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xh
bmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAq
ICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8Ynpi
YXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBv
ZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3
dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxl
IGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9m
IHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1h
eSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBv
ZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWlu
dDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBmaW5hbAorICAgIDogcHVibGlj
IFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNpdCBSZW5kZXJMYXllclNjcm9s
bGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVy
U2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0
IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50
U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAgaW50
IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisg
ICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNj
cm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93
LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIGJvb2wgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9s
bFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Cisg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
YnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xs
VG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpV
bmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRp
b25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3Npbmcg
bGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4g
dGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJh
bWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZh
aWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIHNjcm9sbHNPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNv
bnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKyAg
ICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9
CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJh
cihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsg
fQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmlu
YWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKKyAgICBTY3JvbGxQb3NpdGlv
biBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247
IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZv
aWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRy
dWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1Jl
Y29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgp
IGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhl
IGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0
aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wg
aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OworICAgIHZvaWQgcmVz
aXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNpemUmKTsKKyAgICBi
b29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CisgICAg
dm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQorCisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKyAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgdm9p
ZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZv
aWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB2b2lkIHJlcGFpbnRCbG9j
a1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgorICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29u
dGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIGJv
b2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKKyAgICAg
ICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAg
ICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAgICA9IDEgPDwgMiwK
KyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRl
ckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworCisgICAgYm9v
bCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAgIGJvb2wgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9pZCBjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQorICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOworICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOyAgCisKKyAgICBJbnRT
aXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICB2b2lkIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBPcHRpb25hbDxJbnRTaXplPiYgb2Zmc2V0RnJv
bVJvb3QsIFJlbmRlckdlb21ldHJ5TWFwKiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9p
ZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAg
dm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJv
bFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJ
bnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsK
KyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9y
UmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9s
bENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50
UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAg
IHZvaWQgY3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0
U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBv
aW50KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgYm9vbCBhbGxvd3ND
dXJyZW50U2Nyb2xsKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVj
dFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRp
b25zJik7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5
ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRv
IHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworICAgIGJvb2wg
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlv
dXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBi
b29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyNl
bmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOworI2Vu
ZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDog
MTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBi
b29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Nyb2xsUG9zaXRpb24g
bV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3Jv
bGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAgLy8gRm9yIGxheWVy
cyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAg
ICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICBNYXJrYWJs
ZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwg
MD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIElu
dGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVl
OyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIg
Y3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJlbmRlclNj
cm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5cGUoKSA9PSBXZWJD
b3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0OGUyNC4uNzJjMjk4
YTcyMmZhMTBmNGEzY2FhZDM5YTM0NWE3YmQ2YTkyM2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8u
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5LDEwICs4NzksOSBA
QCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZv
clBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRvKiBsYXllciA9IGVu
Y2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5
ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICgh
bGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5
ZXIpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CiB9CiAKIEludFJl
Y3QgUmVuZGVyTGlzdEJveDo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0
ZDA5OTZlNmJmYmU0MGE2NDQxMTY0NDU5YWE2NzgwZDhiLi4xYmE1YTYwMjFlOGQyMTNhYmQ0MjRl
N2VlZjUyMzg0YmY0MDE5MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCkBAIC00OSwxNCArNDksMTQgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJl
bmRlckxheWVyKiBsYXllcikKK1JlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBsYXllcikKICAgICA6IG1fbGF5ZXIobGF5ZXIpCiAgICAgLCBtX3RpbWVy
KCp0aGlzLCAmUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5oCmluZGV4IDFjNzg4NDk1ZTBlODg1NzVlODBiZjkzMDhhMmY0
OTRmYjRhNjI4ZDUuLjA4NGFkMzM3NzQ4NmRmOWNlODMyNTY2NjY4NTQ1MmM0N2I5ODIzMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaApAQCAtNDksMTMgKzQ5LDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBS
ZW5kZXJMYXllclNjcm9sbGFibGU7CiAKIC8vIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgYXV0by1z
Y3JvbGxpbmcgZm9yIDxtYXJxdWVlPgogY2xhc3MgUmVuZGVyTWFycXVlZSBmaW5hbCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyTWFycXVlZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsK
KyAgICBleHBsaWNpdCBSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSopOwogICAg
IH5SZW5kZXJNYXJxdWVlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwpAQCAt
ODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKLSAgICBS
ZW5kZXJMYXllciogbV9sYXllcjsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fbGF5ZXI7
CiAgICAgVGltZXIgbV90aW1lcjsKICAgICBpbnQgbV9jdXJyZW50TG9vcCB7IDAgfTsKICAgICBp
bnQgbV90b3RhbExvb3BzIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDcxMTNmNWMzMjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjk1NzU0
MWE2YmU4MWYxYzBjNmNjZDdjYTQ2ZjVjYmYxYzNiNmQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmpl
Y3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5k
ZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBwdWJsaWM6CiAgICAgLy8gQW5vbnlt
b3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0
aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFub255bW91
cyBpbiB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IGEwNzUwODFmNTY1Y2Vk
YjU1ZGRiZWM5NjhlYzJjYjEzOWQ2MGJhYjguLjg1NWE5MmM4MWFkM2ZjNGM0MDdmMjQ4MmYxMDIw
ODI4N2ZkNGM2YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDAwLDE3
ICs0MDAsMjMgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWwKICAgICBSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
ICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5s
YXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVu
ZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYm
IGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+
c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZh
M2Q1NjgyZDc5MzU2OTVjMjNmNjBjLi4xZjEwYTMyMjk0NjZjODU2YTI0MmQ3ODA0MDVkYWRkYzVi
ZjRmYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5k
ZXJMaXN0TWFya2VyLmgiCkBAIC01OTksMjAgKzU5OSwyMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUxh
eWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91
dFJlYwogICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAg
ICB9CiAKLSAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBz
Y3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5
ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYg
cm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Ny
b2xsV2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5z
Y3JvbGxXaWR0aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdo
dCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxI
ZWlnaHQoKTsKKyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCisgICAgICAgICAgICB0
cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAg
ICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS55
KCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNj
cm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
OwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFz
VmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9j
a1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAg
ICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2FzdDxTY3Jv
bGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7Ci0gICAgICAgICAgICBpZiAobWFjVGhl
bWUuaXNMYXlvdXREaXJlY3Rpb25SVEwoKmxheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAg
ICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5
ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxi
YXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOwogICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZm
N2YwMDZmMjA4NWZhOWFiNDI2Yy4uYzliYmQzYjY5YjAxOWI0NGNkZTcyZGM5NDYyZGM1MzE2NWYz
YTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4
LDggKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0z
MjksOCArMzI5LDEyIEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBs
YXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50
SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFp
bnRJbmZvLnJlY3QpOworICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVzaXplcihwYWludEluZm8u
Y29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5m
by5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJv
b2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMw
NTNhNGRkYTIwMDhlZmQ3YTY2ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgwMmYzNTFjOTJjNTg0ZmZh
NGQzZTNhMzA3NjdiYzAyNTc1NTA0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTE1NSw2ICsxNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE5MDYsNyArMTkwNyw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBlbGVtZW50
LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJl
YSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKSk7CisgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7
CiAgICAgfQogICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAwLDggKzI5MDIs
OCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFy
ZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxS
ZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KHJlbmRlckJveC5sYXllcigpKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJCb3gubGF5
ZXIoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4
IDg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDczODg1M2RkNTAuLmU4MzY4MzQ2MWEwOThh
NDQ1ZmJkYzVjYThjMDA5NTQ0YmU4ZDJhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0F1dG9jYXBpdGFs
aXplLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1l
c3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzcsMTEgQEAgLSAoaW50KXNjcm9sbFhPZmZzZXQK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAhaXM8V2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5zY3JvbGxP
ZmZzZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC04OCwxMCArOTIsMTUg
QEAgLSAoaW50KXNjcm9sbFlPZmZzZXQKIAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWlu
aW5nQmxvY2soKTsKKwogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
IHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigp
LT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyIHx8ICFpczxX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPnNjcm9sbE9mZnNldCgpLnkoKTsKIH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0
OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeQpAQCAtMTExLDExICsxMjAsMTYgQEAgLSAodm9p
ZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeSBhZGp1c3RGb3JJ
T1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogbGF5ZXIgPSBk
b3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyIHx8ICFpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKwogICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zm
c2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNj
cm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQp
YWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZWY3MzUw
MDRlYTZkMDVlOTEyODZlY2ZhNmYwZjhkNDAxMDVlNjZkZS4uZGM5NjE4MTA2NWFmZTI3Y2Q5MDAx
NzlhNmUxZDQ0YTFkNzE5YzgyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCkBAIC05NCw3ICs5NCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsdWdpbkRh
dGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1JhbmdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBAIC03MzcsMTAgKzczNywxMSBAQCAtICh2b2lkKV9z
Y3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZQogICAgICAgICBzdGFydE5v
ZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50
UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxN
b2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3Jl
OjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7CiAjZWxzZQogICAgICAg
ICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsK
LSAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICBpZiAobGF5ZXIgJiYgaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJl
Y3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVG
aXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNj
cm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25t
ZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2lu
U2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgIF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAg
ICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgIH0KQEAgLTc1NywxMCArNzU4LDExIEBAIC0gKHZvaWQpX3Njcm9sbERP
TVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlIHdpdGhJbnNldDooQ0dGbG9hdClpbnNl
dAogCiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAg
ICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7
Ci0gICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgaWYgKGxheWVyICYmIGlzPFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsK
KyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRl
Rml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIAogICAgICAgICAgICAgYXV0
byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFtZSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBiZjY4YTcxNDVkYTg5OGVkNGU3Y2U3
NGU2MTU3ZjAwYmQ3MGY3YTYzLi5jOGM0NzEwOTYzYzQ1MjM4N2M4YjJjYzZmYzM0MzdhOTM2YTQ5
ODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ1LDcgKzE0NSw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVw
TWVudVdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmll
dy5oPgpAQCAtMjAzNSwxMCArMjAzNSwxMiBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFN
IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBkZXZp
Y2VTY2FsZUZhY3RvcigpOwogICAgICAgICBJbnRTaXplIGxvZ2ljYWxTY3JvbGxEZWx0YSgtZGVs
dGFYICogc2NhbGVGYWN0b3IsIC1kZWx0YVkgKiBzY2FsZUZhY3Rvcik7CiAKLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CisgICAgICAgIFJlbmRlckxheWVy
U2Nyb2xsYWJsZSogc2Nyb2xsYWJsZUxheWVyID0gbnVsbHB0cjsKICAgICAgICAgaWYgKG1fZ2Vz
dHVyZVRhcmdldE5vZGUgJiYgbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSkgewotICAg
ICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gbV9nZXN0dXJlVGFyZ2V0Tm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBs
YXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikp
CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpIHsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA1OGYzMTliYWIxOTU4ZmVmZTViNTNiOTU3YmVkY2JmNTIzZmM5MDFhLi4zODM1N2FjMGZk
NjM3ZWJhMzBhMDYwNjkzYmEzNjgzMTk2ZmY0NzYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIw
MjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisK
KyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRl
ckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAg
ICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGdsaWIgZXhwZWN0YXRpb24gZm9yIHRoZSB0ZXN0CisgICAg
ICAgIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMuaHRtbC4KKyAg
ICAgICAgKFRoaXMgaXMgdW5yZWxhdGVkIHRvIHRoaXMgYnJhbmNoLCBhbmQgc2hvdWxkIGJlIGZp
eGVkIGJlZm9yZSkKKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1i
YXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0OgorICAgICAgICBzL1JlbmRlckxheWVyL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZS8KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3RlcHMt
dHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNp
Yy1ldmVudHMtZXhwZWN0ZWQudHh0OgorICAgICAgICBzL1JlbmRlckxheWVyL1JlbmRlckxheWVy
U2Nyb2xsYWJsZS8KKwogMjAyMC0wOC0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBSZW1vdmUgc3VwcG9ydCBmb3IgTlBB
UEkgcGx1Z2lucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xs
LWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3Nj
cm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dAppbmRleCA5
MzZiZWQyNWMyNzE3ZjUyMWRjNTZkNTMyNjMwOWRiODY5NGEyNjE1Li45YTM0Njc1ZDFmNDYyNzQ3
MDBiZDQ3ZjJiZGZlYzUyN2NjYzFiNjljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Nj
cm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4
cGVjdGVkLnR4dApAQCAtMSwxNCArMSwxNCBAQAogQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVW
aWV3OiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQogQ09OU09MRSBNRVNTQUdFOiBNYWluRnJhbWVW
aWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXll
cjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6
IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgogQ09O
U09MRSBNRVNTQUdFOiBNYWluRnJhbWVWaWV3OiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgot
Q09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJh
cgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9s
bGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91
c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVy
U2Nyb2xsYWJsZTogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKIENP
TlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEKK0NPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVh
CiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9z
dGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBk
YXRlcy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YjJhMzhj
YTI3M2M2ZDcwMDY4Nzg2ZTMzOWRmNzQxZTY0Y2E0ZTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9hbmltYXRp
b25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLVBBU1MgY291bnQgaXMgMAotUEFTUyBjb3VudCA8IDYg
aXMgdHJ1ZQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQotCi1URVNUIENPTVBMRVRF
Ci0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1l
dmVudHMtZXhwZWN0ZWQudHh0CmluZGV4IDYwY2RiNjZjMWYwYTJiMTA3ZjU4NDE3YjMzMmVmODdm
NjE1MWY5NDIuLjQ1ODdmOWI1ZDRlMTU5ZGI4YzM1YzkyNGMwNDA2ZWVhZmVkNjNjZTEgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xs
LWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRz
LWV4cGVjdGVkLnR4dApAQCAtMSwxMSArMSwxMSBAQAotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllcjogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5
ZXI6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRl
ckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllcjogbW91c2VJc0Rvd25JblZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCi1DT05TT0xFIE1FU1NBR0U6
IFJlbmRlckxheWVyOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQotQ09OU09MRSBNRVNTQUdFOiBS
ZW5kZXJMYXllcjogbW91c2VFeGl0ZWRWZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdF
OiBSZW5kZXJMYXllcjogbW91c2VFeGl0ZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBS
ZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxi
YXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNl
SXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNj
cm9sbGFibGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQorQ09OU09MRSBN
RVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxi
YXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhCiBUaGlzIGlzIGEgc2Nyb2xsYWJsZSBkaXYuCiAKIFBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406713</attachid>
            <date>2020-08-17 06:45:10 -0700</date>
            <delta_ts>2020-08-17 10:07:37 -0700</delta_ts>
            <desc>Patch, v3</desc>
            <filename>bug-60305-20200817154508.patch</filename>
            <type>text/plain</type>
            <size>367036</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1NGM1MDg0NDNkNjBi
YmNjYzM5YTk4OWM5MTY1OTE0MjhhNDE0ZS4uZGE5ZDRiYTNmOGFmNDMxNjU4ZGZmZmQ5YWU4NDU5
Y2EyZjUwNjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMyBAQAorMjAyMC0wOC0xNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIFNvdXJj
ZXMudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdG8uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omdl
dFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVsRXZl
bnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6Cisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpv
dmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9y
Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRBbmRDb21t
aXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRy
aW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVlbEV2ZW50
TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9s
bGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNj
cm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFp
bnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25z
dHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkRm9yU2Nyb2xs
YWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0Zv
clNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVNYXJxdWVlRm9yU2Ny
b2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVw
ZGF0ZVNjcm9sbGluZ1Njb3Blc0ZvclNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxv
d2VkRm9yU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmF1dG9z
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHNGb3JTY3JvbGxhYmxlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFBhaW50
T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllclR5cGUgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93
U2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsZWRCeU92ZXJmbG93
U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5n
Tm9kZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9y
U2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1
cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNyZWF0ZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJy
ZW50U2Nyb2xsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxv
Z2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTA4LTE3ICBZdXN1a2UgU3V6
dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCA2MmRhZDE1MWY2NDNiMDE3NTA1NjZlYTAwYmRiYmI0MGFjYTExNGFjLi41YTMy
ZjRjYjcxNzY0OTk3YTk5MDAyMDg4MGQ5MDMxYzY3YTE2MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5n
IGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBS
ZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNj
cm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFu
Z2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMDgtMTIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgbmVlZCBmb3IgZGVmaW5pbmcgVVNFX05F
V19CVUlMRF9TWVNURU0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3
YjgwZDFjZjc0ZjJlM2U4YWJlOWZjOThjNTUwNjIzLi4yYzZlYWFjMTM1NzFlMzdiYTM1YmRkNjUx
Y2VhOTM0NzNmYmY0OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxp
YS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxh
eWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0
IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFibGUu
CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgor
CiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IGE2Y2E1NDEwYzQxYWZmZWIxYmI1ZWQxMDZhNmFkMTkzYjNiYWYz
NzguLmMyZjczYmIyYzlkZDdlMmM3MTk5YzQ1NTA0MTA1NDNlOGZiNTMxOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTM5MSw2ICsxMzkxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQxODAxYWEw
MWZlOTI4MzBiM2VhODI2ZTY5N2JkYWI4NWZjODRmOTcuLmVhYmViMGViYTI4ZjIwNTIyOTMwMjY2
NTVmYjA3MjJmNDg5OTI0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTI4LDYgKzIxMjgsNyBAQCBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0
U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmM2ODgxYmU4
MjA4ZTIwZDMzZTI0NmQyNTZlNzY5YmZkMjdmNGYwYS4uYTljNzhjZDMxYjA0Mjc4YjliYzk2NGNi
OThjZDM2OGI3N2ZlNTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA4LDYgKzMwOCw3IEBACiAJCTBGNTgwQjBFMEYxMkEy
NjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTgwQ0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRjBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5Njkz
OTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAv
KiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUzMTBGNjVEN0Ew
MDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTI1LDYgKzU5MjYsOCBAQAogCQkwRjU4MENG
QTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyTGF5ZXJCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZD
MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJM
YXllclNjcm9sbGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkMw
RjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBG
QTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBB
bmltYXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5p
bWF0aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc3Niw2
ICsyODc3OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
RmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovLAorCQkJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0
MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQx
RDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVF
ODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi8sCkBAIC0zMzEzNyw2ICszMzE0
Miw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRl
ckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDBkODM4ZDU3NDgxZmI0N2JkOWZlMjlkOTdhNWRjMDlhYjFkOGNhYjYuLjNiZjQ2Zjcz
NmU3YTUyZTVhOWQ4ZDIxOTk4ZjIwYzJhYzUyYWJiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkxNiw3ICszOTE2LDggQEAgU2Nyb2xsYWJsZUFyZWEq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxl
KCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94LmxheWVyKCkpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3Jv
bGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihi
b3gubGF5ZXIoKSkpOworICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94Lmxh
eWVyKCkpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1
MWVjNDQ0Y2QuLmM1NjgyMDVjMWRhODUyMDMzZTFkYTBkMjYxNjYyNzkxYjJjM2Y1ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFz
c0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVl
VXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdl
cihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZp
b3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpO
bzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUo
dHJ1ZSk7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5s
YXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVu
ZGVyZXItPmxheWVyKCkpLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsK
ICAgICB9CiB9CiAKQEAgLTEzMzIsOCArMTMzMiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xs
VG9wKGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIo
bmV3VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6
OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJlci0+bGF5ZXIo
KSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVy
LT5sYXllcigpKS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5
N2U2NmY4ZjhhZjA1ZmEwMjc3NmEwMDg1MGY1ZjU1YWU4NjFmM2YuLjcwZDk5OWE3YjI4NzUxYzg4
YzZjOTY2MTA2NmY1N2Y5YTk0NjYxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTI0MTIsOSArMjQxMiwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIg
PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikgPyBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA6
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUo
cmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNo
b3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRlMmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNjMjcxMjc1
Li4zODA4YzZiMjM1YzZjMDMwZGE3NDFiZjg2MTRhNjUyNzI3MDkwZWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc1LDkgQEAg
UmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5s
YXllcigpLT5tYXJxdWVlKCk7CisgICAgYXV0byogbGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpOworICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5t
YXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZm
ZDQ0ZTFjNDQyNjc4NmEzLi44OGM4ODQ0NmM5NGQ2MjljMGY2ODk1MWQzZTg2Y2ZjZjNjZDc0NjIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3
ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDYsMTMgKzI0NiwxNCBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvKiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWlubmVyVGV4dFJlbmRlcmVyKQorICAgIGlmICghaW5uZXJUZXh0
UmVuZGVyZXIgfHwgIWlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVyZXItPmxheWVyKCk7Ci0g
ICAgaWYgKCFpbm5lckxheWVyKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihp
bm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8q
IGlubmVyTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGlubmVyVGV4dFJl
bmRlcmVyLT5sYXllcigpKTsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRv
d25jYXN0PFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7
CiAgICAgaW5uZXJMYXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBl
MGU1MWZmNzYxMzkyLi5iYjcyYzY4MzNmMTY5OWY5NDA0YzU2Y2IzYTVlNjVhM2M3ZTY0YWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtMzQzLDEyICszNDMsMTUgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBw
cm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGls
ZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExh
eWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAg
ICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRm
b3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1F
dmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lk
dGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdo
ZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExh
eWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94TGF5
ZXIpKSB7CisgICAgICAgICAgICAgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3hMYXllcik7CisgICAgICAgICAgICAgICAgaWYg
KHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBib3hM
YXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0g
ZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3aGVlbEV2ZW50
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dhc0hhbmRsZWQp
IHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmVs
ZW1lbnQoKTsKQEAgLTE1NjksOSArMTU3MiwxMiBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAog
ICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwgdGhlIHJlbmRl
cmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRzIHNob3dpbmcg
dGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCiAgICAgICAgICAgICBpZiAo
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludElu
UmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBs
YXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhX
ZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcik7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHNjcm9sbGFi
bGVMYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0Lmxv
Y2FsUG9pbnQoKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMTgxMiwxMiArMTgxOCwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1N
b3VzZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkg
PyBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAg
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJl
c3VsdCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5S
ZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1v
ZGUodHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZz
ZXRGcm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cik7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
bG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0SW5SZXNpemVN
b2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNjcm9sbGFibGVMYXllcjsK
KyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNjcm9sbGFibGVMYXllci0+
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIGludmFsaWRh
dGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7
CkBAIC0xOTE4LDEyICsxOTI3LDEyIEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAoIWxh
eWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcjsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRl
ZWI4MzQ4ZTc5ZWFiYjJhMS4uODcxOWJhMDM2NTZiYTc4Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJl
bmRlckJveDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNz
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fc3ZnUGFuIHsgZmFsc2UgfTsKIAotICAgIFJlbmRlckxheWVyKiBtX3Jl
c2l6ZUxheWVyIHsgbnVsbHB0ciB9OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9yZXNp
emVMYXllciB7IG51bGxwdHIgfTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2NhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudDsKICAgICBib29sIG1fZXZlbnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmOWIxYTVkNzE1Yjc1NDcyOTQyODU4OWFlNTgxZTY5YzViN2RlMTFjLi5hNWMxZWQ0
ODY4Y2U2YzI5NzE2ZjVjZWFlNDJiMDM1ODUyMTEwZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC03Nyw5ICs3Nyw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1NjIs
NyArMjU2Miw5IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhh
c1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdp
ZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICAgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlclZpZXctPmxheWVyKCkpKTsKKyAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyVmlldy0+bGF5ZXIo
KSktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzg0MCwxMCArMzg0MiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVW
aWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgYXV0byogbGF5ZXIgPSBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigp
OwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiB9CiAK
IEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25z
dApAQCAtNDMxOCw4ICs0MzIwLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAg
IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChj
b250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJl
ciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNj
ZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXll
ci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4
dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRp
cnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgaWYgKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4ocm9vdExheWVyKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJvb3RMYXllcik7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJl
bmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVj
dCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLjUz
YzhiMjM2MzI4YTNiYjJmODdiMjRiMTE0NGYwYmM0ZGViMWYwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3
ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9z
aW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAg
ICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nTGF5ZXIpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KElu
dFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA5YmI4ZTkyY2FhYzVjZjUzMmI3OWI5MGVlYWIzY2Yy
MTU0MGFmZjQzLi44MGY1NzlmOWY5YWRlOWY0NjMzODJlYjQxOTNhODFjMDFkMDcyNWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTggQEAgdm9pZCBG
cmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigp
OworICAgIGlmICghbGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5
cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBh
dXRvIG9sZFNjcm9sbFR5cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
IAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CisgICAgc2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6
IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdl
b2xvY2F0aW9uUGVybWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KaW5kZXggYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4u
NmMzN2FkNWQ1MzZkMjI0MDE3YjQyMjQ4YjY5Y2Q5MmUyN2Q3OTZmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9y
dCAiUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgi
CiAjaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgy
LDEwIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVy
Qm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIo
KTsKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKTsK
KworICAgIHJldHVybiBudWxscHRyOwogfQogICAgIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGZp
bmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlh
ZmQ3ZmRkZTQzLi5iYjRiNzkwMTU3MDlhZjI0ODE2YTlkN2NlNjA0YTdiMmNlMmNhZTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9u
KGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQg
SGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVuZGVyVmlldy5sYXll
cigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBkb3duY2FzdDxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KG1fcmVuZGVyVmlldy5sYXllcigpKS0+cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpOwogICAgIHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFp
bnRNb2RlOjpOZXdNaW51c09sZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdo
bGlnaHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9u
LCBSZXBhaW50TW9kZQogICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRl
SWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAK
LSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAg
ICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7
CisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX3JlbmRlclZp
ZXcubGF5ZXIoKSktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgfQogCiAg
ICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0
aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0
aGUgbmV3IG9iamVjdHMgbGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IDZiNTNjYmE4NWM4ZTlkYzU5NzE1YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmJkNWEy
NWZlNzg2MjdmMWIyZDFkNDI1OGNmOTUyM2Y5NWE4ZWQyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CkBAIC01NTMsNyArNTUzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9j
ayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dD
bGlwKCkpOwotICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7CisgICAgICAgIGlmIChibG9jay0+bGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGJsb2NrLT5sYXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4oYmxvY2stPmxheWVyKCkpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBAIC01
ODQsOCArNTg1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5
ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT51cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkK
QEAgLTExMDksMTIgKzExMTEsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVz
aGVkQ2xpcCkKICAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVz
dGVkUGFpbnRPZmZzZXQpOwogCisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBPdXIgc2Nyb2xs
YmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0
aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdl
IHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdp
bGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhh
c2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6
OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCiAg
ICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWlu
dFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29u
dHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAgICBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5wYWludE92ZXJmbG93Q29udHJvbHMo
cGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQp
LCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDc0LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPCiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMo
KnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3Np
bmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXIoKSAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKCkpKSB7CisgICAgICAgICAgICAgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihl
bmNsb3NpbmdMYXllcigpKTsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnko
LXBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAg
ICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxv
YXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+
cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyks
ICZzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShzY3JvbGxh
YmxlTGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhn
YXBSZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5hZGRCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA3LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0
ZWRPZmZzZXQpKSk7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVG
b3JIaXRUZXN0KCkgY29uc3QKQEAgLTI0OTgsOSArMjUwNywxOCBAQCBpbnQgUmVuZGVyQmxvY2s6
OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExp
bmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhp
cyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgog
ICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhh
dmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAv
LyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFk
IHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIo
KSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUg
PyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIo
KSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCisKKyAgICAgICAgYm9vbCBoYXNN
YXJxdWVlID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gZmFsc2U7CisgICAgICAg
IGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBoYXNNYXJxdWVlID0gc2Nyb2xsYWJsZUxh
eWVyLT5tYXJxdWVlKCk7CisgICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3Jv
bGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxp
bmUgPSAoaGFzTWFycXVlZSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGFzVmVy
dGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGlu
ZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNl
bGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhp
YmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uZjEzMGU5
NGY2NTE4ZGQ2ZjNjZDQzMDUzMWNmN2RjYzZhZWI2MWRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCkBAIC0zNDksOCArMzQ5LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBp
ZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8v
IEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVt
IHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5
ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1pbkxvZ2ljYWxX
aWR0aCA9IDA7CisgICAgICAgIGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIoKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCktPmlz
SG9yaXpvbnRhbCgpKQorICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxsPigqdGhpcykpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjEyMzc2YmFhZDYxYmQ2MmZh
M2NlZGE4ZGRhMmFhMjY0M2I3OTlkYi4uZmJlZDVhN2ZhY2I1NGI1NzAxZDBhODlmMGViYzkyZmMy
YTNhODIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDgg
KzU4LDggQEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CkBAIC0zMTksMTEgKzMxOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8g
SWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExl
ZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3
IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5
bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9s
bFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBm
bG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2Nh
bGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24pOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1
ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01
NDIsOCArNTQzLDExIEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25z
dAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxX
aWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbFdpZHRo
KCk7CisgICAgfQorCiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0
aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdy
aXRpbmcgbW9kZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7
CkBAIC01NTUsOCArNTU5LDExIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhl
aWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbEhlaWdo
dCgpOworICAgIH0KKwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywg
dGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3
cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNp
emUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCkBAIC01NjUsMTIgKzU3Miwy
MiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94
OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5zY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9s
bFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
LT5zY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9p
ZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVlZGVkKCkKQEAg
LTU3OSw3ICs1OTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3Jl
TGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDBfbHUpOwogfQogCi1z
dGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKK3N0
YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBs
YXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBAIC01ODksMjYgKzYwNiwyOSBA
QCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikK
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0
b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVy
ID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxlTGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5z
Y3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1v
bml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBhdXRvJiBzY3JvbGxhYmxlTGF5
ZXIgPSAqZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKHNjcm9sbGFibGVMYXllcik7CisgICAgc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXll
cigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQogICAgICAgICByZXR1
cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxl
TGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MjgsMzQgQEAgYm9vbCBSZW5kZXJC
b3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYm
ICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBP
dmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9y
aXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAg
ICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
IHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBSZW5k
ZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmNs
dWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCkgOiAwOworICAgIGlmIChpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgJiYgbGF5
ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOworICAgIHJldHVybiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250
YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkg
OiAwOworICAgIGlmIChpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBsYXllcigp
ICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBAIC04MzQsMTIgKzg2NCwxNCBAQCBpbnQg
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHls
ZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3Jv
bGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAg
ICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NF
UlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAg
ICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkt
Pmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg4MCwxNCBAQCBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRl
ckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hM
YXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAgICAgICpzdG9wRWxlbWVu
dCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKSA/IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIoKSkgOiBudWxscHRyOworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RvcEVsZW1lbnQp
CisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0
b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVu
dEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzkwOSwxNCBAQCBib29sIFJlbmRlckJveDo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNl
OwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCkgeworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSkpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KSA6IG51bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlv
biBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhv
bWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0g
ICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJ
bmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBzY3JvbGxlZCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBT
Y3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAg
ICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xs
ZWQpIHsKQEAgLTg5OSw5ICs5MjksOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlm
IChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0
dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygp
OworICAgIGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1
cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzk2Miwx
MSBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0
CiAKIGJvb2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbikKQEAgLTk5MSw4ICsxMDI1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZp
bmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJv
eDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkp
Ci0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChs
YXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnBhblNjcm9sbEZyb21Qb2lu
dChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdApAQCAtMTAxNywxMSArMTA1MSw5IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZl
cnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJC
b3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
KQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkgfHwgIWlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKLQotICAg
IEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24o
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+
c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVG
b3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNjAxLDcgQEAgYm9vbCBSZW5kZXJC
b3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zm
c2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICho
YXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKKyAg
ICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGZvcmVn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFja2dyb3VuZE9i
c2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTIgKzE5MjAsMTMgQEAgTGF5b3V0UmVj
dCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9u
LCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExh
eW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3Jk
ZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2
ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxh
eWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNs
aXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKLSAgICB9
CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
KQorICAgICAgICByZXR1cm4gY2xpcFJlY3Q7CiAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpOworICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIGNsaXBSZWN0
Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IDApOworICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA1
ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgzOTg3Li4wOGM0Y2YxYjhmMzgyNDcx
NzdiZDliZjhmODBjZjQxZGZlNDAwNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4LDkgKzQ4LDkgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCArNDkwLDggQEAgdm9pZCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9z
aXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5j
ZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwK
ICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGlu
Z0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWlu
aW5nQmxvY2sgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyKSkKKyAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBp
bmdMYXllciktPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmlu
Z0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAg
LTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5
UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3Np
bmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5j
bG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRk
aW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5p
bmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAg
ICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpKQorICAgICAgICAgICAg
c3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xheWVyKS0+c2Nyb2xsT2Zmc2V0
KCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMg
bm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rv
ci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7
CkBAIC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRS
ZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFp
bmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0g
ICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xs
T2Zmc2V0OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdD
bGlwcGluZ0xheWVyKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBpbmdMYXllciktPnNjcm9sbE9mZnNldCgp
OwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNs
b3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9z
aW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVu
Y2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xp
cHBpbmdCb3gubGF5ZXIoKSktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQu
eSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQxLDExICs4NDMs
MTkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3Zl
cmZsb3cgYXJlYS4KICAgICAgICAgYXV0byYgdGhpc0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KnRoaXMpOwogICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0NsaXBSZWN0KHJl
Y3QubG9jYXRpb24oKSkpOwotICAgICAgICAKKworICAgICAgICBpbnQgc2Nyb2xsV2lkdGggPSAw
OworICAgICAgICBpbnQgc2Nyb2xsSGVpZ2h0ID0gMDsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYg
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSkgeworICAgICAgICAgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KTsKKyAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0
aCgpOworICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxI
ZWlnaHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0
byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRz
LgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgbGF5ZXIo
KS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNl
dEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsgYm9yZGVyQm90
dG9tKCkpOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIHNjcm9s
bFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJv
cmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwogICAgIH0KICAgICAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlcihj
b250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA5OWU4MjRkMTM1NzA2MzllM2U0ZDQ0M2M5NjVmMTQ0ZTlkNDhmNDQ2Li43MDM3MzhlMDEy
MTM2ZDVlZDgzZTI1MmE2OTI0NjZkYTQ0NmM0ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NywxNiArMjg3LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMmIGNsaXBSZWN0cykK
IAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQot
ewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwotICAgIHJldHVy
biArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lzUmVuZGVy
Vmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKK1JlbmRl
ckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVy
TW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQorICAgIDogbV9s
YXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXllcihyZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29u
dGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1h
bEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4dChmYWxzZSkKQEAg
LTMwNCwxOSArMjk5LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1v
ZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX3pPcmRlckxpc3Rz
RGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1f
aGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2Up
Ci0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQog
ICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZs
b3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFp
bnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFz
VmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGly
dHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3Rp
bmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBt
XzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMzMCwxNSArMzIx
LDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChm
YWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAg
ICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2Vu
ZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkK
LSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwg
bV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzUzLDUzICszMzUs
NDIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJl
Tm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRleHQoc2hvdWxkQmVD
U1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91
bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIoKSkK
LSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9
IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRpbmdMYXllciBpcyBp
bml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3VnaAorICAgIC8vIGl0
IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAgICAvLyAibV9pc1Nl
bGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOyIKKyAgICAvLyBo
ZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxheWVyU1ZHL0hUTUwg
Y2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFyZW5kZXJlcigpLmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxz
ZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUg
YW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFs
dWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50
LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0
aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVu
ZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAgICAgcmVuZGVyZXIo
KS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7Ci0KLSAgICBB
U1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgp
KQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xs
YWJsZUFyZWEoKnRoaXMpOworICAgIGRlc3Ryb3koKTsKK30KIAordm9pZCBSZW5kZXJMYXllcjo6
ZGVzdHJveSgpCit7CisgICAgLy8gUmVseWluZyBvbiBDKysgYnVpbHRpbiBkZXN0cnVjdGlvbiBv
cmRlciBpcyBkYW5nZXJvdXMgZm9yIFJlbmRlckxheWVyL1JlbmRlckxheWVyU2Nyb2xsYWJsZSwK
KyAgICAvLyBzaW5jZSBzb21lIGZ1bmN0aW9uIGNhbGxzIGludm9rZWQgYnkgdGhlIFJlbmRlckxh
eWVyIGRlc3RydWN0b3IsIG9wZXJhdGUgb24gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorICAgIC8v
CisgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBjYWxsIHRvIGNsZWFyQmFja2luZygpIGJlbG93LCB3
aWxsIGludm9rZSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0b3IsCisgICAgLy8gd2hp
Y2ggY2FsbHMgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkuIFRoaXMgaW4gdHVybnMgdHJpZXMgdG8gY2FzdAorICAgIC8vIHRoZSAnbV9vd25pbmdMYXll
cicgZnJvbSBhIFJlbmRlckxheWVyIC0+IFJlbmRlckxheWVyU2Nyb2xsYWJsZSwgdG8gZ2V0IGFj
Y2VzcyB0byB0aGUgU2Nyb2xsYWJsZUFyZWEuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBsZXQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlIGRlc3RydWN0IGl0c2VsZiwgYmVmb3JlIHRoZSAoaW1wbGljaXQp
IGNhbGwgb2YgdGhlIFJlbmRlckxheWVyIGRlc3RydWN0b3IsCisgICAgLy8gaXQgd2lsbCBjcmFz
aC4gVGhlIGZpeCBpcyB0byBtb3ZlIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGludG8gYSBk
ZWRpY2F0ZWQgZGVzdHJveSgpIGZ1bmN0aW9uCisgICAgLy8gYW5kIGNhbGwgdGhhdCBkZXN0cm95
KCkgZnVuY3Rpb24gZGlyZWN0bHkgZnJvbSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0
b3IuIFRoaXMgd2F5IHRoZQorICAgIC8vIFNjcm9sbGFibGVBcmVhIG9iamVjdCByZW1haW5zIHZh
bGlkIGZvciB0aGUgd2hvbGUgc2NvcGUgb2YgdGhlIGRlc3RydWN0b3IgLT4gcHJvYmxlbSBzb2x2
ZWQuCisgICAgLy8KKyAgICAvLyBTaW5jZSBhbGwgZnVuY3Rpb24gY2FsbHMgaW52b2tlZCBieSB0
aGUgUmVuZGVyTGF5ZXIgZGVzdHJ1Y3RvciwgYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkCisgICAg
Ly8gdGhlIHNhZmUgc29sdXRpb24gaXMgdG8gc2ltcGx5IGludm9rZSBkZXN0cm95KCkgZnJvbSBS
ZW5kZXJMYXllclNjcm9sbGFibGUgZGVzdHJ1Y3Rvci4KKyAgICAvLyBUaGUgbmV4dCBjYWxsIHRv
IGRlc3Ryb3koKSBmcm9tIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGlzIHRoZW4gYSBuby1v
cCAtIGFzIGRlc2lyZWQuCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVm
bGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIo
KTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3Zp
ZGVkQmFja2luZygpKSB7CkBAIC05MzIsMTAgKzkwMyw0OSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUs
IGJvbwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zKCZnZW9tZXRyeU1hcCwgdXBkYXRlTGF5ZXJQ
b3NpdGlvbkZsYWdzKGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBkaWRGdWxsUmVwYWludCkpOwogfQog
CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChs
YXllci5sYXllclR5cGUoKSkgeworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3Rh
dGljOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpT
Y3JvbGxhYmxlOgorICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KS5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXllcihSZW5kZXJM
YXllciYgbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKK3sKKyAgICBzd2l0
Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBl
OjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5
cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpLnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhXVEY6Om51bGxvcHQsIGdlb21ldHJ5TWFw
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkgewor
ICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS51cGRhdGVNYXJxdWVlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAq
IGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykK
IHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uSWZOZWVkZWRGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMpOwogCiAgICAgaWYgKGdlb21ldHJ5
TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CkBAIC05NDMsMTggKzk1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAg
ICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJD
bGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKLSAgICAgICAg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKLSAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQotICAg
ICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5
TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSXQgbG9va3Mgc3VzcGljaW91cyB0byBjYWxsIGNvbnZlcnRUb0xh
eWVyQ29vcmRzIGhlcmUKLSAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3Rv
ciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBvZmZzZXRG
cm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwotICAgICAgICB9Ci0gICAgICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkp
OwotICAgIH0KLQorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXll
cigqdGhpcywgZ2VvbWV0cnlNYXApOwogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFn
cygpOwogCiAgICAgaWYgKGZsYWdzICYgVXBkYXRlUGFnaW5hdGlvbikKQEAgLTEwMjksMTMgKzEw
MjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9t
ZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBj
aGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8u
Ci0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1
c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAg
ICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAg
ICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Cisg
ICAgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcigqdGhpcyk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBi
b29sIGludGVyc2VjdHNWaWV3cG9ydCA9IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50ZXJzZWN0
c1ZpZXdwb3J0KCp0aGlzKTsKQEAgLTExMTUsOTIgKzExMDgsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlcGFpbnRSZWN0cygpCiAgICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRMYXlvdXRS
ZWN0cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKQotewotICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpOwotCi0gICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21ldHJ5TWFw
IGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKQotICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2Vz
dG9yKHBhcmVudCgpLCBudWxscHRyKTsKLQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8g
bm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwotICAgIC8v
IGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhh
c1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxGbGFnPiBmbGFncykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUg
bmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCi0gICAgLy8gdGhl
c2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cg
aXMgdmFsaWQuCi0gICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0KLSAgICAv
LyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50
cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKLSAgICAvLyBvdXIgcmVjdGFuZ2xlcyBh
cyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBl
eHBlY3RlZCB0bwotICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCi0g
ICAgaWYgKCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVy
UG9zaXRpb24oKTsKLSAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQotICAgICAgICBmbGFncy5hZGQo
SGFzQ2hhbmdlZEFuY2VzdG9yKTsKLQotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0No
YW5nZWRBbmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVy
Zmxvd1Njcm9sbCB9KSkKLSAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKLQotICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCi0gICAgICAg
IGZsYWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKLQotICAgIGlm
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRDb21wdXRl
UmVwYWludFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwot
ICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOwotICAgIGJv
b2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21w
dXRlUmVwYWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Ci0g
ICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnB1
c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwotCi0gICAgaWYgKHNob3VsZENv
bXB1dGVSZXBhaW50UmVjdHMpIHsKLSAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0
IGNvbXB1dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KLSAg
ICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSkKLSAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3Rz
KCk7Ci0gICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNv
bnRhaW5lciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCi0gICAgICAgICAgICBjb21wdXRlUmVw
YWludFJlY3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7
Ci0gICAgfSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1X
aWRnZXQoKSkgewotICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNv
bnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFp
bnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9tCi0gICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3Zl
cmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUg
aW52YWxpZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2Iv
MTg4MTIxKS4KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3Jy
ZWN0LgotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
fHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCkpKTsKLSAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlv
dXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94
ID09IHJlbmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1h
cCwgZmxhZ3MpOwotCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNj
cm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgp
Ci0gICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBh
aW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCi0gICAgLy8gdXBk
YXRlZCBhYm92ZS4KLQotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFB1
c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSk7Ci0KLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmlu
dmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKLX0KLQogI2lmIEVOQUJMRShDU1NfQ09NUE9T
SVRJTkcpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUJsZW5kTW9kZSgpCkBAIC0xNjQ2LDYg
KzE1NTMsMTkgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnRTdGF0dXMoKQogICAgIHJldHVybiBoYXMzRFRyYW5zZm9ybSgpOwogfQogCitzdGF0aWMgaW5s
aW5lIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JT
Y3JvbGxhYmxlTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXlvdXRQb2ludCYgbG9jYWxQb2lu
dCkKK3sKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJM
YXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRl
ckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIpLnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzKQogewogICAg
IExheW91dFBvaW50IGxvY2FsUG9pbnQ7CkBAIC0xNjkxLDM0ICsxNjExLDkgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlv
bnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVy
VGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQu
Ci0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCku
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdB
bmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAg
ICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xv
c2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0
aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBs
b2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
LmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVu
dC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNh
c3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJ
bkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAg
QVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAg
ICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgp
KSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3Jv
bGxQb3NpdGlvbigpKTsKLQotICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXll
ci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwotICAgIH0KIAotICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2Nv
cGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5n
U2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgIG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgLy8gU3Vi
dHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgc3VidHJhY3RTY3JvbGxPZmZz
ZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMsIGxvY2Fs
UG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0Q2hhbmdlZCA9IGZhbHNlOwogICAg
IGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xODQwLDg2ICsxNzM1
LDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci19Ci0K
LXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRh
cmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7
Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJ
bkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAg
IGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKLXsKLSAgICBSZW5kZXJUcmVlTXV0
YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlOwot
Ci0gICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKSB7Ci0gICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkp
ICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFu
ZEhhc1Njcm9sbGFibGVBcmVhKCk7Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpKSB7Ci0gICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIp
KQotICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVG
aXhlZCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7
Ci0jZW5kaWYKKyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVyUmVuZGVyZXIg
PSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z1RyYW5zZm9ybWVkQW5jZXN0b3IoKSBjb25zdApAQCAtMjQ0Nyw0ODMgKzIyODQsMTI4IEBAIExh
eW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9M
YXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5z
KSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdAorc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwo
SFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVW
aWV3KQogewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdz
KCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5H
X1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJl
bmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgorICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2Vs
ZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9m
IFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAg
IC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQgc2Nyb2xscyBz
aG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCisgICAgaWYgKGZyYW1lVmlldy53YXNTY3JvbGxl
ZEJ5VXNlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlm
ICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cisg
ICAgLy8gRm9yYmlkIGF1dG9zY3JvbGxzIHdoZW4gc2Nyb2xsYmFycyBhcmUgb2ZmLCBidXQgcGVy
bWl0cyBvdGhlciBwcm9ncmFtbWF0aWMgc2Nyb2xscywKKyAgICAvLyBsaWtlIG5hdmlnYXRpb24g
dG8gYW4gYW5jaG9yLgorICAgIHJldHVybiAhZnJhbWVWaWV3LmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3N0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxs
b3dlZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8
fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAg
IHJldHVybjsKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5k
ZXJMYXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuc2Nyb2xsUmVjdFRv
VmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVk
LCBvcHRpb25zKTsKKyAgICB9CiAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9Ci0jZW5kaWYgLy8gRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIg
d2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRl
ZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KKyAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkxheWVyICIgPDwgdGhpcyA8PCAiIHNjcm9sbFJl
Y3RUb1Zpc2libGUgIiA8PCBhYnNvbHV0ZVJlY3QpOwogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0Fz
eW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3Jk
aW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQorICAgIExheW91dFJlY3QgbmV3UmVj
dCA9IGFic29sdXRlUmVjdDsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBib29sIGF1
dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNj
cm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlv
biBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVm
b3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBj
b25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Ny
b2xsUmVzdWx0ID0gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZEZv
clNjcm9sbGFibGVMYXllcigqdGhpcywgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9u
cyk7CisgICAgaWYgKHNjcm9sbFJlc3VsdCkKKyAgICAgICAgbmV3UmVjdCA9ICpzY3JvbGxSZXN1
bHQ7CisgICAgZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpOwogCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVk
dWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEg
PSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJs
ZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0x
KQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRh
ICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKyAgICAg
ICAgaWYgKG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlID0gbnVsbHB0cjsK
IAotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQorICAgICAgICAgICAgaWYgKGlzPEhUTUxG
cmFtZUVsZW1lbnRCYXNlPigqb3duZXJFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBmcmFtZUVs
ZW1lbnRCYXNlID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCk7
CiAKLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVs
dGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KKyAg
ICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVu
dEJhc2UsIGZyYW1lVmlldykpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlv
biBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRl
c3Ryb3llZC4KKyAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRo
cmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVj
ayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4g
V2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNv
aGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBp
ZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxh
c3RLbm93bk1vdXNlUG9zaXRpb247CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3Nl
UmVjdCA9IGdldFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhl
ZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisgICAgICAgICAgICAgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRp
b24oKSkpOworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0
c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdlLgorICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBv
aW50KGZyYW1lVmlldy5jb250ZW50c1NpemUoKSkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Cisg
ICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDUwNTkKKyAgICAgICAgICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFu
aW1hdGVkU2Nyb2xsOjpObzsKKyAgICAgICAgICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJv
Z3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgJiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1l
bnQoKQorICAgICAgICAgICAgICAgICAgICAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5i
ZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpKQorICAgICAgICAgICAgICAgICAgICBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7
CisgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCi0gICAgaWYgKGFicyhk
ZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhl
IGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRX
aWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICAgICAg
ICAgIGlmIChvcHRpb25zLnNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxk
QWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdh
dGVTY3JvbGxUb1BhcmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNs
b3NpbmdMYXllciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
ZW5jbG9zaW5nTGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVy
ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdMYXllciktPmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Yg
dGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICBuZXdSZWN0
ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0lu
dFJlY3QobmV3UmVjdCkpOworICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNl
OyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlz
IGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9PSBTZWxlY3Rp
b25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5mcmFtZSgpLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Nyb2xsQnlSZWN1
cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19CisgICAgICAgICAgICBhdXRv
IG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKTsKIAotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zp
c2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17
Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47CisjaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3
LnZpc2libGVDb250ZW50UmVjdCgpOworI2Vsc2UKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDb250
ZW50SW5zZXRzIHNob3VsZCBiZSB0YWtlbiBjYXJlIG9mIGluIFVJIHByb2Nlc3Mgc2lkZS4gd2Vi
a2l0Lm9yZy9iLzE5OTY4MgorICAgICAgICAgICAgLy8gVG8gZG8gdGhhdCwgZ2V0UmVjdFRvRXhw
b3NlIG5lZWRzIHRvIHJldHVybiB0aGUgYWRkaXRpb25hbCBzY3JvbGxpbmcgdG8gZG8gYmV5b25k
IGNvbnRlbnQgcmVjdC4KKyAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZp
ZXcudmlld1JlY3RFeHBhbmRlZEJ5Q29udGVudEluc2V0cygpOwogCi0gICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAg
ICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxl
KCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Via2l0Lm9y
Zy9iLzE5OTY4MyBGcmFtZVZpZXc6OnZpc2libGVDb250ZW50UmVjdCBpcyB3cm9uZyB3aGVuIGNv
bnRlbnQgaW5zZXRzIGFyZSBwcmVzZW50CisgICAgICAgICAgICBtYXhTY3JvbGxQb3NpdGlvbiA9
IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoU2Nyb2xsUG9zaXRpb24oZnJhbWVW
aWV3LnRvdGFsQ29udGVudHNTaXplKCkgLSBmbG9vcmVkSW50U2l6ZSh2aWV3UmVjdC5zaXplKCkp
KSk7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3Rl
ZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxP
ZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVk
QXJlYSA9IHRoaXM7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29u
dGVudEluc2V0cygpOworICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVu
dEluc2V0cy5sZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKKyAgICAgICAgICAgIG1heFNj
cm9sbFBvc2l0aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJv
dHRvbSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50
byAic2Nyb2xsVmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBMYXlvdXRS
ZWN0IHRhcmdldFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CisgICAgICAgICAgICB0YXJnZXRSZWN0Lm1v
dmUoMCwgZnJhbWVWaWV3LmhlYWRlckhlaWdodCgpKTsKIAotICAgICAgICAvLyBJZiB0aGlzIGxh
eWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2Fu
IHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBu
ZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdT
Y3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBy
ZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVG
aXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKKyAgICAgICAgICAgIC8vIEF2
b2lkIHNjcm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9u
KCkgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKKyAgICAgICAgICAgIGlmIChy
ZXZlYWxSZWN0ICE9IHZpZXdSZWN0KSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNs
YW1wZWRTY3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9u
KCkpLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRp
b24pOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCkt
PnNjcm9sbGluZ0VsZW1lbnQoKT8KKyAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQorICAgICAgICAgICAgICAgIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICAgICAgICAg
IGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9u
cy5iZWhhdmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOworICAgICAg
ICAgICAgICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRp
b24sIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRv
c2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElm
IHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHBy
b2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUgYW4g
b3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhh
dCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAg
ICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2Fu
dCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwotICAg
IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0g
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBl
LCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQot
ewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9u
KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3Jv
bGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZz
ZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7
Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNj
cm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAg
IGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAgICBz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBp
bmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9s
bFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRp
b24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUp
OwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsK
LSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNh
bmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5p
bWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2
aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3Np
dGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xs
ICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsK
LQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5z
aW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93Omhp
ZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAg
ICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWlu
ZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAg
ICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9s
bFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNl
dCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNh
cmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBj
YXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsK
LQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAg
ICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCku
dmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVy
cyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBh
IHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVj
YXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5j
ZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVu
ZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Yg
bGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVk
LgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQot
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAg
ICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUg
c3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0
aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVw
LXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3
ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3Np
dGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0g
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAg
ICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9z
aXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAg
ICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFp
bnQtb3JkZXIgcGFyZW50LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHBhaW50T3JkZXJQYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGlu
ZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygp
OwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUo
KSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQg
PSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBz
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0g
ICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3Np
dGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWlu
dCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRl
cmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJn
ZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3
LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZp
ZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRl
ckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxl
bWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVu
dEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQotewotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgotICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgc2Nyb2xs
YmFycyBhcmUgZm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBvYnZpb3Vz
bHkgYmUgaWdub3JlZC4KLSAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2VyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvcmJpZCBhdXRvc2Nyb2xscyB3aGVuIHNj
cm9sbGJhcnMgYXJlIG9mZiwgYnV0IHBlcm1pdHMgb3RoZXIgcHJvZ3JhbW1hdGljIHNjcm9sbHMs
Ci0gICAgLy8gbGlrZSBuYXZpZ2F0aW9uIHRvIGFuIGFuY2hvci4KLSAgICByZXR1cm4gIWZyYW1l
Vmlldy5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdAotewotICAgIGlm
ICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlz
IHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAgICAvLyBG
SVhNRTogSXMgdGhpcyBzdGlsbCBuZWVkZWQ/IEl0IHVzZWQgdG8gYmUgcmVsZXZhbnQgZm9yIFNh
ZmFyaSBSU1MuCi0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkgJiYgIXJlbmRlcmVyKCkucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
IC8vIE9ubHkgYm94ZXMgY2FuIGhhdmUgb3ZlcmZsb3dDbGlwIHNldC4KLQotICAgIGlmIChyZW5k
ZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKSkgewot
ICAgICAgICAvLyBUaGUgInByb2dyYW1tYXRpY2FsbHkiIGhlcmUgaXMgbWlzbGVhZGluZzsgdGhp
cyBhc2tzIHdoZXRoZXIgdGhlIGJveCBoYXMgc2Nyb2xsYWJsZSBvdmVyZmxvdywKLSAgICAgICAg
Ly8gb3IgaXMgYSBzcGVjaWFsIGNhc2UgbGlrZSBhIGZvcm0gY29udHJvbC4KLSAgICAgICAgcmV0
dXJuIGJveC0+Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpOwotICAgIH0KLQotICAgIC8v
IFByb2dyYW1tYXRpYyBzY3JvbGxzIGNhbiBzY3JvbGwgb3ZlcmZsb3c6aGlkZGVuLgotICAgIHJl
dHVybiBib3gtPmhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGJveC0+aGFzVmVydGljYWxPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJMYXllciAiIDw8IHRoaXMgPDwgIiBzY3JvbGxSZWN0VG9WaXNp
YmxlICIgPDwgYWJzb2x1dGVSZWN0KTsKLQotICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGFic29s
dXRlUmVjdDsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7Ci0gICAgYm9vbCBhdXRv
c2Nyb2xsTm90SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
YXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKLQotICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkp
IHsKLSAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0
aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAg
ICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4g
YnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgotICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgICAgICBBU1NFUlQoYm94KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsb2Nh
bEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
YWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZGly
ZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwg
YmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKLSAgICAgICAgICAgIC8v
IHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxv
Y2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0g
ICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIExheW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXll
ckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9w
dGlvbnMuYWxpZ25ZKTsKLQotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNl
dCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJ
bnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAg
ICAgICAgIGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmco
b3B0aW9ucy5iZWhhdmlvciwgYm94LT5lbGVtZW50KCkpKQotICAgICAgICAgICAgICAgIGFuaW1h
dGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAg
ICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3Zl
KC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRS
ZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhw
b3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7Ci0gICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwot
Ci0gICAgICAgIGlmIChvd25lckVsZW1lbnQgJiYgb3duZXJFbGVtZW50LT5yZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSA9IG51
bGxwdHI7Ci0KLSAgICAgICAgICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVy
RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZnJhbWVFbGVtZW50QmFzZSA9IGRvd25jYXN0PEhU
TUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJh
bWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChmcmFtZUVsZW1lbnRCYXNlLCBmcmFtZVZpZXcp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0
byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCi0gICAgICAg
ICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxs
b3dlZFNjb3BlOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Ci0g
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZp
ZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9u
cy5hbGlnblkpOwotCi0gICAgICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91
bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRpb24oKSkpOwotICAgICAgICAgICAgICAgIC8v
IEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdl
LgotICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBvaW50KGZyYW1lVmlldy5jb250ZW50c1NpemUo
KSkpOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1
bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwNTkKLSAgICAgICAgICAgICAg
ICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MKLSAgICAgICAgICAgICAgICAgICAg
JiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAm
JiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250
ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpKQotICAgICAgICAgICAgICAgICAgICBh
bmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7Ci0gICAgICAgICAgICAgICAgZnJhbWVWaWV3
LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgYW5pbWF0ZWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwotICAg
ICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgotICAgICAgICAgICAgICAgICAg
ICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVu
Y2xvc2luZ0ludFJlY3QobmV3UmVjdCkpOwotICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhl
ZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxp
ZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9
PSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5m
cmFtZSgpLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBhdXRvIG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3Np
dGlvbigpOwotICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogQ29udGVudEluc2V0cyBzaG91bGQg
YmUgdGFrZW4gY2FyZSBvZiBpbiBVSSBwcm9jZXNzIHNpZGUuIHdlYmtpdC5vcmcvYi8xOTk2ODIK
LSAgICAgICAgICAgIC8vIFRvIGRvIHRoYXQsIGdldFJlY3RUb0V4cG9zZSBuZWVkcyB0byByZXR1
cm4gdGhlIGFkZGl0aW9uYWwgc2Nyb2xsaW5nIHRvIGRvIGJleW9uZCBjb250ZW50IHJlY3QuCi0g
ICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpZXdSZWN0RXhwYW5k
ZWRCeUNvbnRlbnRJbnNldHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHdlYmtpdC5vcmcv
Yi8xOTk2ODMgRnJhbWVWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QgaXMgd3Jvbmcgd2hlbiBjb250
ZW50IGluc2V0cyBhcmUgcHJlc2VudAotICAgICAgICAgICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBm
cmFtZVZpZXcuc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KFNjcm9sbFBvc2l0aW9uKGZyYW1lVmll
dy50b3RhbENvbnRlbnRzU2l6ZSgpIC0gZmxvb3JlZEludFNpemUodmlld1JlY3Quc2l6ZSgpKSkp
OwotCi0gICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29udGVudEluc2V0
cygpOwotICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVudEluc2V0cy5s
ZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKLSAgICAgICAgICAgIG1heFNjcm9sbFBvc2l0
aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJvdHRvbSgpKTsK
LSNlbmRpZgotICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50byAic2Nyb2xs
VmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IHRhcmdl
dFJlY3QgPSBhYnNvbHV0ZVJlY3Q7Ci0gICAgICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoMCwgZnJh
bWVWaWV3LmhlYWRlckhlaWdodCgpKTsKLQotICAgICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxS
ZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVGaXhlZCwg
b3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKLSAgICAgICAgICAgIC8vIEF2b2lkIHNj
cm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9uKCkgaWYg
d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKLSAgICAgICAgICAgIGlmIChyZXZlYWxS
ZWN0ICE9IHZpZXdSZWN0KSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRT
Y3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9uKCkpLmNv
bnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pOwot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCktPnNjcm9s
bGluZ0VsZW1lbnQoKT8KLSAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQotICAgICAgICAgICAgICAgIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwotICAgICAgICAgICAgICAgIGlmIChh
dXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhh
dmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAg
ICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRpb24sIFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVybW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFm
dGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UKLSAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29u
dGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Nyb2xsUmVjdEludG9WaWV3LgotICAgICAgICAgICAg
Ly8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNh
dGlvbnMKLSAgICAgICAgICAgIC8vIHRoYXQgcHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBj
b250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBYIE1haWwuCi0gICAgICAgICAgICAvLyBUaGUgY2Fu
QXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlz
LgotICAgICAgICAgICAgcGFnZSgpLmNocm9tZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVk
SW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVy
bW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFmdGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UK
KyAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29udGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Ny
b2xsUmVjdEludG9WaWV3LgorICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qg
b24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgIC8vIHRoYXQg
cHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBjb250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBY
IE1haWwuCisgICAgICAgICAgICAvLyBUaGUgY2FuQXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVu
dEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlzLgorICAgICAgICAgICAgcGFnZSgpLmNocm9t
ZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVkSW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTI5MzEsMjMgKzI0MTMsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdS
ZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCku
aGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5n
IGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50
cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21w
b3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBi
ZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVk
IGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXRE
ZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYg
YWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwpAQCAtMzA0
MywxMTM4ICsyNTA4LDgwIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9z
ZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIHkgPSB2
aXNpYmxlUmVjdC55KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKICAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGln
bm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgp
ICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwotICAg
IGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0gICAgcmV0dXJuIExheW91dFJl
Y3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCi17
Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cpOwotICAgIHNj
cm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5
b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29uc3QKLXsKLSAgICAvLyBXZSBu
ZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQot
ICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBj
bGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcg
dGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCBy
ZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVu
dCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5S
ZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRl
cmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBo
ZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwg
d2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCku
ZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVt
ZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3Vz
ZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGF1dG8gYWJzb2x1dGVQb2lu
dCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7Ci0g
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhh
YnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21S
ZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZz
ZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGN1cnJlbnRT
aXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVy
LT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBl
bGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOwot
ICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwotICAg
IAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewot
ICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKLSAgICAgICAg
YWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOwot
ICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBu
ZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBj
dXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0g
cmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7Ci0K
LSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7Ci0gICAgaWYg
KHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6
b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlv
dXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVy
ID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsK
LSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3Vu
ZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRp
ZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZy
b20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAv
IHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhl
aWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0
IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5j
ZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50
LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91
bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBv
aW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21w
b3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Ny
b2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwot
fQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNp
YmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNw
YWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNp
b24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xs
YmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2li
bGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2
aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAs
IHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0K
LQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJi
ZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNl
IG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFy
ZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAg
ICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAo
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQo
c2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdo
dCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2gu
c2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNp
YmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0g
KHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4g
c3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29s
IFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJl
dHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJM
YXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAg
IEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVj
dCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIo
KSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwg
cGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVT
aXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlm
ICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUo
cm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwot
Ci0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNv
bnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJs
ZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNT
aXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29u
dGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNo
YW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJs
ZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJl
YXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewot
ICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0K
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRF
bmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRl
U2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xs
LCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQot
I2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNS
ZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwot
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0g
ICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1
dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7
Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jp
em9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0g
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Ny
b2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAg
IGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXpl
OjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5
SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8
fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNp
emU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5
IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAg
IGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwK
LSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQot
ICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAg
ICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAg
ICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAg
ICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAg
ICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRo
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3Qo
Y29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jp
em9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0g
ICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0g
ICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAg
YmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQot
ICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQot
ICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAg
IGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90
dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlD
b3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVy
LngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3Ju
ZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3Ju
ZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAg
ICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAg
aWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0g
ICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5y
ZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tu
ZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50
U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRv
SW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgm
c2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVT
Y3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092
ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3Rh
bmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFp
bnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3Jv
bGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFk
b3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
LXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9y
U2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0g
ICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAg
ICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRU
ZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
YWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAg
IGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxi
YXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBp
ZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVT
Y3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3co
KSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVS
ZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0
aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFy
J3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQo
KTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92
QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9s
bHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3Vi
U2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDog
U2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8v
IERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBj
b3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAg
cmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBm
b3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlz
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewot
ICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
c2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIg
KyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQo
IlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMp
LCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7
Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRy
YW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlm
IChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9k
ZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRl
Z3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAi
ICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJl
bmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0
Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5l
cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVy
ZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21S
b290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJv
b3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRG
cmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3Rz
LnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3Jv
bGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVz
LgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
OjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAg
aWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxh
eWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29y
ZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91
dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1Jl
Y3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwot
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBB
U1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAg
ICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVy
Zmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVy
Zmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkp
OwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0g
ICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9w
KCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNj
cm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAg
ICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0g
ICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Ny
b2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwot
Ci0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGll
bnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICBy
ZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJm
bG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNj
cm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9v
bCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2Vs
dmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNI
b3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0K
LSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5l
ZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAg
ICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmICht
X3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRp
Y2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQg
dG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAg
IGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFs
U2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
IT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYm
IChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAg
aWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxC
YXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhh
c0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVy
KCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAg
aWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxv
d1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJs
b2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0
b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxh
eW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1Jl
bGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94
KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xl
YXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8g
U2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsK
LSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVp
Z2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5
b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5
bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9z
aXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9s
bCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgot
ICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAv
LyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBv
bmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50cy4KLSAgICAgICAg
Ly8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5z
ZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQotICAg
ICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3Vu
ZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCi0gICAg
ICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSNlbmRpZgotICAg
ICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0
KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZp
Z3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwot
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMu
c2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6QWxpZ25DZW50ZXIpCisgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBv
c2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKyAgICBlbHNlCisg
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQg
UmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxi
YXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2lu
dCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7CisgICAgc2Nyb2xsUmVjdFRvVmlz
aWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEp
KSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qs
IGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVn
RGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0g
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
Ci0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0g
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
LSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOwotCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0
b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
ICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdl
dHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVy
aW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91
dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1l
bnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkp
OwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhl
IHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChs
YXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCku
d2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Ny
b2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0
IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAg
cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVj
dCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBv
biB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0g
ICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92
ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGlu
Z0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICBpZiAo
bV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3Qo
Y29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxl
bmQgbW9kZSJfcyk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlm
IHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2Vl
IHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAg
ICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWJzUmVjdCk7Ci19CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXpl
Q29ybmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFr
UmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlS
ZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUo
KTsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VM
b1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIp
LmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1h
Z2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+
c2l6ZSgpOworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0
dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0
cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3Qu
eCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsg
cmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBp
ZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVz
aXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXpl
KSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJl
c2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29y
bmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3Qp
OworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNp
emVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
Y29udGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9t
IGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
IChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVj
dCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0g
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRo
KCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRy
YXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+
bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKIHsKLSAgICBp
ZiAoIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCitMYXlvdXRVbml0IFJlbmRlckxheWVy
OjpvdmVyZmxvd0xlZnQoKSBjb25zdAogewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQg
dGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1
bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0
aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxv
Y2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0g
ICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQp
KSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK0xheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0K
IAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNl
dCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQq
IGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQxOTIsMTcgKzI1OTksNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5j
bG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBz
dWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXll
cjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBy
dWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjI1LDcgKzI2MjEsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNv
bmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBv
dmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hh
aW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXll
ciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7
IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50
QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xs
Q29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAg
ICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
PihsYXllcikgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250
YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3Rvckxh
eWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjcsNyArMjgyNCw4
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMg
b3Igc3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
IHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJl
cigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAo
c2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pv
b21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzIyLDggKzMxMjAsOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1
cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Ny
b2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAg
ICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fbGF5ZXJUeXBlID09IFJl
bmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpLT5wYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAg
ICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQg
Y29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRv
IHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODksNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6
IGxheWVyRnJhZ21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0g
ICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9M
YXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9j
YXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAg
ICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsK
LSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RF
dmVudFJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxv
Y2FsUGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikK
IHsKICAgICBBU1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAg
LTUyMzYsNyArMzYyMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAg
ICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxh
eWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTUzNTQsNiAr
Mzc0MCwxOSBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRpZGF0ZShjb25zdCBSZW5kZXJMYXllciog
aGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3VibAogICAgIHJldHVybiB0cnVlOwogfQog
CitzdGF0aWMgaW5saW5lIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50c0ZvclNjcm9sbGFi
bGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkg
eworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuaGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBw
b2ludEluRnJhZ21lbnQpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogLy8gaGl0VGVzdExvY2F0aW9uIGFuZCBoaXRUZXN0UmVjdCBh
cmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMgb25l
IHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVk
VHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0dGVu
aW5nIGxheWVyLgpAQCAtNTQ2Nyw3ICszODY2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQK
ICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9p
bnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewor
ICAgIGlmIChoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzRm9yU2Nyb2xsYWJsZUxheWVyKCp0aGlz
LCBsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewogICAgICAg
ICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNTU0MiwzNSArMzk0MSw2IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0
ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJC
b3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21l
bnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVy
KCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRv
bUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmln
aHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4
WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCks
IHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJG
cmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJG
cmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byBy
ZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVj
dChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6
ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkp
KSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RM
b2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXll
ckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWlu
ZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSog
dHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKQEAgLTYwMTEsMzYgKzQzODEsNiBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRz
Qm91bmRzKSBjb25zdAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykK
LXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KGJvdW5kcykpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7
Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpCi17Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+
cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCi0gICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVjdCBy
ZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9s
bFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwg
bnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAo
cmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAoIXJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KIGJv
b2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgT3B0
aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8vIEFs
d2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgpAQCAtNjMzNywyMSArNDY3Nyw2
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1
cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNz
TGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6Omxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0K
LUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zv
cm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAg
Ym9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50
c0ludG9XaW5kb3coKTsKQEAgLTYzODIsMTEgKzQ3MDcsNiBAQCBib29sIFJlbmRlckxheWVyOjpz
aG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWlu
dGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxz
T3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRl
ckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYm
ICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MTAsOSArNDgzMCwxMyBA
QCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAg
ICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBy
ZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpIHx8IHNjcm9sbGFi
bGVMYXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCiAgICAg
ICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzVmlk
ZW8oKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzRW1iZWRkZWRPYmplY3QoKQpAQCAtNjYyMywx
MSArNDk0NywyMyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7CiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6
Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9sYXllclR5cGUp
IHsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlN0YXRpYzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZToK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPmhh
c092ZXJmbG93Q29udHJvbHMoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOwogfQogCkBAIC02NjYzLDM4
ICs0OTk5LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRD
b250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1wdHlDaGls
ZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAg
ICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJv
eC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0
eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGlu
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRp
YyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250
YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxi
YXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1Zl
cnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Ny
b2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgot
ICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5h
YmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9u
dGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBt
X2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGlj
YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1f
dkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQog
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91
bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjcxNyw2ICs1MDIxLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKIAogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMg
dmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhp
cyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVz
dC4KKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KHRoaXMpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSA6IG51bGxwdHI7
CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBv
bGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7
CiAgICAgICAgIGlmIChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUo
KS51c2VkWkluZGV4KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMzEs
MTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZp
c2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAg
ICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYg
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJl
cigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9y
KCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAg
ICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8
UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0
eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51
bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0K
IAotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNv
IHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2
ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAs
MTUgKzUwNTIsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7
CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBj
dXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9o
QmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHls
ZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQog
CiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNm
b3JtKCk7CkBAIC02Nzc5LDk4ICs1MDc4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNl
bmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRl
cmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlz
U2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7
Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
LSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVk
KSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRv
dWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYg
d2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBh
cyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAg
YXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0s
ICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIp
IHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCks
IFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQg
YmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFy
ZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
LXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVz
aXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICgh
cmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92
ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBj
aGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAg
bV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZs
ZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxl
Y3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MjA5LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJu
IHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29s
IFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0
CkBAIC03MjQ4LDExICs1NDU1LDE0IEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVl
UmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBz
dHJlYW0gPDwgIiAiOwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7
Ci0gICAgc3RyZWFtIDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxp
bmdTY29wZSgpOworICAgIGlmIChpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9s
bGFibGVMYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOworICAgICAgICBzdHJlYW0gPDwgIiAiOwor
ICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKIAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAgfQog
CiAgICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIyN2RjY2U1ZWVlMDk0ZmVl
OWJmNC4uZjNkMGI0NjU0NjliNmY1NWM0MzQ3NzA3NTE1NmZlNzFlNzk4MGE2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxC
ZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBA
IC0xNDAsMjAgKzEzOSwyNiBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewog
ICAgIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZpb3I6OkF1dG8gfTsKIH07
CiAKLXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZp
bmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7CisgICAgICAgIFN0YXRpYywK
KyAgICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAor
ICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZTsgfQor
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5k
ZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2ls
bEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworICAgIHZvaWQgZGVzdHJveSgp
OworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRl
ciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4
ICs0MjAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBt
YXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlz
U2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7
IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0
NDAsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVT
aXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5h
bDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7
Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwot
Ci0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhl
aXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUm
IGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAg
Ym9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRv
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNj
cm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAg
IHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
ID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3Jv
bGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7
IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAg
dm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0
IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMg
Y2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3
YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIg
aXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQs
IGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNP
dmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92
QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZv
aWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCBy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlv
biA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1
aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3Rh
cnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZv
aWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1
ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxv
b2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAg
IGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMg
dHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVz
IGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAg
IGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9s
KEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJ
bnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
IGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlv
dXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lk
IGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29u
c3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5
b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJl
c2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6
ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wg
aXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9y
dHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1NSw5ICs0NjMsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJl
ZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9z
aW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9u
TW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRl
ZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg0
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50
cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9p
ZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RU
eXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlv
dXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAg
IHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0
byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9CkBAIC01OTMsNyArNDk0LDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSBj
b25zdDsKICAgICBib29sIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0OwotICAgIAor
ICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCiAgICAgYm9vbCBiZWhhdmVz
QXNGaXhlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVoYXZlc0FzRml4ZWQ7IH0KIAogICAgIHN0cnVj
dCBQYWludGVkQ29udGVudFJlcXVlc3QgewpAQCAtNjM3LDYgKzUzOSw4IEBAIHB1YmxpYzoKICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUp
IGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmlu
Z0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIg
cmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1
dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpA
QCAtNjk4LDcgKzYwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9y
aWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVz
dWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3Qg
Q2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVy
TGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGlu
UmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQsMTEgKzY4
Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVu
aXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAg
dm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0
aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhh
dCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Niw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxh
eWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9s
bGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcjsg
fQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAvLyBMYXllcnMg
d2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24g
YW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAgICBPcHRpb25h
bDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7
IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAoaXNUcmFu
c3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5nKCkgJiYgIXJl
bmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAhaXNDb21wb3Np
dGVkKCkpOwpAQCAtODg1LDExICs3NzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJl
Y3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9v
bCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRl
cnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkg
Y29uc3Q7CiAKQEAgLTkxOCw4ICs4MDAsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7
IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQYWludEZyZXF1
ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAgIGJvb2wgcGFp
bnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIu
cGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgxMCw3IEBAIHB1YmxpYzoKICAg
ICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRp
bmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFs
aWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBT
dHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkwLDYgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51
bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFj
a2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5MDcsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0
cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0
b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQotICAgIFNjcm9s
bE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQog
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0Owog
CiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5s
b2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5MzksNiBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwg
Ym9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7
CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFz
ZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjYgKzk2NSwxNSBAQCBwcml2YXRlOgogICAg
IAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJv
b2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQg
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogCiAg
ICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAKLSAgICAvLyBTY3Jv
bGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQg
c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250
ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlz
aWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgb3Zlcmhh
bmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZp
bmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
KSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQg
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNl
dFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29u
c3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7Ci0gICAgCi0gICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7
Ci0KICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7
CiAgICAgdm9pZCBzZXRBbmNlc3RvckNoYWluSGFzVmlzaWJsZURlc2NlbmRhbnQoKTsKIApAQCAt
MTE5NiwxNCArMTAxMSw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFi
c29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50CiAgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQg
Y2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7
Ci0KICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9z
aXRpbmdEZXNjZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBi
OyB9CkBAIC0xMjE3LDIwICsxMDI0LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG92ZXJm
bG93TGVmdCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0Owog
Ci0gICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKLSAgICAgICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyOwotICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKLSAgICAgICAgSW50UmVjdCByZXNpemVyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3Ju
ZXIgOiByZXNpemVyOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0
cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmZsb3dDb250
cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKLQorICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29t
cG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIg
OiAxOwpAQCAtMTI0NCwxMCArMTAzOCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25vcm1hbEZs
b3dMaXN0RGlydHk6IDE7CiAgICAgYm9vbCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdCA6IDE7CiAK
LSAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVz
aXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCi0g
ICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7Ci0KLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAv
LyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8g
d2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0x
MjU5LDE0ICsxMDQ5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50
cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAv
LyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGlj
YS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3Jl
cGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNv
bnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsK
ICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBt
X2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsK
ICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjg3LDE3ICsxMDc1LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gOiA0OyAv
LyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0
cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7
Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93
ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM4LDI1ICsxMTE1LDggQEAgcHJpdmF0ZToKICAgICAvLyBU
aGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAg
U2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVp
Z2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0g
ICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxi
YXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJl
Y3RzQ2FjaGU7CiAgICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0OwotCi0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFp
dHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwotICAgIE1hcmthYmxl
PFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAw
Pj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8v
IENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVu
dHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJ
bmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAg
LTEzNjYsMTAgKzExMjYsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4
dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAg
ICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVy
ZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJl
bmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQ
dHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0
aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4g
SXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVy
PiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA1MTlkMzYxMDc4MDhlMzYyZjdjMDQw
ZjQyNzhjODgzYTJmMzkwNjFlLi5hZmJkMjUyMDVlOWMyZmY4MjY4MTBiZmEzMTFlNGI3N2Y0MmJk
ZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0yNjksNyArMjcw
LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCgpCiAjZW5kaWYK
IAogICAgIEFTU0VSVChtX293bmluZ0xheWVyLmJhY2tpbmcoKSA9PSB0aGlzKTsKLSAgICBjb21w
b3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKG1fb3duaW5nTGF5ZXIp
OworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKQorICAg
ICAgICBjb21wb3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpOwogCiAgICAgY2xlYXJC
YWNraW5nU2hhcmluZ0xheWVycygpOwogfQpAQCAtNDIxLDExICs0MjMsMTIgQEAgc3RhdGljIFRp
bGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxvd1RpbGVkQmFja2luZ0NvdmVy
YWdlKGNvbnN0IFJlbmQKIAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3Zl
cmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVz
ZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7
Ci0gICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgaWYgKCF1c2VN
aW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpKSB7CisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVDb3ZlcmFn
ZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsKIAotICAg
ICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQogICAg
ICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNh
bFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKQEAgLTEyMzIsOCAr
MTIzNSwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdy
YXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlmIChjb21wb3NpdGVkQW5j
ZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9z
aXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNj
cm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29u
dGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91
bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250
YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNvbXBvc2l0ZWRBbmNlc3RvcikpCisg
ICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSB0b0xheW91dFNpemUoZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihjb21wb3NpdGVkQW5jZXN0b3IpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAg
ICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVy
Qm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxv
Y2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsx
MjkwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGlu
Z0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVyZmxvd1Njcm9sbCkgewotICAgICAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGlu
Z0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci5nZXQoKSktPnNj
cm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0
Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbGFzdENsaXBMYXll
clJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMTM5MCw3ICsxMzk2LDkgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21w
b3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSBwYXJlbnRMYXll
ckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNl
dFNpemUocm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShzY3JvbGxDb250YWluZXJCb3gud2lkdGgo
KSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdodCgpKSkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpOworICAgICAgICBB
U1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAg
IGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bV9vd25pbmdMYXllcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTQw
NCw3ICsxNDEyLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAKICAgICAgICAgYm9vbCBwYWRk
aW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCi0gICAgICAgIEludFNpemUg
c2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5ZXIuc2Ny
b2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUoc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFk
ZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTcsMTggQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9m
ZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVy
LmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGlmICghaXM8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihtX293bmluZ0xheWVyKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcg
aXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVy
IGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAg
ICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhlIGNvbnRl
bnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwgcmF0aGVyIHRo
YW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3Jv
bGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6
U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQo
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwx
MiArMTkyMywxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxT
Y3JvbGxiYXIoKSk7CisgICAgaWYgKCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVy
KS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVx
dWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFy
KGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikudmVydGljYWxT
Y3JvbGxiYXIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9s
bENvcm5lckxheWVyKCkgY29uc3QKQEAgLTE5MjQsMTIgKzE5NDAsMTYgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICgh
aXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJs
ZUxheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3Qo
KTsKICAgICBpZiAoY29ybmVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBtX293bmluZ0xheWVyLnZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0gICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRp
Y2FsU2Nyb2xsYmFyIDogbV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNj
cm9sbGJhciA6IHNjcm9sbGFibGVMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0
dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwx
MCArMTk4NSwxMyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQg
fD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3Jv
bGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9v
d25pbmdMYXllcikpOworCisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CiAgICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXll
ciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIs
IEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXll
ckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKQEAgLTE5NzYsNyArMTk5OSwxMCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIu
aGFzU2Nyb2xsYmFycygpKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293
bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9
IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYg
KzIwMjQsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0
byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLm92
ZXJmbG93Q29udHJvbHNSZWN0cygpOwogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigq
bGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNl
dERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxNjUsNyArMjE5MSw4IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Nj
cm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hv
clBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCpt
X3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRv
cigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0
aGlzKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdM
YXllcikpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0
aEJhY2tpbmcoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSwg
KnRoaXMpOwogCiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxDb250YWluZXJMYXll
ci5nZXQoKSk7CiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXIuZ2V0KCkpOwpAQCAtMjE3NCw5ICsyMjAxLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAg
ICAgR3JhcGhpY3NMYXllcjo6dW5wYXJlbnRBbmRDbGVhcihtX3Njcm9sbGVkQ29udGVudHNMYXll
cik7CiAgICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpCi0gICAgICAgIGNv
bXBvc2l0b3IoKS5kaWRBZGRTY3JvbGxpbmdMYXllcihtX293bmluZ0xheWVyKTsKLSAgICAKKyAg
ICBpZiAobV9zY3JvbGxDb250YWluZXJMYXllcikgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAgIGNvbXBvc2l0b3IoKS5k
aWRBZGRTY3JvbGxpbmdMYXllcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3du
aW5nTGF5ZXIpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk4NSw4ICsz
MDE0LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJ
blJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAKICAgICBpZiAobV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVu
dCgpKSB7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVk
UmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVk
Q29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsK
KyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9m
ZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNl
dEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAg
LTMwMzIsOCArMzA2MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5
ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAo
JmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVy
Q29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAg
ICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJl
Z2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNv
bnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVy
RmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbGF5
ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8
IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKQEAg
LTMzMjMsMTcgKzMzNTUsMjMgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgICAg
IHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAogICAgIH0gZWxz
ZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikpOworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpLmhvcml6b250YWxTY3JvbGxi
YXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsK
KyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikp
OworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+
KG1fb3duaW5nTGF5ZXIpLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIEFTU0VSVChp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKTsKKyAgICAgICAgYXV0byYg
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmlu
Z0xheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlv
dXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5z
Zm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25p
bmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50
UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6
ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBl
ZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci5wYWlu
dFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAj
aWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi42ZWNm
YzBmNzI4M2JkOWUxYjY3YjAxOTNmMWRmNDAyM2MxMDNlZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICsz
MTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0
CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYg
KCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSB8fCAhZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcikuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocXVlcnlEYXRhLmxheW91dFVwVG9EYXRlID09IExh
eW91dFVwVG9EYXRlOjpObykgewpAQCAtMzI5Myw3ICszMjkzLDkgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGwKIAogc3RhdGljIGJvb2wgaXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXllcihj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBvdmVyZmxvd1Njcm9s
bExheWVyKQogewotICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJm
bG93U2Nyb2xsTGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVChpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS5ib3hTY3JvbGxpbmdTY29wZSgpID09IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikuY29udGVudHNT
Y3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBv
c2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRl
ckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRlTGF5ZXIpCkBA
IC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJv
bVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXll
ckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5LDExIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JWaWV3cG9ydENvbnN0cmFp
bmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3Jv
bGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBh
bmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBhbmNlc3RvckxheWVyIG5lZWRz
IHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxkIGJlY29tZSBhIHJlZmVyZW5jZS4KLSAg
ICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5
b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7CisgICAgaWYgKCFhbmNlc3RvckxheWVyKSB7
CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKS52aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CisgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBp
ZiAoaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEgKzQ1OTMsMTQg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91
bmRMYXllcigpLCBjbGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAg
IGZyYW1lVmlldy5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA/IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oJmxheWVyKSA6IG51bGxwdHI7CisKICAgICAgICAg
YXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAog
ICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9s
bGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXll
ci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDog
bnVsbHB0ciwKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAg
LTQ2MzAsOCArNDYzOCwxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1
cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29y
ZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9t
ZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkg
eworICAgICAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKTsK
KyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xs
YWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdOb2RlSUQ7CkBA
IC00NzY3LDIwICs0Nzc3LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
eW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAgIGF1dG8gcmVsZXZhbnRTY3Jv
bGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigp
ID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29w
ZSgpOwogICAgICAgICByZXR1cm4gbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAg
IH07CiAKLSAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5sYXllcigp
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdT
Y29wZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVy
IDogKnNsb3dSZXBhaW50T2JqZWN0cykgewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIu
ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXll
ciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3JvbGxpbmdT
Y29wZShyZW5kZXJlciwgKmxheWVyKTsKKyAgICAgICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJl
bGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpkb3duY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGxheWVyKSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xs
aW5nU2NvcGUpIHsKICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0g
YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMiBAQCBT
Y3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNj
cm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdl
dChub2RlSUQpLmdldCgpOworICAgIGF1dG8qIHJlc3VsdCA9IG1fc2Nyb2xsaW5nTm9kZVRvTGF5
ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVzdWx0KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4ocmVzdWx0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJC
YWNraW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIsIFJl
bmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRl
ckxheWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjYWxsZWQg
ZnJvbSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDkzOCw3ICs0OTUxLDcgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxp
bmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWUK
ICAgICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVy
TWFwLCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIu
YmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIgKzQ5NzgsMTIgQEAg
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxs
U2Nyb2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQor
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1fc2Nyb2xsaW5nTGF5
ZXJzLmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVy
TGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxh
eWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5n
TGF5ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9sbENvbnRhaW5lckxh
eWVyID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CkBA
IC00OTc5LDcgKzQ5OTIsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIH0KIH0KIAot
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAg
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4
NWIyNjk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVhOWVmNTYwNGY0Nzdh
MzBjYmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgog
I2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTIxLDIwICsx
MjEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAgICAKLSAgICB2b2lk
IGFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgYWRk
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAgdm9pZCByZW1vdmVT
Y3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJMYXllckJhY2tpbmcm
KTsKIAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7
CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsK
IAotICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHJlbW92ZUxh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xpZW50JiBtX2Nocm9t
ZUNsaWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsK
KyAgICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xsaW5nTGF5ZXJzOwog
ICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAK
ICAgICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CkBA
IC0zNTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKIAotICAg
IHZvaWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9pZCBkaWRBZGRTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xh
eWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5n
Jik7CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUm
KTsKIAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCBzZXRU
cmFja3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFja2luZ1JlcGFpbnRz
ID0gdHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRh
YWY0YTA4MTUxYThjYjFkLi5jNTAyZWE1NmZhZDEzYjgxMjQzZDJiMzQwYTcwZDZlYmQwOTAwZmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCkBAIC05NSw3ICs5NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
ZGVzdHJveUxheWVyKCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIo
KQogewogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXI+KCp0aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8g
b25seSBjcmVhdGUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9s
YXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0
SGFzTGF5ZXIodHJ1ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJM
YXllcjo6TGF5ZXJDaGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KQEAgLTIwOCw5ICsyMDks
MTAgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9s
ZFN0eWxlICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRl
KCpvbGRTdHlsZSwgbmV3U3R5bGUpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIgPSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9m
ZnNldHMoKTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KTsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cigpKSkgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNE
b2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVT
bmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyNSwxMSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7
CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5z
dHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVz
cyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9s
bFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAg
c2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihzY3JvbGxTbmFwQm94LT5sYXllcigpKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHNj
cm9sbFNuYXBCb3gtPmxheWVyKCkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5p
c0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNu
YXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29yZGluYXRvclNjcm9s
bFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQz
NzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li40MjM1ZGQyOGVlNWU1NWViYTQyMDRjNDg3ZDU2YzYy
YmQ2OTFlMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTsKIAogc3RydWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVj
dCBtX3JlcGFpbnRSZWN0OyAvLyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2Jq
ZWN0cyAoZS5nLiwgb3ZlcmZsb3c6aGlkZGVuKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4MzJjMTliNDlj
OTIwYTZhYWYwNTRlNDRlZTkyNWZjZDUxZTllOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCkBAIC0wLDAgKzEsMjA4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
CisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZv
dW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0
cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBs
aWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Yg
b25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICog
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBj
YXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkK
K3sKKyAgICBzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKKyAgICByZXR1
cm4gKytjdXJyZW50U2NvcGU7Cit9CisKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0KQorICAgIDogUmVuZGVyTGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0
LCBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlKQorICAgICwgbV9pblJlc2l6ZU1v
ZGUoZmFsc2UpCisgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9p
bk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YShmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKK3sKKyAgICBtX2lzU2Vs
ZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICBpZiAo
aXNSZW5kZXJWaWV3TGF5ZXIoKSkKKyAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworCisgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgeworICAgICAgICAvLyBXZSBz
YXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xs
IHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxl
bWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQ
b3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVu
dFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7CisgICAgfQorfQorCitSZW5kZXJMYXllclNj
cm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUoKQoreworICAgIGlmIChpblJlc2l6ZU1v
ZGUoKSkKKyAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxh
eWVyRGVzdHJveWVkKCk7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
PT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0
aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5
ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJl
cigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNj
cm9sbENvcm5lcigpOworICAgIGNsZWFyUmVzaXplcigpOworCisgICAgLy8gU2VlIHRoZSBjb21t
ZW50IGluIFJlbmRlckxheWVyOjpkZXN0cm95KCkgd2h5IHRoaXMgaXMgbmVlZGVkLgorICAgIFJl
bmRlckxheWVyOjpkZXN0cm95KCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVy
biBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gt
PmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
b250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCks
IHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1p
bihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBp
ZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6
ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgp
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGlu
c3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXpl
LndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBU
aGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1v
emlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIu
eG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRq
dXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1
c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4o
YWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkp
IC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVk
RGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0
PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVs
dGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0
IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBr
bm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3Rh
dGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91
c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAg
ICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAg
ICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNv
dXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhl
aWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEu
c2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCku
cGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsK
KyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAg
IC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5
ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4K
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBo
ZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRp
Y2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cg
Y2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUg
c2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5
KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxl
ZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklY
TUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkg
bG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVy
Kj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwor
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1h
dGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFs
dWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0Owor
fQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAoreworICAgIFJlbmRlclRy
ZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGU7CisKKyAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVy
ZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB9OworCisgICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGUqPih0aGlzKTsKKworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJv
dW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5
ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihuZXh0
TGF5ZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KG5leHRMYXllcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hh
bmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxl
QXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBpZiAocmVh
c29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxk
cmVuKHRydWUpOworICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xs
YWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250
YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3go
KS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAo
aGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAm
JiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdp
b25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNp
dHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhh
c1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAg
ICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9
IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5n
Rm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21h
dGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRW
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisg
ICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xs
YmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRl
IHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9s
bGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9v
dCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAg
ICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2Vu
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNj
cm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7CisgICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Cisg
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQor
ICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24p
OworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0g
bnVsbHB0cjsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNI
aWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7
Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OworCisgICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQor
eworICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3go
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRM
YXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihuZXh0TGF5ZXIpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obmV4dExheWVyKS0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJl
dHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOworfQorI2VuZGlmCisK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50
KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNj
cm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRp
ZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRpZEVuZFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92
ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRVcGRh
dGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3Jv
bGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgcGFn
ZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9
CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJl
cigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3Jl
aWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZM
T1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkg
fHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3Jv
bGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAg
ICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAg
ICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIo
KS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2Nh
bFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3Rz
LnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENv
cm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFy
ICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Cisg
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
CisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisg
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
KyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KHBhaW50aW5nUm9vdCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KHBhaW50aW5nUm9vdCktPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sg
aXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNl
LgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAg
ICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsK
KworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9y
bWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1l
cworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0
IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5z
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2Un
cmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVt
LgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIg
JiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGgg
d2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5
IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICAKKyAgICAv
LyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Ny
b2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNl
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQp
OworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWlu
dEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2Ug
aGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hh
dCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNS
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVy
QWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4
dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVz
aXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQu
CisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Vz
IG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZC
YXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Cisg
ICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAg
IGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAx
X2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0
KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworLy8gVGhpcyBpcyBj
YWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBT
Y3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAg
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4g
Y2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBp
ZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBzZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIp
Cit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5S
ZXNpemUoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJh
bWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCisgICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhv
d2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCisgICAg
Ly8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCisgICAgcmV0dXJuIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkg
JiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0
IG5vdy4KKyAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVy
ZXIoKS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIg
aXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPworICAgIC8vIElmIHRo
ZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0
bHkuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsK
KworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKworICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7CisgICAgYXV0byBsb2NhbFBvaW50
ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7CisK
KyAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvcik7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShy
ZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOworICAgIGVsZW1lbnQtPnNldE1p
bmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOworICAgIAorICAgIExheW91dFNpemUg
YWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBuZXdPZmZzZXQu
c2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQu
c2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOworICAgIH0KKyAgICAKKyAgICBM
YXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3Rl
ZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKKworICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihl
bGVtZW50KTsKKyAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCku
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7CisKKyAgICBSZXNpemUgcmVzaXpl
ID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7CisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6
OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVy
LT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9
IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZVdpZHRo
ID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAg
IGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
IHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewor
ICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxp
Y2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4K
KyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRv
bSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAg
ICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6
aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwor
CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xs
IHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJz
b3IgaW4gdmlldy4KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpCit7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMp
Cit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChib3VuZHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXll
ciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGls
ZCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+
Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKQoreworICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgp
OworICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9
CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5k
ZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGlsZCkpCisgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+cmVwYWludEJsb2NrU2VsZWN0
aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRC
bG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5
UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0
IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgp
LCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlm
IChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7
IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlz
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xh
eWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBt
X2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zv
ckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVu
ZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNB
dXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxi
YXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDog
c3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9
IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBv
dmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93
IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVy
Zmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2lu
ZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtl
ZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAg
IGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAm
JiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29s
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFz
VmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Ym94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJs
YXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5
IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdl
IG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIg
JiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFy
ICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3Jv
bGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3Zl
cmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNh
bE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwg
dGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAm
JiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigp
LnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVk
KGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVo
YXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBv
ciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1
dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRl
U2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKwor
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykg
eworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJl
cigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJl
bnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJv
eD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Cisg
ICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXAp
LgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6
OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94
LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFn
ZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciog
bGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdz
KQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4oY2hpbGQpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihjaGlsZCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
Z2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZl
bHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGNoaWxkLCBnZW9tZXRyeU1hcCwgZmxh
Z3MpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBj
b3JuZXIgY2FzZXMgd2hlcmUKKyAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVw
ZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KKyAgICB1cGRhdGVEZXNjZW5k
YW50RGVwZW5kZW50RmxhZ3MoKTsKKworICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250
ZW50IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1
dGluZworICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3Vy
IHZpc2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCisgICAgLy8gcmVjb21wdXRl
IGFsbCBvdXIgcG9zaXRpb25zIGFueXdheS4KKyAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRh
bnQgJiYgIW1faGFzVmlzaWJsZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
cG9zaXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigpOworICAgIGlmIChwb3NpdGlv
bkNoYW5nZWQpCisgICAgICAgIGZsYWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOworCisgICAg
aWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3Bv
cnRDb25zdHJhaW5lZEFuY2VzdG9yLCBJc092ZXJmbG93U2Nyb2xsIH0pKQorICAgICAgICBjbGVh
ckNsaXBSZWN0cygpOworCisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENv
bnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENv
bnN0cmFpbmVkQW5jZXN0b3IpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgIGZsYWdzLmFkZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsK
KyAgICAKKyAgICBib29sIHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFp
bnMoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNB
bGwoeyBJc092ZXJmbG93U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0p
KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAh
aXNWaXN1YWxseU5vbkVtcHR5KCk7CisgICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3Mg
PSBnZW9tZXRyeU1hcCAmJiAoKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFs
bHlFbXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBp
bmdzKQorICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CisKKyAgICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgeworICAgICAg
ICAvLyBXaGVuIHNjcm9sbGluZywgd2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2
aXN1YWxseSBub24tZW1wdHkgbGF5ZXJzLgorICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQor
ICAgICAgICAgICAgY2xlYXJSZXBhaW50UmVjdHMoKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTog
V2UgY291bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUg
dHJlZS4KKyAgICAgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIFdoZW4g
U2Nyb2xsVmlldydzIG1fcGFpbnRzRW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5
ZXIgYmFja2luZyBjaGFuZ2VzLCB0aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KKyAg
ICAgICAgLy8gdmlzdWFsIHRvIGxheW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhl
IGNhY2hlZCByZXBhaW50IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUg
cmVjb21wdXRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xODgxMjEpLgorICAgICAgICAvLyBDaGVjayB0
aGF0IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNvcnJlY3QuCisgICAgICAgIEFTU0VSVCghcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRS
ZWN0cygpLm1fcmVwYWludFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgICAgICBBU1NF
UlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBh
aW50TGF5b3V0UmVjdHMoKS5tX291dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRz
Rm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgIH0KKwor
ICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCh0aGlzLCBnZW9t
ZXRyeU1hcCwgZmxhZ3MpOyAgICAKKworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVj
dGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2Ug
dGhlIHNpemUoKQorICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwg
c3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwor
ICAgIC8vIHVwZGF0ZWQgYWJvdmUuCisKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIGJv
b2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KKworICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOworCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1h
cmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Cit9CisKK1Njcm9sbE9mZnNl
dCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29u
c3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykK
K3sKKyAgICBpZiAoIWhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250
ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBp
eGVsT2Zmc2V0KSksCisgICAgICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAor
eworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNj
cm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJu
IHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhl
IHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAor
eworICAgIGlmICghY2FuUmVzaXplKCkgfHwgbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50
UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Cisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3Ju
ZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29u
c3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRG
cm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdt
ZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNp
emUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAg
ICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJv
eFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAt
IG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5G
cmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lmxh
eWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdt
ZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAg
ICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50
KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdp
ZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBt
X3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJm
bG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0lu
dChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVm
dE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJs
ZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3Ao
KSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93
LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
JiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJl
cGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNp
emVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Ny
b2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3go
KSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRS
ZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAg
IHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0
Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBj
b25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5n
KCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xs
aW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50
UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxi
YXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIElu
dFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYm
IHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xs
YmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVT
aXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigp
LCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0
aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5o
ZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3Zlcmhh
bmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAo
IXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0
cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVz
dCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBh
dXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlm
IChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xs
T2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3Jv
bGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkK
KyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVT
aXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0
LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiBy
ZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5z
ZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2li
bGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIElu
dFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hh
bmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwor
fQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGlu
Z0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigp
LmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNp
ZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZs
b3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxB
bmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9s
bEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVy
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2Fn
ZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQor
eworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5k
ZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVt
ZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24g
PDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxU
eXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRv
IGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hh
dCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdp
dGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgp
IC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Cisg
ICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAg
ICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYg
KHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
WE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Nj
cm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9m
ZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxY
T2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAg
ICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGgg
YW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAg
ICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdl
IHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRz
Q29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3
JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRl
KCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUg
bG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxp
bmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRh
bnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAg
ICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRh
dGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFy
IHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJp
bmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlv
dXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5k
ZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJl
dCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0
UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
PyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJl
cigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisg
ICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZv
clJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFr
ZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVu
dCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5u
ZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNj
aGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVw
YWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBh
bmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBl
bmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJm
bG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAg
ZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgp
Cit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkg
eworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29u
dGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVw
b3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRl
eHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRT
Y3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hv
c2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRI
aWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9z
aXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lu
dFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAg
ICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2li
bGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9
IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hp
dFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVU
b0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYg
aXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNv
bnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQor
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgT3B0aW9uYWw8SW50U2l6ZT4m
IG9mZnNldEZyb21Sb290LCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApCit7CisgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUg
b2Zmc2V0OworICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKKyAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0
RnJvbVJvb3QudmFsdWUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgTGF5b3V0U2l6ZSBjb21wdXRl
ZE9mZnNldEZyb21Sb290OworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgICAgICBj
b21wdXRlZE9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1h
cC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEl0IGxvb2tzIHN1c3BpY2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9MYXll
ckNvb3JkcyBoZXJlCisgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3Ig
bWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgorICAgICAgICAgICAgY29tcHV0ZWRP
ZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOworICAgICAgICB9Cisg
ICAgICAgIG9mZnNldCA9IHJvdW5kZWRJbnRTaXplKGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3QpOwor
ICAgIH0KKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXQpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgfQorICAgIAorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0
KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENv
cm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxD
b3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFt
ZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVu
ZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5l
ciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5j
YWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJl
bmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAg
ICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
Y29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxk
IG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRl
cmVyKCkpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUo
KQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3Jv
bGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50
KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hv
dWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyUmVzaXplcigpCit7Cisg
ICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBh
cmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAg
UmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVz
aXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29y
bmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNv
cm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXpl
Q29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVy
SW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCitS
ZW5kZXJMYXllclNjcm9sbGFibGU6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8
UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhl
IGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0g
c25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9o
QmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92
QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xs
YmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisg
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxT
Y3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29s
IHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZv
aWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJs
YXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIp
KTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUg
Y29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0
OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJS
ZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9s
bGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJS
ZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAg
ICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAg
IH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxi
YXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VU
byhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAs
IGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJh
ciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUg
Y29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVm
dCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNv
cm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlD
b3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5l
clJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVz
dWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9s
bGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVz
cygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFy
VGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAor
eworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0
cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3Jv
bGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkKK3sKKyAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1
dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVl
ZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVo
YXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJx
dWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0
aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVs
c2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Ny
b2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0
IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVk
UGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChw
b3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigp
LnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KHBvc2l0aW9uZWRQYXJlbnQpKSB7CisgICAgICAgICAgICBhdXRvKiBwb3NpdGlvbmVk
UGFyZW50U2Nyb2xsYWJsZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocG9zaXRp
b25lZFBhcmVudCk7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1
YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0
LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlv
dXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKwor
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5y
ZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNl
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVy
ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocGFy
ZW50TGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGUgPSBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHBhcmVudExheWVyKTsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRMYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJT
Y3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgQVNTRVJUKHBhcmVu
dExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdMYXllciA9IHBhcmVudExheWVyLT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxl
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHdoaWxlIChlbmNsb3NpbmdMYXllcikgeworICAgICAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkg
eworICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuY2xvc2lu
Z0xheWVyID0gZW5jbG9zaW5nTGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSB7CisgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNT
Y3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250
ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlm
ICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAh
PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUg
PSBtX2JveFNjcm9sbGluZ1Njb3BlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBh
IHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4K
KyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlm
IChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3QKK3sKKyAgICBp
ZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBp
cyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCisgICAgLy8g
RklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2VkIHRvIGJlIHJlbGV2YW50IGZvciBT
YWZhcmkgUlNTLgorICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpICYmICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xpcCBzZXQuCisKKyAgICBpZiAocmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCkpIHsK
KyAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJlIGlzIG1pc2xlYWRpbmc7IHRo
aXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUgb3ZlcmZsb3csCisgICAgICAg
IC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNvbnRyb2wuCisgICAgICAgIHJl
dHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKTsKKyAgICB9CisKKyAgICAv
LyBQcm9ncmFtbWF0aWMgc2Nyb2xscyBjYW4gc2Nyb2xsIG92ZXJmbG93OmhpZGRlbi4KKyAgICBy
ZXR1cm4gYm94LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBib3gtPmhhc1ZlcnRpY2FsT3Zl
cmZsb3coKTsKK30KKworT3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxvd2VkKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRv
VmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFhbGxvd3NDdXJyZW50U2Nyb2xs
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBEb24ndCBzY3JvbGwg
dG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdl
YmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZy
b20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KKyAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExh
eW91dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1
YWQoRmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIC8vIEZv
ciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNj
cm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAorICAgICAgICAv
LyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBs
b2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgor
ICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCksIDApKTsKKyAgICB9CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOworICAgIExh
eW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxF
eHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsK
KworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCku
bG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNl
dCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNz
ID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVz
cygpOworICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgJiYgdXNlU21vb3RoU2Ny
b2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIGJveC0+ZWxlbWVudCgpKSkKKyAgICAgICAgICAgIGFu
aW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQg
LSBvbGRTY3JvbGxPZmZzZXQ7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRy
YW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHJldHVybiBhYnNvbHV0ZVJl
Y3Q7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTE1NjkzYzEyNDZhZjYyMzQ0YTUzN2I2MjNhYWFmYWE5
YjhiMjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmlj
YXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9i
ZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJv
bkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJA
d2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xh
bmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAq
ICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8Ynpi
YXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBv
ZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3
dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxl
IGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9m
IHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1h
eSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBv
ZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWlu
dDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBmaW5hbAorICAgIDogcHVibGlj
IFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNpdCBSZW5kZXJMYXllclNjcm9s
bGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVy
U2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0
IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50
U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAgaW50
IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisg
ICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNj
cm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93
LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIGJvb2wgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9s
bFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Cisg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
YnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xs
VG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpV
bmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRp
b25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3Npbmcg
bGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4g
dGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJh
bWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZh
aWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIHNjcm9sbHNPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNv
bnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKyAg
ICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9
CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJh
cihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsg
fQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmlu
YWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKKyAgICBTY3JvbGxQb3NpdGlv
biBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247
IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZv
aWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRy
dWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1Jl
Y29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgp
IGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhl
IGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0
aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wg
aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OworICAgIHZvaWQgcmVz
aXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNpemUmKTsKKyAgICBi
b29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CisgICAg
dm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQorCisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKyAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgdm9p
ZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZv
aWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB2b2lkIHJlcGFpbnRCbG9j
a1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgorICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29u
dGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIGJv
b2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKKyAgICAg
ICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAg
ICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAgICA9IDEgPDwgMiwK
KyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRl
ckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworCisgICAgYm9v
bCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAgIGJvb2wgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9pZCBjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQorICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOworICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOyAgCisKKyAgICBJbnRT
aXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICB2b2lkIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBPcHRpb25hbDxJbnRTaXplPiYgb2Zmc2V0RnJv
bVJvb3QsIFJlbmRlckdlb21ldHJ5TWFwKiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9p
ZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAg
dm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJv
bFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJ
bnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsK
KyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9y
UmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9s
bENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50
UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAg
IHZvaWQgY3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0
U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBv
aW50KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgYm9vbCBhbGxvd3ND
dXJyZW50U2Nyb2xsKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVj
dFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRp
b25zJik7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5
ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRv
IHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworICAgIGJvb2wg
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlv
dXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBi
b29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyNl
bmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOworI2Vu
ZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDog
MTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBi
b29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Nyb2xsUG9zaXRpb24g
bV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3Jv
bGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAgLy8gRm9yIGxheWVy
cyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAg
ICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICBNYXJrYWJs
ZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwg
MD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIElu
dGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVl
OyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIg
Y3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJlbmRlclNj
cm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5cGUoKSA9PSBXZWJD
b3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0OGUyNC4uNzJjMjk4
YTcyMmZhMTBmNGEzY2FhZDM5YTM0NWE3YmQ2YTkyM2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8u
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5LDEwICs4NzksOSBA
QCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZv
clBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRvKiBsYXllciA9IGVu
Y2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5
ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICgh
bGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5
ZXIpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CiB9CiAKIEludFJl
Y3QgUmVuZGVyTGlzdEJveDo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0
ZDA5OTZlNmJmYmU0MGE2NDQxMTY0NDU5YWE2NzgwZDhiLi4xYmE1YTYwMjFlOGQyMTNhYmQ0MjRl
N2VlZjUyMzg0YmY0MDE5MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCkBAIC00OSwxNCArNDksMTQgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJl
bmRlckxheWVyKiBsYXllcikKK1JlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBsYXllcikKICAgICA6IG1fbGF5ZXIobGF5ZXIpCiAgICAgLCBtX3RpbWVy
KCp0aGlzLCAmUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5oCmluZGV4IDFjNzg4NDk1ZTBlODg1NzVlODBiZjkzMDhhMmY0
OTRmYjRhNjI4ZDUuLjA4NGFkMzM3NzQ4NmRmOWNlODMyNTY2NjY4NTQ1MmM0N2I5ODIzMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaApAQCAtNDksMTMgKzQ5LDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBS
ZW5kZXJMYXllclNjcm9sbGFibGU7CiAKIC8vIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgYXV0by1z
Y3JvbGxpbmcgZm9yIDxtYXJxdWVlPgogY2xhc3MgUmVuZGVyTWFycXVlZSBmaW5hbCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyTWFycXVlZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsK
KyAgICBleHBsaWNpdCBSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSopOwogICAg
IH5SZW5kZXJNYXJxdWVlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwpAQCAt
ODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKLSAgICBS
ZW5kZXJMYXllciogbV9sYXllcjsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fbGF5ZXI7
CiAgICAgVGltZXIgbV90aW1lcjsKICAgICBpbnQgbV9jdXJyZW50TG9vcCB7IDAgfTsKICAgICBp
bnQgbV90b3RhbExvb3BzIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDcxMTNmNWMzMjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjk1NzU0
MWE2YmU4MWYxYzBjNmNjZDdjYTQ2ZjVjYmYxYzNiNmQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmpl
Y3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5k
ZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBwdWJsaWM6CiAgICAgLy8gQW5vbnlt
b3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0
aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFub255bW91
cyBpbiB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IGEwNzUwODFmNTY1Y2Vk
YjU1ZGRiZWM5NjhlYzJjYjEzOWQ2MGJhYjguLjg1NWE5MmM4MWFkM2ZjNGM0MDdmMjQ4MmYxMDIw
ODI4N2ZkNGM2YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDAwLDE3
ICs0MDAsMjMgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWwKICAgICBSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
ICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5s
YXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVu
ZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYm
IGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+
c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZh
M2Q1NjgyZDc5MzU2OTVjMjNmNjBjLi4xZjEwYTMyMjk0NjZjODU2YTI0MmQ3ODA0MDVkYWRkYzVi
ZjRmYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5k
ZXJMaXN0TWFya2VyLmgiCkBAIC01OTksMjAgKzU5OSwyMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUxh
eWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91
dFJlYwogICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAg
ICB9CiAKLSAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBz
Y3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5
ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYg
cm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Ny
b2xsV2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5z
Y3JvbGxXaWR0aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdo
dCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxI
ZWlnaHQoKTsKKyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCisgICAgICAgICAgICB0
cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAg
ICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS55
KCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNj
cm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
OwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFz
VmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9j
a1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAg
ICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2FzdDxTY3Jv
bGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7Ci0gICAgICAgICAgICBpZiAobWFjVGhl
bWUuaXNMYXlvdXREaXJlY3Rpb25SVEwoKmxheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAg
ICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5
ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxi
YXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOwogICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZm
N2YwMDZmMjA4NWZhOWFiNDI2Yy4uYzliYmQzYjY5YjAxOWI0NGNkZTcyZGM5NDYyZGM1MzE2NWYz
YTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4
LDggKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0z
MjksOCArMzI5LDEyIEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBs
YXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50
SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFp
bnRJbmZvLnJlY3QpOworICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVzaXplcihwYWludEluZm8u
Y29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5m
by5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJv
b2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMw
NTNhNGRkYTIwMDhlZmQ3YTY2ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgwMmYzNTFjOTJjNTg0ZmZh
NGQzZTNhMzA3NjdiYzAyNTc1NTA0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTE1NSw2ICsxNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE5MDYsNyArMTkwNyw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBlbGVtZW50
LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJl
YSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKSk7CisgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7
CiAgICAgfQogICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAwLDggKzI5MDIs
OCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFy
ZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxS
ZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KHJlbmRlckJveC5sYXllcigpKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJCb3gubGF5
ZXIoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4
IDg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDczODg1M2RkNTAuLjkyOGQ4YjNmMDdlYjQ5
YTEwYmQ1Y2MzYThkODYwNTllNWQ4N2Y2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0F1dG9jYXBpdGFs
aXplLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1l
c3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzcsMTEgQEAgLSAoaW50KXNjcm9sbFhPZmZzZXQK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAhaXM8V2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5zY3JvbGxP
ZmZzZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC04OCwxMCArOTIsMTUg
QEAgLSAoaW50KXNjcm9sbFlPZmZzZXQKIAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWlu
aW5nQmxvY2soKTsKKwogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
IHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigp
LT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyIHx8ICFpczxX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPnNjcm9sbE9mZnNldCgpLnkoKTsKIH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0
OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeQpAQCAtMTExLDExICsxMjAsMTYgQEAgLSAodm9p
ZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeSBhZGp1c3RGb3JJ
T1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogbGF5ZXIgPSBk
b3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyIHx8ICFpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8V2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcik7CisKICAgICBpZiAoYWRqdXN0Rm9y
SU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7Ci0gICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNl
dCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogfQogCiAtICh2b2lkKWFi
c29sdXRlUG9zaXRpb246KGludCAqKXggOihpbnQgKil5IDooaW50ICopdyA6KGludCAqKWgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGVmNzM1MDA0
ZWE2ZDA1ZTkxMjg2ZWNmYTZmMGY4ZDQwMTA1ZTY2ZGUuLmRjOTYxODEwNjVhZmUyN2NkOTAwMTc5
YTZlMWQ0NGExZDcxOWM4MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtOTQsNyArOTQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRh
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
YW5nZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oPgpAQCAtNzM3LDEwICs3MzcsMTEgQEAgLSAodm9pZClfc2Ny
b2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICAgICAgICAgc3RhcnROb2Rl
LT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJl
Y3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9k
ZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQs
IFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6
U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogI2Vsc2UKICAgICAgICAg
YXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0g
ICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgaWYgKGxheWVyICYmIGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4
ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNj
cm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAg
ICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5j
ZSgpOwogICAgICAgICB9CkBAIC03NTcsMTAgKzc1OCwxMSBAQCAtICh2b2lkKV9zY3JvbGxET01S
YW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZSB3aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQK
IAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAg
IGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwot
ICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgIGlmIChsYXllciAmJiBpczxSZW5kZXJM
YXllclNjcm9sbGFibGU+KGxheWVyKSkgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcik7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVj
dFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZp
eGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAKICAgICAgICAgICAgIGF1dG8g
Y29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYmY2OGE3MTQ1ZGE4OThlZDRlN2NlNzRl
NjE1N2YwMGJkNzBmN2E2My4uYzhjNDcxMDk2M2M0NTIzODdjOGIyY2M2ZmMzNDM3YTkzNmE0OTg0
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1l
bnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Ny
b2xsYWJsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KQEAgLTIwMzUsMTAgKzIwMzUsMTIgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gZGV2aWNl
U2NhbGVGYWN0b3IoKTsKICAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2Nyb2xsRGVsdGEoLWRlbHRh
WCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3IpOwogCi0gICAgICAgIFJlbmRl
ckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOworICAgICAgICBSZW5kZXJMYXllclNj
cm9sbGFibGUqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CiAgICAgICAgIGlmIChtX2dlc3R1
cmVUYXJnZXROb2RlICYmIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJlbmRlcmVyKCkt
PmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7CisgICAgICAgICAgICBpZiAoYXV0byogbGF5
ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQor
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKS0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKSB7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggNThmMzE5YmFiMTk1OGZlZmU1YjUzYjk1N2JlZGNiZjUyM2ZjOTAxYS4uMzgzNTdhYzBmZDYz
N2ViYTMwYTA2MDY5M2JhMzY4MzE5NmZmNDc2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIw
LTA4LTE3ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGxpdCB1cCBSZW5kZXJM
YXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorCisgICAgICAg
IFJlbW92ZSB1bm5lY2Vzc2FyeSBnbGliIGV4cGVjdGF0aW9uIGZvciB0aGUgdGVzdAorICAgICAg
ICBmYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLmh0bWwuCisgICAg
ICAgIChUaGlzIGlzIHVucmVsYXRlZCB0byB0aGlzIGJyYW5jaCwgYW5kIHNob3VsZCBiZSBmaXhl
ZCBiZWZvcmUpCisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFz
aWMtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgcy9SZW5kZXJMYXllci9SZW5kZXJMYXll
clNjcm9sbGFibGUvCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9hbmltYXRpb25zL3N0ZXBzLXRy
YW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMt
ZXZlbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgcy9SZW5kZXJMYXllci9SZW5kZXJMYXllclNj
cm9sbGFibGUvCisKIDIwMjAtMDgtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gUmVtb3ZlIHN1cHBvcnQgZm9yIE5QQVBJ
IHBsdWdpbnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1h
bmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zY3Jv
bGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKaW5kZXggOTM2
YmVkMjVjMjcxN2Y1MjFkYzU2ZDUzMjYzMDlkYjg2OTRhMjYxNS4uOWEzNDY3NWQxZjQ2Mjc0NzAw
YmQ0N2YyYmRmZWM1MjdjY2MxYjY5YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3Jv
bGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBl
Y3RlZC50eHQKQEAgLTEsMTQgKzEsMTQgQEAKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmll
dzogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmll
dzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6
IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBt
b3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXll
clNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkVmVydGljYWxTY3JvbGxiYXIKIENPTlNP
TEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNP
TEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKLUNP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIK
LUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxi
YXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZU1vdmVkSW5D
b250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNl
SXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNj
cm9sbGFibGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFyCiBDT05T
T0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJbkNvbnRlbnRBcmVhCi1DT05T
T0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENvbnRlbnRBcmVhCitDT05TT0xF
IE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQog
VGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2FuaW1hdGlvbnMvc3Rl
cHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0
ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWIyYTM4Y2Ey
NzNjNmQ3MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9u
cy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CisrKyAvZGV2
L251bGwKQEAgLTEsNiArMCwwIEBACi1QQVNTIGNvdW50IGlzIDAKLVBBU1MgY291bnQgPCA2IGlz
IHRydWUKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZl
bnRzLWV4cGVjdGVkLnR4dAppbmRleCA2MGNkYjY2YzFmMGEyYjEwN2Y1ODQxN2IzMzJlZjg3ZjYx
NTFmOTQyLi40NTg3ZjliNWQ0ZTE1OWRiOGMzNWM5MjRjMDQwNmVlYWZlZDYzY2UxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1h
bmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1l
eHBlY3RlZC50eHQKQEAgLTEsMTEgKzEsMTEgQEAKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5
ZXI6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVy
OiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJM
YXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5
ZXI6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBSZW5k
ZXJMYXllcjogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09MRSBNRVNTQUdFOiBS
ZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTog
UmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRDb250ZW50QXJlYQorQ09OU09MRSBNRVNT
QUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZFZlcnRpY2FsU2Nyb2xsYmFy
CitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29u
dGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlz
RG93bkluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJl
bmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRpY2FsU2Nyb2xsYmFy
CitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFeGl0ZWRDb250
ZW50QXJlYQogVGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406724</attachid>
            <date>2020-08-17 10:07:44 -0700</date>
            <delta_ts>2020-11-22 17:05:42 -0800</delta_ts>
            <desc>Patch, v4</desc>
            <filename>bug-60305-20200817190740.patch</filename>
            <type>text/plain</type>
            <size>367054</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1NGM1MDg0NDNkNjBi
YmNjYzM5YTk4OWM5MTY1OTE0MjhhNDE0ZS4uZGE5ZDRiYTNmOGFmNDMxNjU4ZGZmZmQ5YWU4NDU5
Y2EyZjUwNjcwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwMyBAQAorMjAyMC0wOC0xNyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU3BsaXQgdXAgUmVuZGVyTGF5ZXIgaW50byBS
ZW5kZXJMYXllciAmIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4KKworICAgICAgICBNb3ZlIGFsbCBz
Y3JvbGxpbmcgLyBvdmVyZmxvdyBoYW5kbGluZyBmcm9tIFJlbmRlckxheWVyIGludG8KKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlIC0tIHRoaXMgc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRo
ZSBSZW5kZXJMYXllcgorICAgICAgICBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGNsZWFucyB1cCB0
aGUgY29kZS4KKworICAgICAgICBDdXJyZW50bHkgd2Ugc3RpbGwgYWx3YXlzIGNyZWF0ZSBSZW5k
ZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cywgZnV0dXJlCisgICAgICAgIHBhdGNoZXMgd2lsbCBv
bmx5IGNyZWF0ZSBSZW5kZXJMYXllclNjcm9sbGFibGUgb2JqZWN0cyBvbi1kZW1hbmQsIGlmCisg
ICAgICAgIHNjcm9sbGluZyAvIG92ZXJmbG93IGhhbmRsaW5nIGlzIG5lY2Vzc2FyeS4KKworICAg
ICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZTogQWRkIFJlbmRlckxheWVyU2Nyb2xsYWJsZS4qIHRvIGJ1aWxkLgorICAgICAgICAqIFNvdXJj
ZXMudHh0OiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6IERpdG8uCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omdl
dFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAq
IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVsRXZl
bnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6Cisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxO
YXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAg
ICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpv
dmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9y
Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhclNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpIaWdobGlnaHREYXRhOjphcHBseVNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjplbmRBbmRDb21t
aXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRy
aW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNjcm9sbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzY3JvbGxUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c2V0dXBXaGVlbEV2ZW50
TW9uaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9s
bGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNj
cm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFp
bnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25z
dHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkRm9yU2Nyb2xs
YWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0Zv
clNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjp1cGRhdGVNYXJxdWVlRm9yU2Ny
b2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJ0cmFjdFNjcm9sbE9mZnNldEFuZFVw
ZGF0ZVNjcm9sbGluZ1Njb3Blc0ZvclNjcm9sbGFibGVMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxv
d2VkRm9yU2Nyb2xsYWJsZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmF1dG9z
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHNGb3JTY3JvbGxhYmxlTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFBhaW50
T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllclR5cGUgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9yaXpv
bnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJm
bG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
Ojpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93
U2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Nyb2xsZWRCeU92ZXJmbG93
U2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5n
Tm9kZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVw
ZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU3luY2hyb25vdXNTY3JvbGxpbmdOb2Rlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9y
U2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29t
cG9zaXRvcjo6d2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0aEJhY2tpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1
cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxp
bmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OmNyZWF0ZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Om5leHRTY3JvbGxpbmdTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp2aXNpYmxlU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnRlbnRzU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjplbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkZXN0cm95U2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVu
QnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFuZGxlVG91Y2hFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkRW5kU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZGlkVXBkYXRl
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6Om9mZnNldEZyb21SZXNpemVDb3JuZXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpw
YWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OmNhblJlc2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWN1cnNpdmVseUNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMp
OgorICAgICAgICAoV2ViQ29yZTo6cmVjdXJzaXZlbHlSZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6cmVwYWludEJsb2Nr
U2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6cmVjdXJzaXZlbHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNs
YW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzVmVydGljYWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6
OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzQWN0aXZlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNTY3JvbGxDb3JuZXJW
aXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGU6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmhhbmdBbW91
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpz
Y3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJTY3JvbGxDb3Ju
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjbGVh
clJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYmFyU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJy
ZW50U2Nyb2xsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oOiBBZGRlZC4KKyAgICAgICAgKGlz
VHlwZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxv
Z2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTA4LTE3ICBZdXN1a2UgU3V6
dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGUgc2hvdWxkIGJlIGEgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCA2MmRhZDE1MWY2NDNiMDE3NTA1NjZlYTAwYmRiYmI0MGFjYTExNGFjLi41YTMy
ZjRjYjcxNzY0OTk3YTk5MDAyMDg4MGQ5MDMxYzY3YTE2MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5n
IGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwbGl0IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBS
ZW5kZXJMYXllclNjcm9sbGFibGUuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNj
cm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAg
KiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFu
Z2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMDgtMTIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgbmVlZCBmb3IgZGVmaW5pbmcgVVNFX05F
V19CVUlMRF9TWVNURU0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3
YjgwZDFjZjc0ZjJlM2U4YWJlOWZjOThjNTUwNjIzLi4yYzZlYWFjMTM1NzFlMzdiYTM1YmRkNjUx
Y2VhOTM0NzNmYmY0OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMjAtMDgtMTcgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxp
YS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxh
eWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwbGl0
IHVwIFJlbmRlckxheWVyIGludG8gUmVuZGVyTGF5ZXIgJiBSZW5kZXJMYXllclNjcm9sbGFibGUu
CisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgor
CiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCmluZGV4IGE2Y2E1NDEwYzQxYWZmZWIxYmI1ZWQxMDZhNmFkMTkzYjNiYWYz
NzguLmMyZjczYmIyYzlkZDdlMmM3MTk5YzQ1NTA0MTA1NDNlOGZiNTMxOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTM5MSw2ICsxMzkxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJNZWRpYS5o
CiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQxODAxYWEw
MWZlOTI4MzBiM2VhODI2ZTY5N2JkYWI4NWZjODRmOTcuLmVhYmViMGViYTI4ZjIwNTIyOTMwMjY2
NTVmYjA3MjJmNDg5OTI0YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMTI4LDYgKzIxMjgsNyBAQCBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckZpbHRlcnMuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0
U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmM2ODgxYmU4
MjA4ZTIwZDMzZTI0NmQyNTZlNzY5YmZkMjdmNGYwYS4uYTljNzhjZDMxYjA0Mjc4YjliYzk2NGNi
OThjZDM2OGI3N2ZlNTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA4LDYgKzMwOCw3IEBACiAJCTBGNTgwQjBFMEYxMkEy
NjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkgLyogR3Jh
cGhpY3NMYXllckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NTgwQ0Y5MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjU4MENGRjBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU4MENGQjBGMTJERTlCMDA1MUQ2ODkgLyogUmVu
ZGVyTGF5ZXJCYWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY1ODBDRkYwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTgwRkEzMTQ5Njkz
OTEwMEZCNUJEOCAvKiBXZWJUaWxlZEJhY2tpbmdMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdl
YlRpbGVkQmFja2luZ0xheWVyLmggKi87IH07CiAJCTBGNTgwRkFGMTQ5ODAwRDQwMEZCNUJEOCAv
KiBBbmltYXRpb25VdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBBbmltYXRpb25VdGlsaXRp
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjVCN0E1NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUzMTBGNjVEN0Ew
MDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01OTI1LDYgKzU5MjYsOCBAQAogCQkwRjU4MENG
QTBGMTJERTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyQ29tcG9zaXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZCMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyTGF5ZXJCYWNraW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwQ0ZD
MEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkIwRjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJM
YXllclNjcm9sbGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1ODBDRkMw
RjEzQUI5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1ODBG
QTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVGlsZWRCYWNraW5nTGF5ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTgwRkFFMTQ5ODAwRDQwMEZCNUJEOCAvKiBB
bmltYXRpb25VdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5p
bWF0aW9uVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc3Niw2
ICsyODc3OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
RmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTgwQ0ZDMEYxM0FCOUIwMDUxRDY4OSAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGUuY3BwICovLAorCQkJCTBGNTgwQ0ZCMEYxM0FCOUIwMDUx
RDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0
MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQx
RDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVF
ODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5lQm94TGlzdC5jcHAgKi8sCkBAIC0zMzEzNyw2ICszMzE0
Miw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NTgwQ0ZGMEYxM0FCOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllclNjcm9sbGFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIwRjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRl
ckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDBkODM4ZDU3NDgxZmI0N2JkOWZlMjlkOTdhNWRjMDlhYjFkOGNhYjYuLjNiZjQ2Zjcz
NmU3YTUyZTVhOWQ4ZDIxOTk4ZjIwYzJhYzUyYWJiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtNzksNyArNzksNyBAQAogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkxNiw3ICszOTE2LDggQEAgU2Nyb2xsYWJsZUFyZWEq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxl
KCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94LmxheWVyKCkpKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdApAQCAtMzkyOSw3ICszOTMwLDggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3Jv
bGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihi
b3gubGF5ZXIoKSkpOworICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94Lmxh
eWVyKCkpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDg4MDJlZDA0ZWEzMzMwZTk1N2RiYTAxYzE3MTYyNDQ1
MWVjNDQ0Y2QuLmM1NjgyMDVjMWRhODUyMDMzZTFkYTBkMjYxNjYyNzkxYjJjM2Y1ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5LDkgKzg5LDkgQEAKICNpbmNsdWRlICJQc2V1ZG9DbGFz
c0NoYW5nZUludmFsaWRhdGlvbi5oIgogI2luY2x1ZGUgIlF1aXJrcy5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50ZWRGbG93LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVl
VXBkYXRlci5oIgpAQCAtMTMwOCw4ICsxMzA4LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxM
ZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdl
cihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZp
b3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpO
bzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUo
dHJ1ZSk7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5s
YXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVu
ZGVyZXItPmxheWVyKCkpLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsK
ICAgICB9CiB9CiAKQEAgLTEzMzIsOCArMTMzMiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xs
VG9wKGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIo
bmV3VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6
OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
ICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJlci0+bGF5ZXIo
KSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVy
LT5sYXllcigpKS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAg
fQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IGQ5
N2U2NmY4ZjhhZjA1ZmEwMjc3NmEwMDg1MGY1ZjU1YWU4NjFmM2YuLjcwZDk5OWE3YjI4NzUxYzg4
YzZjOTY2MTA2NmY1N2Y5YTk0NjYxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCkBAIC01Niw3ICs1Niw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGhlbWUuaCIKQEAgLTI0MTIsOSArMjQxMiwxMiBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIg
PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikgPyBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA6
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUo
cmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNo
b3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rv
Y3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+
Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1l
KCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRlMmU0ZTJiMGZiMTEzZjAzYTFiZDNhNzNjMjcxMjc1
Li4zODA4YzZiMjM1YzZjMDMwZGE3NDFiZjg2MTRhNjUyNzI3MDkwZWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIK
ICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc1LDkgQEAg
UmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5s
YXllcigpLT5tYXJxdWVlKCk7CisgICAgYXV0byogbGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpOworICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5t
YXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZm
ZDQ0ZTFjNDQyNjc4NmEzLi44OGM4ODQ0NmM5NGQ2MjljMGY2ODk1MWQzZTg2Y2ZjZjNjZDc0NjIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OCw3
ICs0OCw3IEBACiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNDYsMTMgKzI0NiwxNCBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvKiBpbm5lclRleHRSZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWlubmVyVGV4dFJlbmRlcmVyKQorICAgIGlmICghaW5uZXJUZXh0
UmVuZGVyZXIgfHwgIWlubmVyVGV4dFJlbmRlcmVyLT5sYXllcigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvKiBpbm5lckxheWVyID0gaW5uZXJUZXh0UmVuZGVyZXItPmxheWVyKCk7Ci0g
ICAgaWYgKCFpbm5lckxheWVyKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihp
bm5lclRleHRSZW5kZXJlci0+bGF5ZXIoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8q
IGlubmVyTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGlubmVyVGV4dFJl
bmRlcmVyLT5sYXllcigpKTsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRv
d25jYXN0PFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7
CiAgICAgaW5uZXJMYXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhNmE2MmFjOWY2ZWVjYTQ1MDFjZDQ3YTVmMDBl
MGU1MWZmNzYxMzkyLi5iYjcyYzY4MzNmMTY5OWY5NDA0YzU2Y2IzYTVlNjVhM2M3ZTY0YWJmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC03OSw3ICs3OSw3IEBACiAjaW5j
bHVkZSAiUGx1Z2luRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYW1lU2V0LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtMzQzLDEyICszNDMsMTUgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBw
cm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKICAgICB3aGls
ZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExh
eWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgYXV0byBw
bGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwotICAg
ICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwotICAgICAgICAgICAgaWYgKHBsYXRm
b3JtRXZlbnQpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvcGllZEV2ZW50ID0gcGxhdGZvcm1F
dmVudC0+Y29weVdpdGhEZWx0YXNBbmRWZWxvY2l0eShmaWx0ZXJlZFBsYXRmb3JtRGVsdGEud2lk
dGgoKSwgZmlsdGVyZWRQbGF0Zm9ybURlbHRhLmhlaWdodCgpLCBmaWx0ZXJlZFZlbG9jaXR5KTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0gYm94TGF5ZXItPmhhbmRsZVdo
ZWVsRXZlbnQoY29waWVkRXZlbnQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9IGRpZFNjcm9sbEluU2Nyb2xsYWJsZUFyZWEoKmJveExh
eWVyLCB3aGVlbEV2ZW50KTsKKyAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZCA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oYm94TGF5
ZXIpKSB7CisgICAgICAgICAgICAgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3hMYXllcik7CisgICAgICAgICAgICAgICAgaWYg
KHBsYXRmb3JtRXZlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb3BpZWRFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPmNvcHlXaXRoRGVsdGFzQW5kVmVsb2NpdHkoZmlsdGVyZWRQbGF0Zm9y
bURlbHRhLndpZHRoKCksIGZpbHRlcmVkUGxhdGZvcm1EZWx0YS5oZWlnaHQoKSwgZmlsdGVyZWRW
ZWxvY2l0eSk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ1dhc0hhbmRsZWQgPSBib3hM
YXllclNjcm9sbGFibGUtPmhhbmRsZVdoZWVsRXZlbnQoY29waWVkRXZlbnQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdXYXNIYW5kbGVkID0g
ZGlkU2Nyb2xsSW5TY3JvbGxhYmxlQXJlYSgqYm94TGF5ZXJTY3JvbGxhYmxlLCB3aGVlbEV2ZW50
KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHNjcm9sbGluZ1dhc0hhbmRsZWQp
IHsKICAgICAgICAgICAgICAgICBzdG9wRWxlbWVudCA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmVs
ZW1lbnQoKTsKQEAgLTE1NjksOSArMTU3MiwxMiBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFu
ZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAog
ICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaXRoIHJpZ2h0LWFsaWduZWQgdGV4dCBpbiBhIGJveCwgdGhlIHJlbmRl
cmVyIGhlcmUgaXMgdXN1YWxseSBhIFJlbmRlclRleHQsIHdoaWNoIHByZXZlbnRzIHNob3dpbmcg
dGhlIHJlc2l6ZSBjdXJzb3I6IHdlYmtpdC5vcmcvYi8yMTA5MzUuCiAgICAgICAgICAgICBpZiAo
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludElu
UmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBs
YXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhX
ZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcik7CisgICAgICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHNjcm9sbGFi
bGVMYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0Lmxv
Y2FsUG9pbnQoKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIApAQCAtMTgxMiwxMiArMTgxOCwxNSBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgcGxhdGZvcm1N
b3VzZQogCiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9jbGlja05vZGUtPnJlbmRlcmVyKCkg
PyBtX2NsaWNrTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSA6IG51bGxwdHI7CiAg
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KG1vdXNlRXZlbnQuaGl0VGVzdFJl
c3VsdCgpLmxvY2FsUG9pbnQoKSk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5pc1BvaW50SW5S
ZXNpemVDb250cm9sKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgIGxheWVyLT5zZXRJblJlc2l6ZU1v
ZGUodHJ1ZSk7Ci0gICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKLSAgICAgICAgbV9vZmZz
ZXRGcm9tUmVzaXplQ29ybmVyID0gbGF5ZXItPm9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7Ci0gICAgICAgIGludmFsaWRhdGVDbGljaygpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cik7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
bG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0SW5SZXNpemVN
b2RlKHRydWUpOworICAgICAgICAgICAgbV9yZXNpemVMYXllciA9IHNjcm9sbGFibGVMYXllcjsK
KyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciA9IHNjcm9sbGFibGVMYXllci0+
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihsb2NhbFBvaW50KTsKKyAgICAgICAgICAgIGludmFsaWRh
dGVDbGljaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0QmxpbmtpbmdTdXNwZW5kZWQodHJ1ZSk7
CkBAIC0xOTE4LDEyICsxOTI3LDEyIEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIH0KIAogICAgICAgICBh
dXRvKiBsYXllciA9IHJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwotICAgICAgICBpZiAoIWxh
eWVyKQorICAgICAgICBpZiAoIWxheWVyIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAg
ICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcjsKICAgICAgICAgfQogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNjE3OTA1ZTAxYjFkZGYwZDFlMGMxZDRl
ZWI4MzQ4ZTc5ZWFiYjJhMS4uODcxOWJhMDM2NTZiYTc4Nzg5NGIzNTVlMWU1MDM0NDVhMDllMjJk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC04Myw3ICs4Myw3IEBAIGNsYXNz
IFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFJl
bmRlckJveDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNz
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTsKIGNsYXNzIFJlbmRlcldpZGdldDsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsYmFyOwpAQCAtNTUwLDcgKzU1MCw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIG1fc3ZnUGFuIHsgZmFsc2UgfTsKIAotICAgIFJlbmRlckxheWVyKiBtX3Jl
c2l6ZUxheWVyIHsgbnVsbHB0ciB9OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZSogbV9yZXNp
emVMYXllciB7IG51bGxwdHIgfTsKIAogICAgIFJlZlB0cjxFbGVtZW50PiBtX2NhcHR1cmluZ01v
dXNlRXZlbnRzRWxlbWVudDsKICAgICBib29sIG1fZXZlbnRIYW5kbGVyV2lsbFJlc2V0Q2FwdHVy
aW5nTW91c2VFdmVudHNFbGVtZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAppbmRleCBmOWIxYTVkNzE1Yjc1NDcyOTQyODU4OWFlNTgxZTY5YzViN2RlMTFjLi5hNWMxZWQ0
ODY4Y2U2YzI5NzE2ZjVjZWFlNDJiMDM1ODUyMTEwZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCkBAIC03Nyw5ICs3Nyw5IEBACiAjaW5jbHVkZSAiUmVuZGVyRnVsbFNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1NjIs
NyArMjU2Miw5IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhh
c1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcq
IHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdp
ZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICAgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlclZpZXctPmxheWVyKCkpKTsKKyAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyVmlldy0+bGF5ZXIo
KSktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzg0MCwxMCArMzg0MiwxMCBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVW
aWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgYXV0byogbGF5ZXIgPSBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigp
OwotICAgIGlmICghbGF5ZXIpCisgICAgaWYgKCFsYXllciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiB9CiAK
IEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25z
dApAQCAtNDMxOCw4ICs0MzIwLDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAg
IHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChj
b250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJl
ciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNj
ZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXll
ci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4
dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRp
cnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgaWYgKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4ocm9vdExheWVyKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJvb3RMYXllcik7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJl
bmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVj
dCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCmluZGV4IDRkOGI3MmY4ZTViY2IwZTgzMmQzZWMzZGRjMmVlOTI5MmI0OWZlODYuLjUz
YzhiMjM2MzI4YTNiYjJmODdiMjRiMTE0NGYwYmM0ZGViMWYwMGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3
ICszOTQsMTEgQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3Vz
RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgYXV0byogZW5jbG9z
aW5nTGF5ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpOworICAg
ICAgICBBU1NFUlQoZW5jbG9zaW5nTGF5ZXIpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nTGF5ZXIpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KElu
dFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCA5YmI4ZTkyY2FhYzVjZjUzMmI3OWI5MGVlYWIzY2Yy
MTU0MGFmZjQzLi44MGY1NzlmOWY5YWRlOWY0NjMzODJlYjQxOTNhODFjMDFkMDcyNWQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTggQEAgdm9pZCBG
cmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25j
YXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byog
bGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigp
OworICAgIGlmICghbGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5
cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBh
dXRvIG9sZFNjcm9sbFR5cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
IAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CisgICAgc2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6
IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdl
b2xvY2F0aW9uUGVybWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KaW5kZXggYzA5MzBiNjM0OTVlNzE4MTU5OTFhNDA2YTRkNjY1YTI3YmE3NzE0Yi4u
NmMzN2FkNWQ1MzZkMjI0MDE3YjQyMjQ4YjY5Y2Q5MmUyN2Q3OTZmMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtNTIsNyArNTIsNyBAQAogI2ltcG9y
dCAiUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgi
CiAjaW1wb3J0ICJSYW5nZS5oIgotI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9y
dCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBAIC03ODIsNyArNzgy
LDEwIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVy
Qm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIo
KTsKKyAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSkpCisgICAg
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKTsK
KworICAgIHJldHVybiBudWxscHRyOwogfQogICAgIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGZp
bmRFbmNsb3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKENvbnRhaW5lck5vZGUqIG5vZGUsIGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaWdobGlnaHREYXRhLmNwcAppbmRleCBlNWE0N2I3MDc0ZGNjOTMxZGIwMDM3NzgzYTNlMjlh
ZmQ3ZmRkZTQzLi5iYjRiNzkwMTU3MDlhZjI0ODE2YTlkN2NlNjA0YTdiMmNlMmNhZTdmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0zNiw3ICszNiw3
IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtMjA5LDcgKzIwOSw4IEBAIHZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0U2VsZWN0aW9u
KGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrCiAKIHZvaWQg
SGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQogewotICAgIG1fcmVuZGVyVmlldy5sYXll
cigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBkb3duY2FzdDxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KG1fcmVuZGVyVmlldy5sYXllcigpKS0+cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpOwogICAgIHNldFNlbGVjdGlvbih7IH0sIEhpZ2hsaWdodERhdGE6OlJlcGFp
bnRNb2RlOjpOZXdNaW51c09sZCk7CiB9CiAKQEAgLTMxOSw4ICszMjAsMTAgQEAgdm9pZCBIaWdo
bGlnaHREYXRhOjphcHBseVNlbGVjdGlvbihjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9u
LCBSZXBhaW50TW9kZQogICAgICAgICBjdXJyZW50UmVuZGVyZXItPnNldFNlbGVjdGlvblN0YXRl
SWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKTsKICAgICB9CiAK
LSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAg
ICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7
CisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpIHsKKyAg
ICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX3JlbmRlclZp
ZXcubGF5ZXIoKSktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisgICAgfQogCiAg
ICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0
aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKICAgICAvLyBwdXQgdGhlbSBpbiB0
aGUgbmV3IG9iamVjdHMgbGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCmluZGV4IDZiNTNjYmE4NWM4ZTlkYzU5NzE1YjYzOGNhZTU3NWY4MGU0OGY5NTQuLmJkNWEy
NWZlNzg2MjdmMWIyZDFkNDI1OGNmOTUyM2Y5NWE4ZWQyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTgsNyArNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckZyYWdtZW50ZWRGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CkBAIC01NTMsNyArNTUzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9j
ayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dD
bGlwKCkpOwotICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCk7CisgICAgICAgIGlmIChibG9jay0+bGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGJsb2NrLT5sYXllcigpKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4oYmxvY2stPmxheWVyKCkpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBAIC01
ODQsOCArNTg1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0KCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5
ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQor
ICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT51cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkK
QEAgLTExMDksMTIgKzExMTEsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICBpZiAocHVz
aGVkQ2xpcCkKICAgICAgICAgcG9wQ29udGVudHNDbGlwKHBhaW50SW5mbywgcGhhc2UsIGFkanVz
dGVkUGFpbnRPZmZzZXQpOwogCisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBPdXIgc2Nyb2xs
YmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwgdGhlbSB0bywgc28gdGhhdCB0
aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdl
IHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdp
bGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhh
c2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6
OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCiAg
ICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
cGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWlu
dFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29u
dHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAgICBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5wYWludE92ZXJmbG93Q29udHJvbHMo
cGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQp
LCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2Nr
OjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCkBAIC0xNDY5LDE2ICsxNDc0LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPCiAKICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0c0JvdW5kcyA9IHNlbGVjdGlvbkdhcHMo
KnRoaXMsIHBhaW50T2Zmc2V0LCBMYXlvdXRTaXplKCksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQsIGNhY2hlLCAmcGFpbnRJbmZvKTsKICAgICAgICAgaWYgKCFnYXBSZWN0c0JvdW5kcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBlbmNsb3Np
bmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXIoKSAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKCkpKSB7CisgICAgICAgICAgICAgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihl
bmNsb3NpbmdMYXllcigpKTsKICAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3ZlQnko
LXBhaW50T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc0xheWVyKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2NhbEJvdW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAg
ICAgICAgICAgICAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShsb2NhbEJvdW5kcyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzID0gbG9jYWxUb0NvbnRhaW5lclF1YWQoRmxv
YXRSZWN0KGxvY2FsQm91bmRzKSwgJmxheWVyLT5yZW5kZXJlcigpKS5lbmNsb3NpbmdCb3VuZGlu
Z0JveCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShsYXllci0+
cmVuZGVyQm94KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBnYXBS
ZWN0c0JvdW5kcyA9IGxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChsb2NhbEJvdW5kcyks
ICZzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnJlbmRlcmVyKCkuaXNCb3go
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdhcFJlY3RzQm91bmRzLm1vdmVCeShzY3JvbGxh
YmxlTGF5ZXItPnJlbmRlckJveCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhn
YXBSZWN0c0JvdW5kcyk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5hZGRCbG9j
a1NlbGVjdGlvbkdhcHNCb3VuZHMoZ2FwUmVjdHNCb3VuZHMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMjAwMSw3ICsyMDA3LDEwIEBAIGJvb2wgUmVuZGVyQmxvY2s6Omlz
UG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91
bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0
ZWRPZmZzZXQpKSk7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+aGl0VGVzdE92ZXJmbG93Q29udHJv
bHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0
U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVG
b3JIaXRUZXN0KCkgY29uc3QKQEAgLTI0OTgsOSArMjUwNywxOCBAQCBpbnQgUmVuZGVyQmxvY2s6
OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExp
bmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhp
cyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgog
ICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhh
dmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAv
LyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFk
IHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIo
KSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUg
PyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIo
KSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCisKKyAgICAgICAgYm9vbCBoYXNN
YXJxdWVlID0gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBmYWxz
ZTsKKyAgICAgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gZmFsc2U7CisgICAgICAg
IGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpIHsKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBoYXNNYXJxdWVlID0gc2Nyb2xsYWJsZUxh
eWVyLT5tYXJxdWVlKCk7CisgICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3Jv
bGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxp
bmUgPSAoaGFzTWFycXVlZSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gaGFzVmVy
dGljYWxTY3JvbGxiYXIgOiBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgKGlzV3JpdGluZ01v
ZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKICAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGlu
ZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNl
bGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhp
YmxlQm94KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKaW5kZXggZTIxM2FhYzcxYTk0NDU4NzNlMjE2MDQxNjRlNDE0NDU4YjA2Y2E5MC4uZjEzMGU5
NGY2NTE4ZGQ2ZjNjZDQzMDUzMWNmN2RjYzZhZWI2MWRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCkBAIC0zNDksOCArMzQ5LDExIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBp
ZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8v
IEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVt
IHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5
ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1pbkxvZ2ljYWxX
aWR0aCA9IDA7CisgICAgICAgIGlmIChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIoKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCktPmlz
SG9yaXpvbnRhbCgpKQorICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAoaXM8UmVuZGVyVGFibGVDZWxsPigqdGhpcykpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNjEyMzc2YmFhZDYxYmQ2MmZh
M2NlZGE4ZGRhMmFhMjY0M2I3OTlkYi4uZmJlZDVhN2ZhY2I1NGI1NzAxZDBhODlmMGViYzkyZmMy
YTNhODIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTU4LDgg
KzU4LDggQEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CkBAIC0zMTksMTEgKzMxOSwxMiBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8g
SWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExl
ZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3
IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgotICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5
bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9s
bFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICBm
bG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2Nh
bGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24pOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1
ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01
NDIsOCArNTQzLDExIEBAIExheW91dFVuaXQgUmVuZGVyQm94OjpjbGllbnRIZWlnaHQoKSBjb25z
dAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkpCi0gICAgICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxX
aWR0aCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbFdpZHRo
KCk7CisgICAgfQorCiAgICAgLy8gRm9yIG9iamVjdHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0
aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdy
aXRpbmcgbW9kZXMuCiAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7
CkBAIC01NTUsOCArNTU5LDExIEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbFdpZHRoKCkgY29uc3QK
IAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAoaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbEhl
aWdodCgpOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpKSB7CisgICAgICAg
IEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbEhlaWdo
dCgpOworICAgIH0KKwogICAgIC8vIEZvciBvYmplY3RzIHdpdGggdmlzaWJsZSBvdmVyZmxvdywg
dGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIHdvcmsgcmlnaHQgd2l0aCB3
cml0aW5nIG1vZGVzLgogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNp
emUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCkBAIC01NjUsMTIgKzU3Miwy
MiBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94
OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5zY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9s
bFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSkgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSk7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
LT5zY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogdm9p
ZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVlZGVkKCkKQEAg
LTU3OSw3ICs1OTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3Jl
TGF5b3V0SWZOZWVkZWQoKQogICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KDBfbHUpOwogfQogCi1z
dGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKK3N0
YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiBs
YXllcikKIHsKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCkBAIC01ODksMjYgKzYwNiwyOSBA
QCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikK
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1vbml0
b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVy
ID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxlTGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5z
Y3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3AsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQogewotICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCisgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldHVwV2hlZWxFdmVudE1v
bml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBhdXRvJiBzY3JvbGxhYmxlTGF5
ZXIgPSAqZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKHNjcm9sbGFibGVMYXllcik7CisgICAgc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7Ci0gICAgaWYgKCFoYXNPdmVyZmxv
d0NsaXAoKSB8fCAhbGF5ZXIoKSkKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXll
cigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQogICAgICAgICByZXR1
cm47Ci0gICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gKmRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIoKSk7CisgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihzY3JvbGxhYmxl
TGF5ZXIpOworICAgIHNjcm9sbGFibGVMYXllci5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFi
c29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODA4LDI0ICs4MjgsMzQgQEAgYm9vbCBSZW5kZXJC
b3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBm
cmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYm
ICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAgICAgICYmIChzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBP
dmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
c3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGJvb2wgUmVuZGVyQm94OjppbmNsdWRlSG9y
aXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCi0gICAg
ICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byk7CisgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSktPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
IHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG87CiB9CiAKIGludCBSZW5k
ZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBpbmNs
dWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCkgOiAwOworICAgIGlmIChpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgJiYgbGF5
ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOworICAgIHJldHVybiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250
YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkg
OiAwOworICAgIGlmIChpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSAmJiBsYXllcigp
ICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIHJldHVybiBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBAIC04MzQsMTIgKzg2NCwxNCBAQCBpbnQg
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAgICAg
ICByZXR1cm4gMDsKIAogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHls
ZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3Jv
bGxiYXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKTsKKyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAg
ICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NF
UlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAg
ICBBU1NFUlQobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpKTsK
KyAgICAgICAgQVNTRVJUKGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkt
Pmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NDgsMTUgKzg4MCwxNCBAQCBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRl
ckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hM
YXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKSB7Ci0gICAgICAgIGlmIChzdG9wRWxlbWVudCkKLSAgICAgICAgICAgICpzdG9wRWxlbWVu
dCA9IGVsZW1lbnQoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byogYm94TGF5ZXIgPSAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKCkpKSA/IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIoKSkgOiBudWxscHRyOworICAgIGlmICghYm94TGF5ZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWJveExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoc3RvcEVsZW1lbnQp
CisgICAgICAgICpzdG9wRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0
b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVu
dEFic29sdXRlUG9pbnQpCkBAIC04NzgsMTUgKzkwOSwxNCBAQCBib29sIFJlbmRlckJveDo6c2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LAogYm9vbCBSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlv
biBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBs
aWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7CiAgICAgYm9vbCBzY3JvbGxlZCA9IGZhbHNl
OwotICAgIAotICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKLSAgICBpZiAobCkgeworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IChsYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4obGF5ZXIoKSkpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KSA6IG51bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgewogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgICAgICAvLyBPbiBNYWMgb25seSB3ZSByZXNldCB0aGUgaW5saW5lIGRpcmVjdGlv
biBwb3NpdGlvbiB3aGVuIGRvaW5nIGEgZG9jdW1lbnQgc2Nyb2xsIChlLmcuLCBoaXR0aW5nIEhv
bWUvRW5kKS4KICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1lbnQpCi0g
ICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJ
bmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlw
bGllcik7CisgICAgICAgICAgICBzY3JvbGxlZCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBT
Y3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBpZiAobC0+c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAg
ICAgICAgICAgICBzY3JvbGxlZCA9IHRydWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xs
ZWQpIHsKQEAgLTg5OSw5ICs5MjksOSBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIGlm
IChzdG9wRWxlbWVudCAmJiAqc3RvcEVsZW1lbnQgJiYgKnN0b3BFbGVtZW50ID09IGVsZW1lbnQo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZW5kZXJCbG9jayogYiA9IGNvbnRhaW5p
bmdCbG9jaygpOwotICAgIGlmIChiICYmICFiLT5pc1JlbmRlclZpZXcoKSkKLSAgICAgICAgcmV0
dXJuIGItPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcEVsZW1lbnQpOworICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygp
OworICAgIGlmIChibG9jayAmJiAhYmxvY2stPmlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1
cm4gYmxvY2stPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtOTMyLDcgKzk2Miwx
MSBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0
CiAKIGJvb2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KGxheWVyKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbikKQEAgLTk5MSw4ICsxMDI1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZp
bmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJv
eDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkp
Ci0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChs
YXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCisgICAgICAgIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnBhblNjcm9sbEZyb21Qb2lu
dChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdApAQCAtMTAxNywxMSArMTA1MSw5IEBAIGJvb2wgUmVuZGVyQm94OjpuZWVkc1ByZWZl
cnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdAogCiBTY3JvbGxQb3NpdGlvbiBSZW5kZXJC
b3g6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
KQorICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkgfHwgIWlzPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSkpCiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKLQotICAg
IEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24o
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKS0+
c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVG
b3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU2OSw3ICsxNjAxLDcgQEAgYm9vbCBSZW5kZXJC
b3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zm
c2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICho
YXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKKyAg
ICBpZiAobGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSktPnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIGZvcmVn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFja2dyb3VuZE9i
c2N1cmF0aW9uVGVzdE1heERlcHRoKTsKQEAgLTE4ODgsMTIgKzE5MjAsMTMgQEAgTGF5b3V0UmVj
dCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9u
LCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExh
eW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3Jk
ZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2
ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxh
eWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNs
aXBSZWN0LmNvbnRyYWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5
KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKLSAgICB9
CisgICAgaWYgKCFsYXllcigpIHx8ICFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkp
KQorICAgICAgICByZXR1cm4gY2xpcFJlY3Q7CiAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKCkpOworICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIGNsaXBSZWN0
Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IDApOworICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgcmV0dXJuIGNsaXBSZWN0OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA1
ZGRmYzMxMTg0N2JhZmQ5M2YzMzk0OGMxMTI1YmVlZThjMjgzOTg3Li4wOGM0Y2YxYjhmMzgyNDcx
NzdiZDliZjhmODBjZjQxZGZlNDAwNmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTQ4LDkgKzQ4LDkgQEAKICNpbmNsdWRl
ICJSZW5kZXJGbGV4aWJsZUJveC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00OTAsOCArNDkwLDggQEAgdm9pZCBSZW5kZXJC
b3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9z
aXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5j
ZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwK
ICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGlu
Z0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJl
bGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWlu
aW5nQmxvY2sgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyKSkKKyAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBp
bmdMYXllciktPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmlu
Z0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAg
LTUwOCw4ICs1MDgsOCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5
UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3Np
bmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0
KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5j
bG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRk
aW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5p
bmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAg
ICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jayAmJiBpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpKQorICAgICAgICAgICAg
c3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdDbGlwcGluZ0xheWVyKS0+c2Nyb2xsT2Zmc2V0
KCk7CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMg
bm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rv
ci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7
CkBAIC01NDgsMTEgKzU0OCwxMyBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRS
ZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFp
bmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0g
ICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xs
T2Zmc2V0OworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdD
bGlwcGluZ0xheWVyKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xpcHBpbmdMYXllciktPnNjcm9sbE9mZnNldCgp
OwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNs
b3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9z
aW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVu
Y2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oZW5jbG9zaW5nQ2xp
cHBpbmdCb3gubGF5ZXIoKSktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQu
eSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpAQCAtODQxLDExICs4NDMs
MTkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY28KICAgICAgICAgLy8gQ2xpcCB0byB0aGUgb3Zl
cmZsb3cgYXJlYS4KICAgICAgICAgYXV0byYgdGhpc0JveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KnRoaXMpOwogICAgICAgICBjb250ZXh0LmNsaXAodGhpc0JveC5vdmVyZmxvd0NsaXBSZWN0KHJl
Y3QubG9jYXRpb24oKSkpOwotICAgICAgICAKKworICAgICAgICBpbnQgc2Nyb2xsV2lkdGggPSAw
OworICAgICAgICBpbnQgc2Nyb2xsSGVpZ2h0ID0gMDsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYg
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKSkgeworICAgICAgICAgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigp
KTsKKyAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0
aCgpOworICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxI
ZWlnaHQoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIEFkanVzdCB0aGUgcGFpbnQgcmVjdCB0
byByZWZsZWN0IGEgc2Nyb2xsZWQgY29udGVudCBib3ggd2l0aCBib3JkZXJzIGF0IHRoZSBlbmRz
LgogICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5tb3ZlQnkoLXRoaXNCb3guc2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNldFdpZHRoKGJMZWZ0ICsgbGF5ZXIo
KS0+c2Nyb2xsV2lkdGgoKSArIGJSaWdodCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0LnNl
dEhlaWdodChib3JkZXJUb3AoKSArIGxheWVyKCktPnNjcm9sbEhlaWdodCgpICsgYm9yZGVyQm90
dG9tKCkpOworICAgICAgICBzY3JvbGxlZFBhaW50UmVjdC5zZXRXaWR0aChiTGVmdCArIHNjcm9s
bFdpZHRoICsgYlJpZ2h0KTsKKyAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJv
cmRlclRvcCgpICsgc2Nyb2xsSGVpZ2h0ICsgYm9yZGVyQm90dG9tKCkpOwogICAgIH0KICAgICAK
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIGJhY2tncm91bmRDbGlwU3RhdGVTYXZlcihj
b250ZXh0LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApp
bmRleCA5OWU4MjRkMTM1NzA2MzllM2U0ZDQ0M2M5NjVmMTQ0ZTlkNDhmNDQ2Li43MDM3MzhlMDEy
MTM2ZDVlZDgzZTI1MmE2OTI0NjZkYTQ0NmM0ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKQEAgLTI4NywxNiArMjg3LDExIEBAIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDbGlwUmVjdHMmIGNsaXBSZWN0cykK
IAogI2VuZGlmCiAKLXN0YXRpYyBTY3JvbGxpbmdTY29wZSBuZXh0U2Nyb2xsaW5nU2NvcGUoKQot
ewotICAgIHN0YXRpYyBTY3JvbGxpbmdTY29wZSBjdXJyZW50U2NvcGUgPSAwOwotICAgIHJldHVy
biArK2N1cnJlbnRTY29wZTsKLX0KLQogREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihSZW5kZXJMYXllcik7CiAKLVJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCi0gICAgOiBtX2lzUmVuZGVy
Vmlld0xheWVyKHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdC5pc1JlbmRlclZpZXcoKSkKK1JlbmRl
ckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVy
TW9kZWxPYmplY3QsIFJlbmRlckxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlKQorICAgIDogbV9s
YXllclR5cGUobGF5ZXJUeXBlKQorICAgICwgbV9pc1JlbmRlclZpZXdMYXllcihyZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QuaXNSZW5kZXJWaWV3KCkpCiAgICAgLCBtX2ZvcmNlZFN0YWNraW5nQ29u
dGV4dChyZW5kZXJlckxheWVyTW9kZWxPYmplY3QuaXNNZWRpYSgpKQogICAgICwgbV9pc05vcm1h
bEZsb3dPbmx5KGZhbHNlKQogICAgICwgbV9pc0NTU1N0YWNraW5nQ29udGV4dChmYWxzZSkKQEAg
LTMwNCwxOSArMjk5LDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1v
ZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX3pPcmRlckxpc3Rz
RGlydHkoZmFsc2UpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1f
aGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQotICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2Up
Ci0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVy
RGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQog
ICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZs
b3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFp
bnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFz
VmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGly
dHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3Rp
bmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBt
XzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMzMCwxNSArMzIx
LDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChm
YWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0
Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAg
ICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2Vu
ZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkK
LSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwg
bV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzUzLDUzICszMzUs
NDIgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJl
Tm9ybWFsRmxvd09ubHkoKSk7CiAgICAgc2V0SXNDU1NTdGFja2luZ0NvbnRleHQoc2hvdWxkQmVD
U1NTdGFja2luZ0NvbnRleHQoKSk7CiAKLSAgICBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgPSBzaG91
bGRCZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJWaWV3TGF5ZXIoKSkK
LSAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9
IG5leHRTY3JvbGxpbmdTY29wZSgpOworICAgIC8vIG1faXNTZWxmUGFpbnRpbmdMYXllciBpcyBp
bml0aWFsaXplZCBpbiBSZW5kZXJMYXllclNWRy9IVE1MLCBldmVuIHRob3VnaAorICAgIC8vIGl0
IGJlbG9uZ3MgdG8gUmVuZGVyTGF5ZXIgLS0gd2UgY2Fubm90IGNhbGwKKyAgICAvLyAibV9pc1Nl
bGZQYWludGluZ0xheWVyID0gc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpOyIKKyAgICAvLyBo
ZXJlLCBpbiB0aGUgY29uc3RydWN0b3IgLS0gc2luY2UgdGhlIFJlbmRlckxheWVyU1ZHL0hUTUwg
Y2xhc3NlcyBhcmVuJ3QgaW5pdGlhbGl6ZWQgeWV0LgogCiAgICAgaWYgKCFyZW5kZXJlcigpLmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxz
ZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNp
YmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUg
YW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFs
dWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50
LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0
aW9uLmlzWmVybygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVu
ZGVyTGF5ZXIoKQogewotICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKLSAgICAgICAgcmVuZGVyZXIo
KS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7Ci0KLSAgICBB
U1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
Ci0jZW5kaWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgp
KQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xs
YWJsZUFyZWEoKnRoaXMpOworICAgIGRlc3Ryb3koKTsKK30KIAordm9pZCBSZW5kZXJMYXllcjo6
ZGVzdHJveSgpCit7CisgICAgLy8gUmVseWluZyBvbiBDKysgYnVpbHRpbiBkZXN0cnVjdGlvbiBv
cmRlciBpcyBkYW5nZXJvdXMgZm9yIFJlbmRlckxheWVyL1JlbmRlckxheWVyU2Nyb2xsYWJsZSwK
KyAgICAvLyBzaW5jZSBzb21lIGZ1bmN0aW9uIGNhbGxzIGludm9rZWQgYnkgdGhlIFJlbmRlckxh
eWVyIGRlc3RydWN0b3IsIG9wZXJhdGUgb24gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLgorICAgIC8v
CisgICAgLy8gRm9yIGV4YW1wbGUsIHRoZSBjYWxsIHRvIGNsZWFyQmFja2luZygpIGJlbG93LCB3
aWxsIGludm9rZSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0b3IsCisgICAgLy8gd2hp
Y2ggY2FsbHMgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KCkuIFRoaXMgaW4gdHVybnMgdHJpZXMgdG8gY2FzdAorICAgIC8vIHRoZSAnbV9vd25pbmdMYXll
cicgZnJvbSBhIFJlbmRlckxheWVyIC0+IFJlbmRlckxheWVyU2Nyb2xsYWJsZSwgdG8gZ2V0IGFj
Y2VzcyB0byB0aGUgU2Nyb2xsYWJsZUFyZWEuCisgICAgLy8KKyAgICAvLyBJZiB3ZSBsZXQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlIGRlc3RydWN0IGl0c2VsZiwgYmVmb3JlIHRoZSAoaW1wbGljaXQp
IGNhbGwgb2YgdGhlIFJlbmRlckxheWVyIGRlc3RydWN0b3IsCisgICAgLy8gaXQgd2lsbCBjcmFz
aC4gVGhlIGZpeCBpcyB0byBtb3ZlIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGludG8gYSBk
ZWRpY2F0ZWQgZGVzdHJveSgpIGZ1bmN0aW9uCisgICAgLy8gYW5kIGNhbGwgdGhhdCBkZXN0cm95
KCkgZnVuY3Rpb24gZGlyZWN0bHkgZnJvbSB0aGUgUmVuZGVyTGF5ZXJCYWNraW5nIGRlc3RydWN0
b3IuIFRoaXMgd2F5IHRoZQorICAgIC8vIFNjcm9sbGFibGVBcmVhIG9iamVjdCByZW1haW5zIHZh
bGlkIGZvciB0aGUgd2hvbGUgc2NvcGUgb2YgdGhlIGRlc3RydWN0b3IgLT4gcHJvYmxlbSBzb2x2
ZWQuCisgICAgLy8KKyAgICAvLyBTaW5jZSBhbGwgZnVuY3Rpb24gY2FsbHMgaW52b2tlZCBieSB0
aGUgUmVuZGVyTGF5ZXIgZGVzdHJ1Y3RvciwgYXJlIHBvdGVudGlhbGx5IGFmZmVjdGVkCisgICAg
Ly8gdGhlIHNhZmUgc29sdXRpb24gaXMgdG8gc2ltcGx5IGludm9rZSBkZXN0cm95KCkgZnJvbSBS
ZW5kZXJMYXllclNjcm9sbGFibGUgZGVzdHJ1Y3Rvci4KKyAgICAvLyBUaGUgbmV4dCBjYWxsIHRv
IGRlc3Ryb3koKSBmcm9tIHRoZSBSZW5kZXJMYXllciBkZXN0cnVjdG9yIGlzIHRoZW4gYSBuby1v
cCAtIGFzIGRlc2lyZWQuCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVm
bGVjdGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIo
KTsKLQogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3Zp
ZGVkQmFja2luZygpKSB7CkBAIC05MzIsMTAgKzkwMyw0OSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUs
IGJvbwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zKCZnZW9tZXRyeU1hcCwgdXBkYXRlTGF5ZXJQ
b3NpdGlvbkZsYWdzKGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBkaWRGdWxsUmVwYWludCkpOwogfQog
CitzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChs
YXllci5sYXllclR5cGUoKSkgeworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3Rh
dGljOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpT
Y3JvbGxhYmxlOgorICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVy
KS5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXllcihSZW5kZXJM
YXllciYgbGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCkKK3sKKyAgICBzd2l0
Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBl
OjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5
cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpLnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhXVEY6Om51bGxvcHQsIGdlb21ldHJ5TWFw
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkgewor
ICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1cm47
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS51cGRhdGVNYXJxdWVlKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAq
IGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykK
IHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uSWZOZWVkZWRGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMpOwogCiAgICAgaWYgKGdlb21ldHJ5
TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CkBAIC05NDMsMTggKzk1Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAg
ICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJD
bGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKLSAgICAgICAg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKLSAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQotICAg
ICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5
TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogSXQgbG9va3Mgc3VzcGljaW91cyB0byBjYWxsIGNvbnZlcnRUb0xh
eWVyQ29vcmRzIGhlcmUKLSAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3Rv
ciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCi0gICAgICAgICAgICBvZmZzZXRG
cm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwotICAgICAgICB9Ci0gICAgICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkp
OwotICAgIH0KLQorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0ZvclNjcm9sbGFibGVMYXll
cigqdGhpcywgZ2VvbWV0cnlNYXApOwogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFn
cygpOwogCiAgICAgaWYgKGZsYWdzICYgVXBkYXRlUGFnaW5hdGlvbikKQEAgLTEwMjksMTMgKzEw
MjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9t
ZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBj
aGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8u
Ci0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1
c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAg
ICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAg
ICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9Cisg
ICAgdXBkYXRlTWFycXVlZUZvclNjcm9sbGFibGVMYXllcigqdGhpcyk7CiAKICAgICBpZiAocmVu
ZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAgICAgICBi
b29sIGludGVyc2VjdHNWaWV3cG9ydCA9IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50ZXJzZWN0
c1ZpZXdwb3J0KCp0aGlzKTsKQEAgLTExMTUsOTIgKzExMDgsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlcGFpbnRSZWN0cygpCiAgICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRMYXlvdXRS
ZWN0cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKQotewotICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpOwotCi0gICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21ldHJ5TWFw
IGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKQotICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2Vz
dG9yKHBhcmVudCgpLCBudWxscHRyKTsKLQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8g
bm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwotICAgIC8v
IGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhh
c1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxGbGFnPiBmbGFncykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUg
bmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCi0gICAgLy8gdGhl
c2UgZmxhZ3MgYXJlIHN0aWxsIGRpcnR5LiBVcGRhdGUgc28gdGhhdCB0aGUgY2hlY2sgYmVsb3cg
aXMgdmFsaWQuCi0gICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7Ci0KLSAgICAv
LyBJZiB3ZSBoYXZlIG5vIHZpc2libGUgY29udGVudCBhbmQgbm8gdmlzaWJsZSBkZXNjZW5kYW50
cywgdGhlcmUgaXMgbm8gcG9pbnQgcmVjb21wdXRpbmcKLSAgICAvLyBvdXIgcmVjdGFuZ2xlcyBh
cyB0aGV5IHdpbGwgYmUgZW1wdHkuIElmIG91ciB2aXNpYmlsaXR5IGNoYW5nZXMsIHdlIGFyZSBl
eHBlY3RlZCB0bwotICAgIC8vIHJlY29tcHV0ZSBhbGwgb3VyIHBvc2l0aW9ucyBhbnl3YXkuCi0g
ICAgaWYgKCFtX2hhc1Zpc2libGVEZXNjZW5kYW50ICYmICFtX2hhc1Zpc2libGVDb250ZW50KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHBvc2l0aW9uQ2hhbmdlZCA9IHVwZGF0ZUxheWVy
UG9zaXRpb24oKTsKLSAgICBpZiAocG9zaXRpb25DaGFuZ2VkKQotICAgICAgICBmbGFncy5hZGQo
SGFzQ2hhbmdlZEFuY2VzdG9yKTsKLQotICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEhhc0No
YW5nZWRBbmNlc3RvciwgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciwgSXNPdmVy
Zmxvd1Njcm9sbCB9KSkKLSAgICAgICAgY2xlYXJDbGlwUmVjdHMoKTsKLQotICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCi0gICAgICAg
IGZsYWdzLmFkZChIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yKTsKLQotICAgIGlm
IChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICBmbGFncy5hZGQoSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCk7Ci0gICAgCi0gICAgYm9vbCBzaG91bGRDb21wdXRl
UmVwYWludFJlY3RzID0gKGZsYWdzLmNvbnRhaW5zKEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVk
QW5jZXN0b3IpIHx8IGZsYWdzLmNvbnRhaW5zQWxsKHsgSXNPdmVyZmxvd1Njcm9sbCwgSGFzU2Vl
bkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCB9KSkgJiYgaXNTZWxmUGFpbnRpbmdMYXllcigpOwot
ICAgIGJvb2wgaXNWaXN1YWxseUVtcHR5ID0gIWlzVmlzdWFsbHlOb25FbXB0eSgpOwotICAgIGJv
b2wgc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzID0gZ2VvbWV0cnlNYXAgJiYgKChzaG91bGRDb21w
dXRlUmVwYWludFJlY3RzICYmICFpc1Zpc3VhbGx5RW1wdHkpIHx8IGZpcnN0Q2hpbGQoKSk7Ci0g
ICAgaWYgKHNob3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnB1
c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwotCi0gICAgaWYgKHNob3VsZENv
bXB1dGVSZXBhaW50UmVjdHMpIHsKLSAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcsIHdlIGRvbid0
IGNvbXB1dGUgcmVwYWludCByZWN0cyBmb3IgdmlzdWFsbHkgbm9uLWVtcHR5IGxheWVycy4KLSAg
ICAgICAgaWYgKGlzVmlzdWFsbHlFbXB0eSkKLSAgICAgICAgICAgIGNsZWFyUmVwYWludFJlY3Rz
KCk7Ci0gICAgICAgIGVsc2UgLy8gRklYTUU6IFdlIGNvdWxkIHRyYWNrIHRoZSByZXBhaW50IGNv
bnRhaW5lciBhcyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUuCi0gICAgICAgICAgICBjb21wdXRlUmVw
YWludFJlY3RzKHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpLCBnZW9tZXRyeU1hcCk7
Ci0gICAgfSBlbHNlIGlmICghcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucGxhdGZvcm1X
aWRnZXQoKSkgewotICAgICAgICAvLyBXaGVuIFNjcm9sbFZpZXcncyBtX3BhaW50c0VudGlyZUNv
bnRlbnRzIGZsYWcgZmxpcHMgZHVlIHRvIGxheWVyIGJhY2tpbmcgY2hhbmdlcywgdGhlIHJlcGFp
bnQgYXJlYSB0cmFuc2l0aW9ucyBmcm9tCi0gICAgICAgIC8vIHZpc3VhbCB0byBsYXlvdXQgb3Zl
cmZsb3cuIFdoZW4gdGhpcyBoYXBwZW5zIHRoZSBjYWNoZWQgcmVwYWludCByZWN0cyBiZWNvbWUg
aW52YWxpZCBhbmQgdGhleSBuZWVkIHRvIGJlIHJlY29tcHV0ZWQgKHNlZSB3ZWJraXQub3JnL2Iv
MTg4MTIxKS4KLSAgICAgICAgLy8gQ2hlY2sgdGhhdCBvdXIgY2FjaGVkIHJlY3RzIGFyZSBjb3Jy
ZWN0LgotICAgICAgICBBU1NFUlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
fHwgcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0ID09IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCkpKTsKLSAgICAgICAgQVNTRVJUKCFyZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlv
dXRSZWN0cygpIHx8IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9vdXRsaW5lQm94
ID09IHJlbmRlcmVyKCkub3V0bGluZUJvdW5kc0ZvclJlcGFpbnQocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChSZW5kZXJMYXllciogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChnZW9tZXRyeU1h
cCwgZmxhZ3MpOwotCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIG91ciByZWZsZWN0aW9uIGFzIHNj
cm9sbGluZyBpcyBhIHRyYW5zbGF0aW9uIHdoaWNoIGRvZXMgbm90IGNoYW5nZSB0aGUgc2l6ZSgp
Ci0gICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBh
aW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCi0gICAgLy8gdXBk
YXRlZCBhYm92ZS4KLQotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFB1
c2hBbmRQb3BNYXBwaW5ncykKLSAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSk7Ci0KLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkubWFya2VycygpLmlu
dmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKTsKLX0KLQogI2lmIEVOQUJMRShDU1NfQ09NUE9T
SVRJTkcpCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUJsZW5kTW9kZSgpCkBAIC0xNjQ2LDYg
KzE1NTMsMTkgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnRTdGF0dXMoKQogICAgIHJldHVybiBoYXMzRFRyYW5zZm9ybSgpOwogfQogCitzdGF0aWMgaW5s
aW5lIHZvaWQgc3VidHJhY3RTY3JvbGxPZmZzZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JT
Y3JvbGxhYmxlTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyLCBMYXlvdXRQb2ludCYgbG9jYWxQb2lu
dCkKK3sKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5kZXJM
YXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbmRl
ckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGU6CisgICAgICAgIGRvd25jYXN0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZT4obGF5ZXIpLnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xs
aW5nU2NvcGVzKGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzKQogewogICAg
IExheW91dFBvaW50IGxvY2FsUG9pbnQ7CkBAIC0xNjkxLDM0ICsxNjExLDkgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlv
bnNGbGFnPiogZmxhZ3MKICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gZG93bmNhc3Q8UmVuZGVy
VGFibGVSb3c+KCphbmNlc3RvcikudG9wTGVmdExvY2F0aW9uT2Zmc2V0KCk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgCi0gICAgLy8gU3VidHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQu
Ci0gICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7Ci0gICAgaWYgKHJlbmRlcmVyKCku
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdB
bmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKLSAg
ICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xv
c2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0
aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBs
b2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlv
bigpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
LmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVu
dC0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNh
c3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJ
bkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAg
QVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7Ci0gICAg
ICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7Ci0gICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgp
KSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3Jv
bGxQb3NpdGlvbigpKTsKLQotICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKSk7Ci0gICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXll
ci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwotICAgIH0KIAotICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2Nv
cGUpCi0gICAgICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5n
U2NvcGUoKTsKLSAgICB9IGVsc2UgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94U2Nyb2xsaW5nU2NvcGUpCi0gICAgICAgIG1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSA9IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgLy8gU3Vi
dHJhY3Qgb3VyIHBhcmVudCdzIHNjcm9sbCBvZmZzZXQuCisgICAgc3VidHJhY3RTY3JvbGxPZmZz
ZXRBbmRVcGRhdGVTY3JvbGxpbmdTY29wZXNGb3JTY3JvbGxhYmxlTGF5ZXIoKnRoaXMsIGxvY2Fs
UG9pbnQpOwogCiAgICAgYm9vbCBwb3NpdGlvbk9yT2Zmc2V0Q2hhbmdlZCA9IGZhbHNlOwogICAg
IGlmIChyZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpKSB7CkBAIC0xODQwLDg2ICsxNzM1
LDI4IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllcikKLXsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7Ci0gICAgaWYgKCFvd25lckVsZW1lbnQpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byogb3duZXJSZW5kZXJlciA9IG93bmVyRWxlbWVudC0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoIW93bmVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIG93bmVyUmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7Ci19Ci0K
LXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRh
cmllcykKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7
Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkpCisgICAgaWYgKGF1dG8qIGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJ
bkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCiAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAg
IGlmIChjcm9zc0ZyYW1lQm91bmRhcmllcyA9PSBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIobGF5ZXIpOwotfQotCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKLXsKLSAgICBSZW5kZXJUcmVlTXV0
YXRpb25EaXNhbGxvd2VkU2NvcGUgcmVuZGVyVHJlZU11dGF0aW9uRGlzYWxsb3dlZFNjb3BlOwot
Ci0gICAgYXV0byBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlID0gW10oY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKSB7Ci0gICAgICAgIHJldHVybiBpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkp
ICYmIGRvd25jYXN0PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkuY2FuQmVTY3JvbGxlZEFu
ZEhhc1Njcm9sbGFibGVBcmVhKCk7Ci0gICAgfTsKLQotICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0
aGlzKSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKLSAg
ICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpKSB7Ci0gICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5ZXIp
KQotICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVG
aXhlZCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdT
Y3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdAogewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7
Ci0jZW5kaWYKKyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CisgICAgaWYgKCFvd25lckVsZW1lbnQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIGF1dG8qIG93bmVyUmVuZGVyZXIg
PSBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFvd25lclJlbmRlcmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotYm9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3Jv
bGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2lu
Z1RyYW5zZm9ybWVkQW5jZXN0b3IoKSBjb25zdApAQCAtMjQ0Nyw0ODMgKzIyODQsMTI4IEBAIExh
eW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXll
ciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9M
YXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5z
KSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdAorc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwo
SFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVW
aWV3KQogewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxp
dHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdz
KCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlz
aWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5H
X1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJl
bmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQorICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgorICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKLXsKLSAgICAvLyBJZiB3ZSBoYXZlIGFjY2Vs
ZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9m
IFdlYktpdC4KLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAg
IC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQgc2Nyb2xscyBz
aG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCisgICAgaWYgKGZyYW1lVmlldy53YXNTY3JvbGxl
ZEJ5VXNlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQotewotICAgIGlm
ICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICByZW5kZXJlcigpLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cisg
ICAgLy8gRm9yYmlkIGF1dG9zY3JvbGxzIHdoZW4gc2Nyb2xsYmFycyBhcmUgb2ZmLCBidXQgcGVy
bWl0cyBvdGhlciBwcm9ncmFtbWF0aWMgc2Nyb2xscywKKyAgICAvLyBsaWtlIG5hdmlnYXRpb24g
dG8gYW4gYW5jaG9yLgorICAgIHJldHVybiAhZnJhbWVWaWV3LmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3N0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxs
b3dlZEZvclNjcm9sbGFibGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKCFyZW5kZXJlcigpLmVsZW1lbnQoKSB8
fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCi0gICAgICAg
IHJldHVybjsKKyAgICBzd2l0Y2ggKGxheWVyLmxheWVyVHlwZSgpKSB7CisgICAgY2FzZSBSZW5k
ZXJMYXllcjo6TGF5ZXJUeXBlOjpTdGF0aWM6CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgorICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuc2Nyb2xsUmVjdFRv
VmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVk
LCBvcHRpb25zKTsKKyAgICB9CiAKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91
Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9Ci0jZW5kaWYgLy8gRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIg
d2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRl
ZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KKyAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIkxheWVyICIgPDwgdGhpcyA8PCAiIHNjcm9sbFJl
Y3RUb1Zpc2libGUgIiA8PCBhYnNvbHV0ZVJlY3QpOwogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0Fz
eW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3Jk
aW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQorICAgIExheW91dFJlY3QgbmV3UmVj
dCA9IGFic29sdXRlUmVjdDsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBib29sIGF1
dG9zY3JvbGxOb3RJblByb2dyZXNzID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNj
cm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlv
biBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVm
b3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBj
b25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Ny
b2xsUmVzdWx0ID0gc2Nyb2xsUmVjdFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZEZv
clNjcm9sbGFibGVMYXllcigqdGhpcywgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9u
cyk7CisgICAgaWYgKHNjcm9sbFJlc3VsdCkKKyAgICAgICAgbmV3UmVjdCA9ICpzY3JvbGxSZXN1
bHQ7CisgICAgZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CisgICAgICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVu
dCgpOwogCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVk
dWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEg
PSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJs
ZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0x
KQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRh
ICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKyAgICAg
ICAgaWYgKG93bmVyRWxlbWVudCAmJiBvd25lckVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlID0gbnVsbHB0cjsK
IAotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQorICAgICAgICAgICAgaWYgKGlzPEhUTUxG
cmFtZUVsZW1lbnRCYXNlPigqb3duZXJFbGVtZW50KSkKKyAgICAgICAgICAgICAgICBmcmFtZUVs
ZW1lbnRCYXNlID0gZG93bmNhc3Q8SFRNTEZyYW1lRWxlbWVudEJhc2U+KG93bmVyRWxlbWVudCk7
CiAKLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVs
dGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KKyAg
ICAgICAgICAgIGlmIChmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKGZyYW1lRWxlbWVu
dEJhc2UsIGZyYW1lVmlldykpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlv
biBmaXJlcyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRl
c3Ryb3llZC4KKyAgICAgICAgICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRo
cmVhZCBzY3JpcHREaXNhbGxvd2VkU2NvcGU7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9s
bEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVj
ayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4g
V2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNv
aGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBp
ZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxh
c3RLbm93bk1vdXNlUG9zaXRpb247CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3QgZXhwb3Nl
UmVjdCA9IGdldFJlY3RUb0V4cG9zZSh2aWV3UmVjdCwgYWJzb2x1dGVSZWN0LCBpbnNpZGVGaXhl
ZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisgICAgICAgICAgICAgICAg
SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRp
b24oKSkpOworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0
c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdlLgorICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBv
aW50KGZyYW1lVmlldy5jb250ZW50c1NpemUoKSkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Cisg
ICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDUwNTkKKyAgICAgICAgICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFu
aW1hdGVkU2Nyb2xsOjpObzsKKyAgICAgICAgICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJv
Z3Jlc3MKKyAgICAgICAgICAgICAgICAgICAgJiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1l
bnQoKQorICAgICAgICAgICAgICAgICAgICAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5i
ZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkpKQorICAgICAgICAgICAgICAgICAgICBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7
CisgICAgICAgICAgICAgICAgZnJhbWVWaWV3LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwogCi0gICAgaWYgKGFicyhk
ZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhl
IGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRX
aWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1Bh
blNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworICAgICAgICAgICAg
ICAgIGlmIChvcHRpb25zLnNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmcgPT0gU2hvdWxk
QWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIHx8IGZyYW1lVmlldy5zYWZlVG9Qcm9wYWdh
dGVTY3JvbGxUb1BhcmVudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbmNs
b3NpbmdMYXllciA9IG93bmVyRWxlbWVudC0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
ZW5jbG9zaW5nTGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudExheWVy
ID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihlbmNsb3NpbmdMYXllciktPmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2Yg
dGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgorICAgICAgICAgICAgICAgICAgICBuZXdSZWN0
ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVuY2xvc2luZ0lu
dFJlY3QobmV3UmVjdCkpOworICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhlZCA9IGZhbHNl
OyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxpZnJhbWU+IGlz
IGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9PSBTZWxlY3Rp
b25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5mcmFtZSgpLmlz
TWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgc2Nyb2xsQnlSZWN1
cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19CisgICAgICAgICAgICBhdXRv
IG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5tYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKTsKIAotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zp
c2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17
Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47CisjaWYgIVBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3
LnZpc2libGVDb250ZW50UmVjdCgpOworI2Vsc2UKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDb250
ZW50SW5zZXRzIHNob3VsZCBiZSB0YWtlbiBjYXJlIG9mIGluIFVJIHByb2Nlc3Mgc2lkZS4gd2Vi
a2l0Lm9yZy9iLzE5OTY4MgorICAgICAgICAgICAgLy8gVG8gZG8gdGhhdCwgZ2V0UmVjdFRvRXhw
b3NlIG5lZWRzIHRvIHJldHVybiB0aGUgYWRkaXRpb25hbCBzY3JvbGxpbmcgdG8gZG8gYmV5b25k
IGNvbnRlbnQgcmVjdC4KKyAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZp
ZXcudmlld1JlY3RFeHBhbmRlZEJ5Q29udGVudEluc2V0cygpOwogCi0gICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAg
ICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxl
KCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisgICAgICAgICAgICAvLyBGSVhNRTogd2Via2l0Lm9y
Zy9iLzE5OTY4MyBGcmFtZVZpZXc6OnZpc2libGVDb250ZW50UmVjdCBpcyB3cm9uZyB3aGVuIGNv
bnRlbnQgaW5zZXRzIGFyZSBwcmVzZW50CisgICAgICAgICAgICBtYXhTY3JvbGxQb3NpdGlvbiA9
IGZyYW1lVmlldy5zY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoU2Nyb2xsUG9zaXRpb24oZnJhbWVW
aWV3LnRvdGFsQ29udGVudHNTaXplKCkgLSBmbG9vcmVkSW50U2l6ZSh2aWV3UmVjdC5zaXplKCkp
KSk7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3Rl
ZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxP
ZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVk
QXJlYSA9IHRoaXM7CisgICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29u
dGVudEluc2V0cygpOworICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVu
dEluc2V0cy5sZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKKyAgICAgICAgICAgIG1heFNj
cm9sbFBvc2l0aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJv
dHRvbSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50
byAic2Nyb2xsVmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICBMYXlvdXRS
ZWN0IHRhcmdldFJlY3QgPSBhYnNvbHV0ZVJlY3Q7CisgICAgICAgICAgICB0YXJnZXRSZWN0Lm1v
dmUoMCwgZnJhbWVWaWV3LmhlYWRlckhlaWdodCgpKTsKIAotICAgICAgICAvLyBJZiB0aGlzIGxh
eWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2Fu
IHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBu
ZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdT
Y3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWlu
aW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgTGF5b3V0UmVjdCBy
ZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVG
aXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKKyAgICAgICAgICAgIC8vIEF2
b2lkIHNjcm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9u
KCkgaWYgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKKyAgICAgICAgICAgIGlmIChy
ZXZlYWxSZWN0ICE9IHZpZXdSZWN0KSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNs
YW1wZWRTY3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9u
KCkpLmNvbnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRp
b24pOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCkt
PnNjcm9sbGluZ0VsZW1lbnQoKT8KKyAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQorICAgICAgICAgICAgICAgIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICAgICAgICAg
IGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9u
cy5iZWhhdmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOworICAgICAg
ICAgICAgICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRp
b24sIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRv
c2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElm
IHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHBy
b2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUgYW4g
b3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhh
dCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAg
ICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2Fu
dCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwotICAg
IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0g
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBl
LCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQot
ewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9u
KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3Jv
bGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZz
ZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7
Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNj
cm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAg
IGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAgICBz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBp
bmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9s
bFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRp
b24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUp
OwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsK
LSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNh
bmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5p
bWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2
aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RS
RUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3Np
dGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xs
ICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsK
LQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5z
aW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93Omhp
ZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAg
ICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWlu
ZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAg
ICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9s
bFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQg
PiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNl
dCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNh
cmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBj
YXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsK
LQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAg
ICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAg
ICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCku
dmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVy
cyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBh
IHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVj
YXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5j
ZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVu
ZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2Yg
bGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVk
LgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQot
ICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7
Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAg
ICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUg
c3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0
aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVw
LXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3
ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3Np
dGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0g
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAg
ICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9z
aXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAg
ICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgcGFp
bnQtb3JkZXIgcGFyZW50LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHBhaW50T3JkZXJQYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGlu
ZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygp
OwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUo
KSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQg
PSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBz
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0g
ICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3Np
dGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWlu
dCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRl
cmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJn
ZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3
LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZp
ZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRl
ckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxl
bWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVu
dEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQotewotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgotICAgIGlmIChmcmFt
ZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3Jv
bGxiYXJBbHdheXNPZmYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgc2Nyb2xs
YmFycyBhcmUgZm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBvYnZpb3Vz
bHkgYmUgaWdub3JlZC4KLSAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2VyKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvcmJpZCBhdXRvc2Nyb2xscyB3aGVuIHNj
cm9sbGJhcnMgYXJlIG9mZiwgYnV0IHBlcm1pdHMgb3RoZXIgcHJvZ3JhbW1hdGljIHNjcm9sbHMs
Ci0gICAgLy8gbGlrZSBuYXZpZ2F0aW9uIHRvIGFuIGFuY2hvci4KLSAgICByZXR1cm4gIWZyYW1l
Vmlldy5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdAotewotICAgIGlm
ICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlz
IHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAgICAvLyBG
SVhNRTogSXMgdGhpcyBzdGlsbCBuZWVkZWQ/IEl0IHVzZWQgdG8gYmUgcmVsZXZhbnQgZm9yIFNh
ZmFyaSBSU1MuCi0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkgJiYgIXJlbmRlcmVyKCkucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
IC8vIE9ubHkgYm94ZXMgY2FuIGhhdmUgb3ZlcmZsb3dDbGlwIHNldC4KLQotICAgIGlmIChyZW5k
ZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKSkgewot
ICAgICAgICAvLyBUaGUgInByb2dyYW1tYXRpY2FsbHkiIGhlcmUgaXMgbWlzbGVhZGluZzsgdGhp
cyBhc2tzIHdoZXRoZXIgdGhlIGJveCBoYXMgc2Nyb2xsYWJsZSBvdmVyZmxvdywKLSAgICAgICAg
Ly8gb3IgaXMgYSBzcGVjaWFsIGNhc2UgbGlrZSBhIGZvcm0gY29udHJvbC4KLSAgICAgICAgcmV0
dXJuIGJveC0+Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpOwotICAgIH0KLQotICAgIC8v
IFByb2dyYW1tYXRpYyBzY3JvbGxzIGNhbiBzY3JvbGwgb3ZlcmZsb3c6aGlkZGVuLgotICAgIHJl
dHVybiBib3gtPmhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGJveC0+aGFzVmVydGljYWxPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xs
UmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJMYXllciAiIDw8IHRoaXMgPDwgIiBzY3JvbGxSZWN0VG9WaXNp
YmxlICIgPDwgYWJzb2x1dGVSZWN0KTsKLQotICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGFic29s
dXRlUmVjdDsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7Ci0gICAgYm9vbCBhdXRv
c2Nyb2xsTm90SW5Qcm9ncmVzcyA9ICFyZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
YXV0b3Njcm9sbEluUHJvZ3Jlc3MoKTsKLQotICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkp
IHsKLSAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0
aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAg
ICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4g
YnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgotICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgICAgICBBU1NFUlQoYm94KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsb2Nh
bEV4cG9zZVJlY3QoYm94LT5hYnNvbHV0ZVRvTG9jYWxRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3Qo
YWJzb2x1dGVSZWN0KSkpLmJvdW5kaW5nQm94KCkpOwotICAgICAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICAvLyBGb3IgZGly
ZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwg
YmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKLSAgICAgICAgICAgIC8v
IHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxv
Y2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0g
ICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIExheW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXll
ckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9w
dGlvbnMuYWxpZ25ZKTsKLQotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNl
dCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJ
bnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAg
ICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAg
ICAgICAgIGlmIChhdXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmco
b3B0aW9ucy5iZWhhdmlvciwgYm94LT5lbGVtZW50KCkpKQotICAgICAgICAgICAgICAgIGFuaW1h
dGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAg
ICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3Zl
KC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRS
ZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhw
b3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7Ci0gICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwot
Ci0gICAgICAgIGlmIChvd25lckVsZW1lbnQgJiYgb3duZXJFbGVtZW50LT5yZW5kZXJlcigpKSB7
Ci0gICAgICAgICAgICBIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSA9IG51
bGxwdHI7Ci0KLSAgICAgICAgICAgIGlmIChpczxIVE1MRnJhbWVFbGVtZW50QmFzZT4oKm93bmVy
RWxlbWVudCkpCi0gICAgICAgICAgICAgICAgZnJhbWVFbGVtZW50QmFzZSA9IGRvd25jYXN0PEhU
TUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJh
bWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChmcmFtZUVsZW1lbnRCYXNlLCBmcmFtZVZpZXcp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0
byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCi0gICAgICAg
ICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxs
b3dlZFNjb3BlOwotCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Ci0g
ICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBleHBvc2VSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZp
ZXdSZWN0LCBhYnNvbHV0ZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9u
cy5hbGlnblkpOwotCi0gICAgICAgICAgICAgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24ocm91
bmRlZEludFBvaW50KGV4cG9zZVJlY3QubG9jYXRpb24oKSkpOwotICAgICAgICAgICAgICAgIC8v
IEFkanVzdCBvZmZzZXRzIGlmIHRoZXkncmUgb3V0c2lkZSBvZiB0aGUgYWxsb3dhYmxlIHJhbmdl
LgotICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb24uY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIEludFBvaW50KGZyYW1lVmlldy5jb250ZW50c1NpemUo
KSkpOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGNvbnRlbnREb2N1
bWVudCgpLT5zY3JvbGxpbmdFbGVtZW50KCk/Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUwNTkKLSAgICAgICAgICAgICAg
ICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpObzsKLSAgICAgICAg
ICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MKLSAgICAgICAgICAgICAgICAgICAg
JiYgb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKQotICAgICAgICAgICAgICAgICAgICAm
JiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhhdmlvciwgb3duZXJFbGVtZW50LT5jb250
ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpKQotICAgICAgICAgICAgICAgICAgICBh
bmltYXRlZCA9IEFuaW1hdGVkU2Nyb2xsOjpZZXM7Ci0gICAgICAgICAgICAgICAgZnJhbWVWaWV3
LnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgYW5pbWF0ZWQpOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkQWxsb3dD
cm9zc09yaWdpblNjcm9sbGluZyA9PSBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfHwgZnJhbWVWaWV3LnNhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ0xheWVyID0gb3duZXJFbGVtZW50LT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50TGF5ZXIgPSBlbmNsb3NpbmdMYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwotICAg
ICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkaW5hdGUg
c3BhY2Ugb2YgdGhlIHBhcmVudCBmcmFtZSdzIGRvY3VtZW50LgotICAgICAgICAgICAgICAgICAg
ICBuZXdSZWN0ID0gZnJhbWVWaWV3LmNvbnRlbnRzVG9Db250YWluaW5nVmlld0NvbnRlbnRzKGVu
Y2xvc2luZ0ludFJlY3QobmV3UmVjdCkpOwotICAgICAgICAgICAgICAgICAgICBpbnNpZGVGaXhl
ZCA9IGZhbHNlOyAvLyBGSVhNRTogaWRlYWxseSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIDxp
ZnJhbWU+IGlzIGluc2lkZSBwb3NpdGlvbjpmaXhlZC4KLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcGFyZW50TGF5ZXIgPSBudWxscHRyOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG9wdGlvbnMucmV2ZWFsTW9kZSA9
PSBTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWxVcFRvTWFpbkZyYW1lICYmIGZyYW1lVmlldy5m
cmFtZSgpLmlzTWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBhdXRvIG1pblNjcm9sbFBvc2l0aW9uID0gZnJhbWVWaWV3Lm1pbmltdW1TY3JvbGxQb3Np
dGlvbigpOwotICAgICAgICAgICAgYXV0byBtYXhTY3JvbGxQb3NpdGlvbiA9IGZyYW1lVmlldy5t
YXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoKTsKLSNlbHNlCi0gICAgICAgICAgICAvLyBGSVhNRTogQ29udGVudEluc2V0cyBzaG91bGQg
YmUgdGFrZW4gY2FyZSBvZiBpbiBVSSBwcm9jZXNzIHNpZGUuIHdlYmtpdC5vcmcvYi8xOTk2ODIK
LSAgICAgICAgICAgIC8vIFRvIGRvIHRoYXQsIGdldFJlY3RUb0V4cG9zZSBuZWVkcyB0byByZXR1
cm4gdGhlIGFkZGl0aW9uYWwgc2Nyb2xsaW5nIHRvIGRvIGJleW9uZCBjb250ZW50IHJlY3QuCi0g
ICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpZXdSZWN0RXhwYW5k
ZWRCeUNvbnRlbnRJbnNldHMoKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IHdlYmtpdC5vcmcv
Yi8xOTk2ODMgRnJhbWVWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QgaXMgd3Jvbmcgd2hlbiBjb250
ZW50IGluc2V0cyBhcmUgcHJlc2VudAotICAgICAgICAgICAgbWF4U2Nyb2xsUG9zaXRpb24gPSBm
cmFtZVZpZXcuc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KFNjcm9sbFBvc2l0aW9uKGZyYW1lVmll
dy50b3RhbENvbnRlbnRzU2l6ZSgpIC0gZmxvb3JlZEludFNpemUodmlld1JlY3Quc2l6ZSgpKSkp
OwotCi0gICAgICAgICAgICBhdXRvIGNvbnRlbnRJbnNldHMgPSBwYWdlKCkuY29udGVudEluc2V0
cygpOwotICAgICAgICAgICAgbWluU2Nyb2xsUG9zaXRpb24ubW92ZSgtY29udGVudEluc2V0cy5s
ZWZ0KCksIC1jb250ZW50SW5zZXRzLnRvcCgpKTsKLSAgICAgICAgICAgIG1heFNjcm9sbFBvc2l0
aW9uLm1vdmUoY29udGVudEluc2V0cy5yaWdodCgpLCBjb250ZW50SW5zZXRzLmJvdHRvbSgpKTsK
LSNlbmRpZgotICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFyZ2V0IHJlY3QgaW50byAic2Nyb2xs
VmlldyBjb250ZW50cyIgY29vcmRpbmF0ZXMuCi0gICAgICAgICAgICBMYXlvdXRSZWN0IHRhcmdl
dFJlY3QgPSBhYnNvbHV0ZVJlY3Q7Ci0gICAgICAgICAgICB0YXJnZXRSZWN0Lm1vdmUoMCwgZnJh
bWVWaWV3LmhlYWRlckhlaWdodCgpKTsKLQotICAgICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxS
ZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKHZpZXdSZWN0LCB0YXJnZXRSZWN0LCBpbnNpZGVGaXhlZCwg
b3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKLSAgICAgICAgICAgIC8vIEF2b2lkIHNj
cm9sbGluZyB0byB0aGUgcm91bmRlZCB2YWx1ZSBvZiByZXZlYWxSZWN0LmxvY2F0aW9uKCkgaWYg
d2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBzY3JvbGwKLSAgICAgICAgICAgIGlmIChyZXZlYWxS
ZWN0ICE9IHZpZXdSZWN0KSB7Ci0gICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRT
Y3JvbGxQb3NpdGlvbiA9IHJvdW5kZWRJbnRQb2ludChyZXZlYWxSZWN0LmxvY2F0aW9uKCkpLmNv
bnN0cmFpbmVkQmV0d2VlbihtaW5TY3JvbGxQb3NpdGlvbiwgbWF4U2Nyb2xsUG9zaXRpb24pOwot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgdXNlIGRvY3VtZW50KCktPnNjcm9s
bGluZ0VsZW1lbnQoKT8KLSAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTA1OQotICAgICAgICAgICAgICAgIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6Ok5vOwotICAgICAgICAgICAgICAgIGlmIChh
dXRvc2Nyb2xsTm90SW5Qcm9ncmVzcyAmJiB1c2VTbW9vdGhTY3JvbGxpbmcob3B0aW9ucy5iZWhh
dmlvciwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKSkKLSAgICAgICAg
ICAgICAgICAgICAgYW5pbWF0ZWQgPSBBbmltYXRlZFNjcm9sbDo6WWVzOwotICAgICAgICAgICAg
ICAgIGZyYW1lVmlldy5zZXRTY3JvbGxQb3NpdGlvbihjbGFtcGVkU2Nyb2xsUG9zaXRpb24sIFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVybW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFm
dGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UKLSAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29u
dGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Nyb2xsUmVjdEludG9WaWV3LgotICAgICAgICAgICAg
Ly8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qgb24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNh
dGlvbnMKLSAgICAgICAgICAgIC8vIHRoYXQgcHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBj
b250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBYIE1haWwuCi0gICAgICAgICAgICAvLyBUaGUgY2Fu
QXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVudEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlz
LgotICAgICAgICAgICAgcGFnZSgpLmNocm9tZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVk
SW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIG91dGVy
bW9zdCB2aWV3IG9mIGEgd2ViIHBhZ2UsIHNvIGFmdGVyIHNjcm9sbGluZyB0aGlzIHZpZXcgd2UK
KyAgICAgICAgICAgIC8vIHNjcm9sbCBpdHMgY29udGFpbmVyIGJ5IGNhbGxpbmcgUGFnZTo6c2Ny
b2xsUmVjdEludG9WaWV3LgorICAgICAgICAgICAgLy8gVGhpcyBvbmx5IGhhcyBhbiBlZmZlY3Qg
b24gdGhlIE1hYyBwbGF0Zm9ybSBpbiBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgIC8vIHRoYXQg
cHV0IHdlYiB2aWV3cyBpbnRvIHNjcm9sbGluZyBjb250YWluZXJzLCBzdWNoIGFzIE1hYyBPUyBY
IE1haWwuCisgICAgICAgICAgICAvLyBUaGUgY2FuQXV0b3Njcm9sbCBmdW5jdGlvbiBpbiBFdmVu
dEhhbmRsZXIgYWxzbyBrbm93cyBhYm91dCB0aGlzLgorICAgICAgICAgICAgcGFnZSgpLmNocm9t
ZSgpLnNjcm9sbFJlY3RJbnRvVmlldyhzbmFwcGVkSW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTI5MzEsMjMgKzI0MTMsNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShuZXdS
ZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChjb21wb3NpdG9yKCku
aGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8gT3VyIHN0YWNraW5n
IGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50
cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21w
b3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0g
ICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBi
ZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVk
IGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXRE
ZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAg
ICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpnZXRS
ZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IExheW91dFJl
Y3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYg
YWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QKIHsKICAgICBGcmFt
ZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwpAQCAtMzA0
MywxMTM4ICsyNTA4LDgwIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9z
ZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5CiAgICAgICAgIHkgPSB2
aXNpYmxlUmVjdC55KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGlnbm1lbnQ6
OkJlaGF2aW9yOjpBbGlnbkJvdHRvbSkKICAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0g
dmlzaWJsZVJlY3QuaGVpZ2h0KCk7Ci0gICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBTY3JvbGxBbGln
bm1lbnQ6OkJlaGF2aW9yOjpBbGlnbkNlbnRlcikKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgp
ICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwotICAg
IGVsc2UKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpOwotCi0gICAgcmV0dXJuIExheW91dFJl
Y3QoTGF5b3V0UG9pbnQoeCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cpCi17
Ci0gICAgSW50UG9pbnQgY3VycmVudERvY3VtZW50UG9zaXRpb24gPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS53aW5kb3dUb0NvbnRlbnRzKHBvc2l0aW9uSW5XaW5kb3cpOwotICAgIHNj
cm9sbFJlY3RUb1Zpc2libGUoTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5
b3V0U2l6ZSgxLCAxKSksIGZhbHNlLCB7IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
VG9FZGdlSWZOZWVkZWQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6Y2FuUmVzaXplKCkgY29uc3QKLXsKLSAgICAvLyBXZSBu
ZWVkIGEgc3BlY2lhbCBjYXNlIGZvciA8aWZyYW1lPiBiZWNhdXNlIHRoZXkgbmV2ZXIgaGF2ZQot
ICAgIC8vIGhhc092ZXJmbG93Q2xpcCgpLiBIb3dldmVyLCB0aGV5IGRvICJpbXBsaWNpdGx5IiBj
bGlwIHRoZWlyIGNvbnRlbnRzLCBzbwotICAgIC8vIHdlIHdhbnQgdG8gYWxsb3cgcmVzaXppbmcg
dGhlbSBhbHNvLgotICAgIHJldHVybiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSB8fCBy
ZW5kZXJlcigpLmlzUmVuZGVySUZyYW1lKCkpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVu
dCBidXQgaXMgbm90IHJpZ2h0IG5vdy4KLSAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5S
ZXNpemUoKSB8fCAhcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBUaGUgb25seSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRl
cmVyKCkgIT0gcmVuZGVyZXIgaXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBo
ZXJlPwotICAgIC8vIElmIHRoZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwg
d2l0aCB0aGVtIGV4cGxpY2l0bHkuCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCku
ZWxlbWVudCgpOwotICAgIGF1dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVt
ZW50LT5yZW5kZXJlcigpKTsKLQotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3Vz
ZVByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgem9vbUZhY3RvciA9IHJl
bmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIGF1dG8gYWJzb2x1dGVQb2lu
dCA9IGRvY3VtZW50LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7Ci0g
ICAgYXV0byBsb2NhbFBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhh
YnNvbHV0ZVBvaW50KSk7Ci0KLSAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21S
ZXNpemVDb3JuZXIobG9jYWxQb2ludCk7Ci0gICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZz
ZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICAKLSAgICBMYXlvdXRTaXplIGN1cnJlbnRT
aXplID0gTGF5b3V0U2l6ZShyZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVy
LT5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBl
bGVtZW50LT5taW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOwot
ICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwotICAg
IAotICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewot
ICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKLSAgICAgICAg
YWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOwot
ICAgIH0KLSAgICAKLSAgICBMYXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBu
ZXdPZmZzZXQgLSBhZGp1c3RlZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBj
dXJyZW50U2l6ZTsKLQotICAgIFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihlbGVtZW50KTsKLSAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0g
cmVuZGVyZXItPnN0eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7Ci0K
LSAgICBSZXNpemUgcmVzaXplID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7Ci0gICAgaWYg
KHJlc2l6ZSAhPSBSZXNpemU6OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgewotICAg
ICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAg
ICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNl
ZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1h
cmdpbkxlZnQsIHJlbmRlcmVyLT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlw
ZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6
b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlv
dXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVy
ID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsK
LSAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3Vu
ZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRp
ZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZy
b20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAv
IHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhl
aWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0
IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5j
ZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50
LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91
bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBv
aW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21w
b3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Ny
b2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwot
fQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNp
YmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNp
YmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNw
YWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNp
b24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xs
YmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2li
bGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2
aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAs
IHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0K
LQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJi
ZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNl
IG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFy
ZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAg
ICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAo
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQo
c2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdo
dCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2gu
c2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNp
YmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0g
KHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4g
c3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29s
IFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1
c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJl
dHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJM
YXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAg
IEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVj
dCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIo
KSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwg
cGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVT
aXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlm
ICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUo
cm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29u
c3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwot
Ci0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNv
bnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJs
ZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNT
aXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29u
dGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNo
YW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJs
ZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJl
YXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewot
ICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGls
ZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0K
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRF
bmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRl
U2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xs
LCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQot
I2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNS
ZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwot
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0g
ICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1
dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7
Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jp
em9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0g
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Ny
b2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAg
IGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXpl
OjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5
SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8
fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNp
emU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5
IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAg
IGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwK
LSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQot
ICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAg
ICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAg
ICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAg
ICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAg
ICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRo
KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3Qo
Y29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jp
em9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0g
ICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0g
ICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAg
YmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQot
ICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQot
ICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAg
IGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90
dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlD
b3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVy
LngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3Ju
ZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3Ju
ZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAg
ICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAg
aWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0g
ICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5y
ZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tu
ZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50
U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRv
SW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgm
c2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVT
Y3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092
ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3Rh
bmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFp
bnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3Jv
bGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9
IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFk
b3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVy
TGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
LXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9y
U2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0g
ICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAg
ICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRU
ZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
YWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBv
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAg
IGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+
aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxi
YXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBp
ZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVT
Y3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3co
KSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVS
ZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0
aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFy
J3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQo
KTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92
QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9s
bHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3Vi
U2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDog
U2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8v
IERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBj
b3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAg
cmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBm
b3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlz
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byog
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewot
ICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
c2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xv
YmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
IGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIg
KyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQo
IlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMp
LCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7
Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRy
YW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlm
IChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9k
ZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRl
Z3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAi
ICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2Uo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJl
bmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAh
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0
Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5l
cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVy
ZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21S
b290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJv
b3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRG
cmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3Rz
LnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3Jv
bGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVz
LgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVy
OjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAg
aWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxh
eWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29y
ZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91
dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1Jl
Y3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwot
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBB
U1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAg
ICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVy
Zmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVy
Zmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkp
OwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0g
ICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgp
OwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9w
KCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNj
cm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAg
ICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0g
ICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Ny
b2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwot
Ci0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGll
bnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICBy
ZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJm
bG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNj
cm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9v
bCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2Vs
dmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNI
b3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0K
LSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5l
ZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAg
ICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmICht
X3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRp
Y2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQg
dG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAg
IGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFs
U2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
IT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYm
IChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAg
aWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxC
YXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhh
c0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5
ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVy
KCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAg
aWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxv
d1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJs
b2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0
b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxh
eW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1Jl
bGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAg
aWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94
KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xl
YXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8g
U2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsK
LSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVp
Z2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5
b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5
bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9z
aXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9s
bCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgot
ICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAv
LyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBv
bmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50cy4KLSAgICAgICAg
Ly8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5z
ZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQotICAg
ICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3Vu
ZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCi0gICAg
ICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSNlbmRpZgotICAg
ICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAg
ICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0
KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZp
Z3VyYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwot
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMu
c2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gU2Nyb2xsQWxpZ25tZW50OjpC
ZWhhdmlvcjo6QWxpZ25DZW50ZXIpCisgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBv
c2VSZWN0LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKKyAgICBlbHNlCisg
ICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gTGF5b3V0UmVjdChMYXlvdXRQb2ludCh4LCB5KSwgdmlzaWJsZVJlY3Quc2l6ZSgpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3ZvaWQg
UmVuZGVyTGF5ZXI6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uSW5XaW5kb3cp
CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxi
YXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBJbnRQb2lu
dCBjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LndpbmRvd1RvQ29udGVudHMocG9zaXRpb25JbldpbmRvdyk7CisgICAgc2Nyb2xsUmVjdFRvVmlz
aWJsZShMYXlvdXRSZWN0KGN1cnJlbnREb2N1bWVudFBvc2l0aW9uLCBMYXlvdXRTaXplKDEsIDEp
KSwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qs
IGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVn
RGVzY3JpcHRpb24oKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0g
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
Ci0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0g
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
LSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOwotCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0
b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
ICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQ
b2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdl
dHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVy
aW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91
dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1l
bnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAg
IHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkp
OwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhl
IHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChs
YXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCku
d2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Ny
b2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0
IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAg
cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVj
dCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBv
biB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0g
ICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92
ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGlu
Z0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICBpZiAo
bV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3Qo
Y29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxl
bmQgbW9kZSJfcyk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlm
IHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2Vl
IHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAg
ICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWJzUmVjdCk7Ci19CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXpl
Q29ybmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFr
UmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlS
ZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUo
KTsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VM
b1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIp
LmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1h
Z2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+
c2l6ZSgpOworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0
dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0
cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3Qu
eCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsg
cmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBp
ZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVz
aXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXpl
KSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBG
bG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJl
c2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29y
bmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3Qp
OworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNp
emVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
Y29udGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9t
IGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
IChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVj
dCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0g
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRo
KCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRy
YXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+
bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKIHsKLSAgICBp
ZiAoIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCitMYXlvdXRVbml0IFJlbmRlckxheWVy
OjpvdmVyZmxvd0xlZnQoKSBjb25zdAogewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQg
dGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1
bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0
aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxv
Y2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0g
ICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQp
KSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7CiB9
CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK0xheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0K
IAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNl
dCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQq
IGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQxOTIsMTcgKzI1OTksNiBAQCB2b2lkIFJlbmRlckxh
eWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9v
dCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5j
bG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBz
dWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXll
cjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBy
dWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjI1LDcgKzI2MjEsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQ
YWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNv
bmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBv
dmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hh
aW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXll
ciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7
IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50
QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xs
Q29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAg
ICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
PihsYXllcikgJiYgZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250
YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
bGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3Rvckxh
eWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0MjcsNyArMjgyNCw4
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMg
b3Igc3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBz
Y3JvbGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
IHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpICYmIGRv
d25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCk7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJl
cigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAo
c2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pv
b21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzIyLDggKzMxMjAsOCBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1
cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Ny
b2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAg
ICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fbGF5ZXJUeXBlID09IFJl
bmRlckxheWVyOjpMYXllclR5cGU6OlNjcm9sbGFibGUpCisgICAgICAgICAgICBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpLT5wYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMobGF5ZXJGcmFnbWVudHMsIGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKIAogICAg
ICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQg
Y29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRv
IHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUxOTEsMTggKzM1ODksNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllcgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgbG9jYWxQYWludGluZ0luZm8pCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6
IGxheWVyRnJhZ21lbnRzKSB7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY2xpcFRvUmVjdChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0g
ICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9M
YXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9j
YXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCi0gICAgICAgICAg
ICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsK
LSAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNvbGxlY3RF
dmVudFJlZ2lvbkZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxv
Y2FsUGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikK
IHsKICAgICBBU1NFUlQobG9jYWxQYWludGluZ0luZm8uZXZlbnRSZWdpb25Db250ZXh0KTsKQEAg
LTUyMzYsNyArMzYyMiw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAg
ICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxh
eWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTUzNTQsNiAr
Mzc0MCwxOSBAQCBzdGF0aWMgYm9vbCBpc0hpdENhbmRpZGF0ZShjb25zdCBSZW5kZXJMYXllciog
aGl0TGF5ZXIsIGJvb2wgY2FuRGVwdGhTb3J0LCBkb3VibAogICAgIHJldHVybiB0cnVlOwogfQog
CitzdGF0aWMgaW5saW5lIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50c0ZvclNjcm9sbGFi
bGVMYXllcihSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpCit7CisgICAgc3dpdGNoIChsYXllci5sYXllclR5cGUoKSkg
eworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U3RhdGljOgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOgor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuaGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBw
b2ludEluRnJhZ21lbnQpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwogLy8gaGl0VGVzdExvY2F0aW9uIGFuZCBoaXRUZXN0UmVjdCBh
cmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5ZXIgaXMgb25l
IHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2FjY3VtdWxhdGVk
VHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmluZyBmbGF0dGVu
aW5nIGxheWVyLgpAQCAtNTQ2Nyw3ICszODY2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQK
ICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9p
bnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewor
ICAgIGlmIChoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzRm9yU2Nyb2xsYWJsZUxheWVyKCp0aGlz
LCBsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewogICAgICAg
ICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKICAg
ICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNTU0MiwzNSArMzk0MSw2IEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVy
OjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZy
YWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBv
aW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0
ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJC
b3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21l
bnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVy
KCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRv
bUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmln
aHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4
WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhN
YXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCks
IHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJG
cmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJG
cmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byBy
ZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVj
dChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6
ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkp
KSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RM
b2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXll
ckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWlu
ZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSog
dHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsKQEAgLTYwMTEsMzYgKzQzODEsNiBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyOjpsb2NhbENsaXBSZWN0KGJvb2wmIGNsaXBFeGNlZWRz
Qm91bmRzKSBjb25zdAogICAgIHJldHVybiBjbGlwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6YWRkQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKGNvbnN0IExheW91dFJlY3QmIGJvdW5kcykK
LXsKLSAgICBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy51bml0ZShlbmNsb3NpbmdJbnRSZWN0
KGJvdW5kcykpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpCi17Ci0gICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMgPSBJbnRSZWN0KCk7
Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2Vs
ZWN0aW9uR2FwcygpCi17Ci0gICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+
cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCi0gICAgaWYgKG1fYmxvY2tTZWxlY3Rpb25H
YXBzQm91bmRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0UmVjdCBy
ZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9s
bFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwg
bnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAo
cmVuZGVyZXIoKS5oYXNDbGlwKCkpCi0gICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAv
LyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KLSAgICBpZiAoIXJlY3QuaXNFbXB0
eSgpKQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KIGJv
b2wgUmVuZGVyTGF5ZXI6OmludGVyc2VjdHNEYW1hZ2VSZWN0KGNvbnN0IExheW91dFJlY3QmIGxh
eWVyQm91bmRzLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBSZW5kZXJMYXll
ciogcm9vdExheWVyLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgY29uc3QgT3B0
aW9uYWw8TGF5b3V0UmVjdD4mIGNhY2hlZEJvdW5kaW5nQm94KSBjb25zdAogewogICAgIC8vIEFs
d2F5cyBleGFtaW5lIHRoZSBjYW52YXMgYW5kIHRoZSByb290LgpAQCAtNjMzNywyMSArNDY3Nyw2
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1
cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNz
TGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6Omxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0K
LUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zv
cm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAg
Ym9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50
c0ludG9XaW5kb3coKTsKQEAgLTYzODIsMTEgKzQ3MDcsNiBAQCBib29sIFJlbmRlckxheWVyOjpz
aG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWlu
dGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxz
T3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRl
ckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYm
ICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MTAsOSArNDgzMCwxMyBA
QCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAg
ICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBy
ZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
aXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHRoaXMpOworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpIHx8IHNjcm9sbGFi
bGVMYXllci0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCiAgICAg
ICAgIHx8IHJlbmRlcmVyKCkuaXNDYW52YXMoKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzVmlk
ZW8oKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzRW1iZWRkZWRPYmplY3QoKQpAQCAtNjYyMywx
MSArNDk0NywyMyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKSBjb25zdAogICAgIHJldHVybiBXZWJDb3JlOjpoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnNPckJhY2tncm91bmQocmVuZGVyZXIoKSk7CiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6
Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9sYXllclR5cGUp
IHsKKyAgICBjYXNlIFJlbmRlckxheWVyOjpMYXllclR5cGU6OlN0YXRpYzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGNhc2UgUmVuZGVyTGF5ZXI6OkxheWVyVHlwZTo6U2Nyb2xsYWJsZToK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4odGhpcyktPmhh
c092ZXJmbG93Q29udHJvbHMoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOwogfQogCkBAIC02NjYzLDM4
ICs0OTk5LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRD
b250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1wdHlDaGls
ZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAg
ICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJv
eC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0
eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGlu
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRp
YyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250
YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxi
YXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1Zl
cnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Ny
b2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgot
ICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5h
YmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9u
dGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBt
X2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGlj
YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1f
dkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQog
dm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91
bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjcxNyw2ICs1MDIxLDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKIAogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMg
dmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhp
cyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVz
dC4KKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+
KHRoaXMpID8gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPih0aGlzKSA6IG51bGxwdHI7
CiAgICAgaWYgKG9sZFN0eWxlKSB7CiAgICAgICAgIGJvb2wgdmlzaWJpbGl0eUNoYW5nZWQgPSBv
bGRTdHlsZS0+dmlzaWJpbGl0eSgpICE9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCk7
CiAgICAgICAgIGlmIChvbGRTdHlsZS0+dXNlZFpJbmRleCgpICE9IHJlbmRlcmVyKCkuc3R5bGUo
KS51c2VkWkluZGV4KCkgfHwgdmlzaWJpbGl0eUNoYW5nZWQpIHsKQEAgLTY3MjYsMTggKzUwMzEs
MTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZp
c2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAg
ICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYg
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5jb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChyZW5kZXJl
cigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJlaGF2aW9y
KCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkgewotICAg
ICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8
UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0
eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVlZSA9IG51
bGxwdHI7CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikgeworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPmNyZWF0ZU9yRGVsZXRlTWFycXVlZUlmTmVlZGVkKCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0K
IAotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKICAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNv
IHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2
ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NTAs
MTUgKzUwNTIsMTIgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9yZWZsZWN0aW9uLT5zZXRTdHlsZShjcmVhdGVSZWZsZWN0aW9uU3R5bGUoKSk7
CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBj
dXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9o
QmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworICAgIGlmIChzY3JvbGxh
YmxlTGF5ZXIpIHsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxiYXJTdHls
ZSgpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQog
CiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNm
b3JtKCk7CkBAIC02Nzc5LDk4ICs1MDc4LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNl
bmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRl
cmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlz
U2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7
Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
LSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEo
dGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAg
fQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVk
KSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRv
dWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYg
d2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBh
cyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAg
IFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQq
IGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAg
YXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0s
ICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIp
IHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCks
IFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQg
YmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFy
ZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
LXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVz
aXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICgh
cmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92
ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBj
aGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAg
bV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZs
ZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxl
Y3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNzAwMiw3ICs1MjA5LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJu
IHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29s
IFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0
CkBAIC03MjQ4LDExICs1NDU1LDE0IEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVl
UmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAKICAgICBz
dHJlYW0gPDwgIiAiOwogCi0gICAgc3RyZWFtIDw8IGxheWVyLmJveFNjcm9sbGluZ1Njb3BlKCk7
Ci0gICAgc3RyZWFtIDw8ICIgIjsKLSAgICBzdHJlYW0gPDwgbGF5ZXIuY29udGVudHNTY3JvbGxp
bmdTY29wZSgpOworICAgIGlmIChpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAgICAgc3RyZWFtIDw8IHNjcm9s
bGFibGVMYXllci5ib3hTY3JvbGxpbmdTY29wZSgpOworICAgICAgICBzdHJlYW0gPDwgIiAiOwor
ICAgICAgICBzdHJlYW0gPDwgc2Nyb2xsYWJsZUxheWVyLmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKIAotICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAgfQog
CiAgICAgb3V0cHV0SWRlbnQoc3RyZWFtLCBkZXB0aCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKaW5kZXggZDgzNzNhYWU4MTlkNGViOTlkNmIyN2RjY2U1ZWVlMDk0ZmVl
OWJmNC4uZjNkMGI0NjU0NjliNmY1NWM0MzQ3NzA3NTE1NmZlNzFlNzk4MGE2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3JvbGxC
ZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8bWVtb3J5
PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBA
IC0xNDAsMjAgKzEzOSwyNiBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewog
ICAgIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yIHsgU2Nyb2xsQmVoYXZpb3I6OkF1dG8gfTsKIH07
CiAKLXVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7Ci0KIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZp
bmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGlj
IENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRl
cnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGU7CisKKyAgICBlbnVtIGNsYXNzIExheWVyVHlwZSB7CisgICAgICAgIFN0YXRpYywK
KyAgICAgICAgU2Nyb2xsYWJsZQorICAgIH07CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAor
ICAgIExheWVyVHlwZSBsYXllclR5cGUoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHlwZTsgfQor
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5k
ZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2ls
bEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIFJlbmRlckxheWVy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmLCBMYXllclR5cGUpOworICAgIHZvaWQgZGVzdHJveSgp
OworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRl
ciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4
ICs0MjAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBt
YXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlz
U2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7
IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTEzICs0
NDAsMTQgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4g
TGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVT
aXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5h
bDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7
Ci0KLSAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwot
Ci0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhl
aXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUm
IGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAg
Ym9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRv
T2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNj
cm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAg
IHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
ID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3Jv
bGw6Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJl
IG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7
IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAg
dm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0
IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCi0gICAgLy8gRklYTUU6IFRoaXMg
Y2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3
YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KLSAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSBjb25zdDsKLQotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIg
aXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQs
IGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNP
dmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92
QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZv
aWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCBy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlv
biA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1
aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3Rh
cnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZv
aWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1
ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxv
b2sgYXQgd2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAg
IGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMg
dHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVz
IGxheW91dCB0byBiZSB1cC10by1kYXRlKS4KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3c7IH0KIAotICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxi
YXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAg
IGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9s
KEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKLSAgICBJ
bnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
IGNvbnN0OwotCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlv
dXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lk
IGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIGJvb2wgY2FuUmVzaXplKCkgY29u
c3Q7Ci0gICAgdm9pZCByZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgTGF5
b3V0U2l6ZSYpOwotICAgIGJvb2wgaW5SZXNpemVNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblJl
c2l6ZU1vZGU7IH0KLSAgICB2b2lkIHNldEluUmVzaXplTW9kZShib29sIGIpIHsgbV9pblJlc2l6
ZU1vZGUgPSBiOyB9Ci0KICAgICBib29sIGlzUmVuZGVyVmlld0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pc1JlbmRlclZpZXdMYXllcjsgfQogICAgIGJvb2wgaXNGb3JjZWRTdGFja2luZ0NvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2ZvcmNlZFN0YWNraW5nQ29udGV4dDsgfQogICAgIGJvb2wg
aXNPcHBvcnR1bmlzdGljU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pc09wcG9y
dHVuaXN0aWNTdGFja2luZ0NvbnRleHQ7IH0KQEAgLTU1NSw5ICs0NjMsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJl
ZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9z
aW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9u
TW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRl
ZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9u
TGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTU3OSwxMCArNDg0
LDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDbGlwUmVjdHNJbmNsdWRpbmdEZXNjZW5kYW50
cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RUeXBlcyk7CiAgICAgdm9p
ZCBjbGVhckNsaXBSZWN0cyhDbGlwUmVjdHNUeXBlIHR5cGVUb0NsZWFyID0gQWxsQ2xpcFJlY3RU
eXBlcyk7CiAKLSAgICB2b2lkIGFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlv
dXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotICAg
IHZvaWQgcmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOwotCiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBBU1NFUlQoIW1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSkgaGVyZSwgYnV0IHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNDQKICAgICAvLyBkaXR0
byBmb3IgaGFzVmlzaWJsZURlc2NlbmRhbnQoKSwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03MTI3NwogICAgIGJvb2wgaGFzVmlzaWJsZUNvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2hhc1Zpc2libGVDb250ZW50OyB9CkBAIC01OTMsNyArNDk0LDggQEAgcHVi
bGljOgogCiAgICAgYm9vbCBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSBj
b25zdDsKICAgICBib29sIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0OwotICAgIAor
ICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCiAgICAgYm9vbCBiZWhhdmVz
QXNGaXhlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmVoYXZlc0FzRml4ZWQ7IH0KIAogICAgIHN0cnVj
dCBQYWludGVkQ29udGVudFJlcXVlc3QgewpAQCAtNjM3LDYgKzUzOSw4IEBAIHB1YmxpYzoKICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUp
IGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmlu
Z0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIg
cmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1
dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpA
QCAtNjk4LDcgKzYwMiw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVl
UGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2Vj
dXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9y
aWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVz
dWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3Qg
Q2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVy
TGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGlu
UmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQsMTEgKzY4
Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVu
aXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAg
dm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0
aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhh
dCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNm
b3JtLmdldCgpOyB9CkBAIC04NTgsMjAgKzc1Niw5IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxh
eWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9s
bGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcjsg
fQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKLSAgICAvLyBMYXllcnMg
d2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24g
YW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KLSAgICBPcHRpb25h
bDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOyB9Ci0gICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7
IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aFRyYW5zcGFyZW5jeShPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiAoaXNUcmFu
c3BhcmVudCgpIHx8IGhhc0JsZW5kTW9kZSgpIHx8IChpc29sYXRlc0JsZW5kaW5nKCkgJiYgIXJl
bmRlcmVyKCkuaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSkgJiYgKChwYWludEJlaGF2aW9y
ICYgUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKSB8fCAhaXNDb21wb3Np
dGVkKCkpOwpAQCAtODg1LDExICs3NzIsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJl
Y3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9v
bCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRl
cnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkg
Y29uc3Q7CiAKQEAgLTkxOCw4ICs4MDAsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7
IH0KLQogICAgIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCkgeyBTaW5nbGVQYWludEZyZXF1
ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIgfTsgfQogICAgIGJvb2wgcGFp
bnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIu
cGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgxMCw3IEBAIHB1YmxpYzoKICAg
ICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRp
bmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFs
aWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBT
dHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArODkwLDYgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51
bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAg
ICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFj
a2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDMwLDE2ICs5MDcsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KTsKIAotICAgIGVudW0gVXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWcgewotICAgICAgICBJc092ZXJmbG93U2Nyb2xsICAgICAg
ICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCi0gICAgICAgIEhhc1NlZW5WaWV3cG9ydENvbnN0
cmFpbmVkQW5jZXN0b3IgICAgICA9IDEgPDwgMSwKLSAgICAgICAgSGFzU2VlbkFuY2VzdG9yV2l0
aE92ZXJmbG93Q2xpcCAgICAgICAgID0gMSA8PCAyLAotICAgICAgICBIYXNDaGFuZ2VkQW5jZXN0
b3IgICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDMsCi0gICAgfTsKLSAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8
VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKLQotICAgIFNjcm9s
bE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQog
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3Qg
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0Owog
CiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5s
b2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA3Miw3ICs5MzksNiBAQCBwcml2YXRl
OgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiB0cmFuc3BhcmVuY3lQYWludERpcnR5UmVjdCwg
Ym9vbCBoYXZlVHJhbnNwYXJlbmN5LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JSZW5kZXJlcik7
CiAgICAgdm9pZCBwYWludEZvcmVncm91bmRGb3JGcmFnbWVudHNXaXRoUGhhc2UoUGFpbnRQaGFz
ZSwgY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlcik7CiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBwYWludGlu
Z1Jvb3RGb3JSZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXll
clBhaW50aW5nSW5mbyYpOwogICAgIHZvaWQgcGFpbnRNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9y
UmVuZGVyZXIpOwogICAgIHZvaWQgcGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHBhaW50aW5n
Um9vdEZvclJlbmRlcmVyKTsKICAgICB2b2lkIHBhaW50VHJhbnNmb3JtZWRMYXllckludG9GcmFn
bWVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRMYXllckZsYWc+KTsKQEAgLTEwOTksNjYgKzk2NSwxNSBAQCBwcml2YXRlOgogICAg
IAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJv
b2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwogCiAgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQg
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogCiAg
ICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAKLSAgICAvLyBTY3Jv
bGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQg
c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250
ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlz
aWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgb3Zlcmhh
bmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZp
bmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
KSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQg
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNl
dFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29u
c3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7Ci0gICAgCi0gICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7
Ci0KICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7
CiAgICAgdm9pZCBzZXRBbmNlc3RvckNoYWluSGFzVmlzaWJsZURlc2NlbmRhbnQoKTsKIApAQCAt
MTE5NiwxNCArMTAxMSw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFi
c29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50CiAgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQg
Y2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7
Ci0KICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9z
aXRpbmdEZXNjZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBi
OyB9CkBAIC0xMjE3LDIwICsxMDI0LDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG92ZXJm
bG93TGVmdCgpIGNvbnN0OwogICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0Owog
Ci0gICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKLSAgICAgICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyOwotICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsKLSAgICAgICAgSW50UmVjdCByZXNpemVyOwotICAg
ICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIXNjcm9sbENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3Ju
ZXIgOiByZXNpemVyOwotICAgICAgICB9Ci0gICAgfTsKLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0
cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKLQotICAgIGJvb2wgb3ZlcmZsb3dDb250
cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKLQorICAg
IExheWVyVHlwZSBtX2xheWVyVHlwZTsKICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29t
cG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIg
OiAxOwpAQCAtMTI0NCwxMCArMTAzOCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25vcm1hbEZs
b3dMaXN0RGlydHk6IDE7CiAgICAgYm9vbCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdCA6IDE7CiAK
LSAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVz
aXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCi0g
ICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7Ci0KLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAv
LyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8g
d2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0x
MjU5LDE0ICsxMDQ5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50
cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAv
LyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGlj
YS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3Jl
cGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNv
bnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsK
ICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBt
X2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsK
ICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjg3LDE3ICsxMDc1LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gOiA0OyAv
LyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0
cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7
Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93
ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM4LDI1ICsxMTE1LDggQEAgcHJpdmF0ZToKICAgICAvLyBU
aGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAg
U2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVp
Z2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0g
ICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxi
YXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJl
Y3RzQ2FjaGU7CiAgICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0OwotCi0gICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFp
dHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwotICAgIE1hcmthYmxl
PFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAw
Pj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8v
IENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVu
dHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJ
bmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAg
LTEzNjYsMTAgKzExMjYsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4
dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAg
ICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVy
ZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJl
bmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQ
dHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0
aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4g
SXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVy
PiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA1MTlkMzYxMDc4MDhlMzYyZjdjMDQw
ZjQyNzhjODgzYTJmMzkwNjFlLi5hZmJkMjUyMDVlOWMyZmY4MjY4MTBiZmEzMTFlNGI3N2Y0MmJk
ZTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0yNjksNyArMjcw
LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OndpbGxCZURlc3Ryb3llZCgpCiAjZW5kaWYK
IAogICAgIEFTU0VSVChtX293bmluZ0xheWVyLmJhY2tpbmcoKSA9PSB0aGlzKTsKLSAgICBjb21w
b3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKG1fb3duaW5nTGF5ZXIp
OworICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKQorICAg
ICAgICBjb21wb3NpdG9yKCkucmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpOwogCiAgICAgY2xlYXJC
YWNraW5nU2hhcmluZ0xheWVycygpOwogfQpAQCAtNDIxLDExICs0MjMsMTIgQEAgc3RhdGljIFRp
bGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxvd1RpbGVkQmFja2luZ0NvdmVy
YWdlKGNvbnN0IFJlbmQKIAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3Zl
cmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVz
ZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7
Ci0gICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgaWYgKCF1c2VN
aW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplICYmIGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bGF5ZXIpKSB7CisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRpbGVDb3ZlcmFn
ZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsKIAotICAg
ICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQogICAg
ICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNh
bFNjcm9sbGluZzsKICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKQEAgLTEyMzIsOCAr
MTIzNSwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdy
YXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgIGlmIChjb21wb3NpdGVkQW5j
ZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlv
dXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9z
aXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNj
cm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29u
dGFpbmVyQm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91
bmRzLmxvY2F0aW9uKCkpIC0gdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250
YWluZXJCb3guc2l6ZSgpKTsKKyAgICAgICAgTGF5b3V0U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNvbXBvc2l0ZWRBbmNlc3RvcikpCisg
ICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSB0b0xheW91dFNpemUoZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihjb21wb3NpdGVkQW5jZXN0b3IpLT5zY3JvbGxPZmZzZXQoKSk7CisgICAg
ICAgIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVy
Qm94LmxvY2F0aW9uKCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxv
Y2F0aW9uKCkpIC0gc2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0OwpAQCAtMTI4NSw3ICsx
MjkwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJl
bmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGlu
Z0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAg
ICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVyZmxvd1Njcm9sbCkgewotICAgICAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGlu
Z0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLmdldCgpKSk7Cisg
ICAgICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGRvd25jYXN0PFJlbmRl
ckxheWVyU2Nyb2xsYWJsZT4oZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci5nZXQoKSktPnNj
cm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0
Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbGFzdENsaXBMYXll
clJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMTM5MCw3ICsxMzk2LDkgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21w
b3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFBvc2l0
aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkgLSBwYXJlbnRMYXll
ckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNl
dFNpemUocm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShzY3JvbGxDb250YWluZXJCb3gud2lkdGgo
KSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdodCgpKSkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLnNjcm9sbE9mZnNldCgpOworICAgICAgICBB
U1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAg
IGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4o
bV9vd25pbmdMYXllcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTQw
NCw3ICsxNDEyLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAKICAgICAgICAgYm9vbCBwYWRk
aW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCi0gICAgICAgIEludFNpemUg
c2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5ZXIuc2Ny
b2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUoc2Nyb2xsYWJsZUxheWVy
LnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFk
ZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0ODksMTQgKzE0OTcsMTggQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9m
ZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVy
LmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGlmICghaXM8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlPihtX293bmluZ0xheWVyKTsKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcg
aXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVy
IGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAg
ICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5n
TGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhlIGNvbnRl
bnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwgcmF0aGVyIHRo
YW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3Jv
bGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6
U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQo
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkxMSwx
MiArMTkyMywxNiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNj
cm9sbGJhcihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxT
Y3JvbGxiYXIoKSk7CisgICAgaWYgKCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVy
KS5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVx
dWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFy
KGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikudmVydGljYWxT
Y3JvbGxiYXIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9s
bENvcm5lckxheWVyKCkgY29uc3QKQEAgLTE5MjQsMTIgKzE5NDAsMTYgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICgh
aXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJs
ZUxheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3Qo
KTsKICAgICBpZiAoY29ybmVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBtX293bmluZ0xheWVyLnZlcnRpY2FsU2Ny
b2xsYmFyKCk7Ci0gICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRp
Y2FsU2Nyb2xsYmFyIDogbV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNj
cm9sbGJhciA6IHNjcm9sbGFibGVMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0
dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMTk2NSwx
MCArMTk4NSwxMyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQg
fD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3Jv
bGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9v
d25pbmdMYXllcikpOworCisgICAgICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9IGRvd25jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CiAgICAgICAgIGlmIChob3Jp
em9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXll
ciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIs
IEhvcml6b250YWxTY3JvbGxiYXIpOwogICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXll
ckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3Jv
bGxiYXJMYXllckRpZENoYW5nZShzY3JvbGxhYmxlTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsK
ICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKQEAgLTE5NzYsNyArMTk5OSwxMCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIu
aGFzU2Nyb2xsYmFycygpKQorICAgIGlmICghaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293
bmluZ0xheWVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHNjcm9sbGFibGVMYXllciA9
IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcik7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4KQEAgLTE5OTgsMTYg
KzIwMjQsMTYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFyZSByZWxhdGl2ZSB0
byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25pbmdMYXllci5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLm92
ZXJmbG93Q29udHJvbHNSZWN0cygpOwogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigq
bGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNl
dERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTIxNjUsNyArMjE5MSw4IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Nj
cm9sbGluZ0xheWVycykKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldEFuY2hv
clBvaW50KHsgfSk7CiAgICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPmFkZENoaWxkKCpt
X3Njcm9sbGVkQ29udGVudHNMYXllcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29tcG9zaXRv
cigpLndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKG1fb3duaW5nTGF5ZXIsICp0
aGlzKTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdM
YXllcikpOworICAgICAgICBjb21wb3NpdG9yKCkud2lsbFJlbW92ZVNjcm9sbGluZ0xheWVyV2l0
aEJhY2tpbmcoZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSwg
KnRoaXMpOwogCiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxDb250YWluZXJMYXll
ci5nZXQoKSk7CiAgICAgICAgIHdpbGxEZXN0cm95TGF5ZXIobV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXIuZ2V0KCkpOwpAQCAtMjE3NCw5ICsyMjAxLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVTY3JvbGxpbmdMYXllcnMoYm9vbCBuZWVkc1Njcm9sbGluZ0xheWVycykKICAgICAg
ICAgR3JhcGhpY3NMYXllcjo6dW5wYXJlbnRBbmRDbGVhcihtX3Njcm9sbGVkQ29udGVudHNMYXll
cik7CiAgICAgfQogCi0gICAgaWYgKG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXIpCi0gICAgICAgIGNv
bXBvc2l0b3IoKS5kaWRBZGRTY3JvbGxpbmdMYXllcihtX293bmluZ0xheWVyKTsKLSAgICAKKyAg
ICBpZiAobV9zY3JvbGxDb250YWluZXJMYXllcikgeworICAgICAgICBBU1NFUlQoaXM8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihtX293bmluZ0xheWVyKSk7CisgICAgICAgIGNvbXBvc2l0b3IoKS5k
aWRBZGRTY3JvbGxpbmdMYXllcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3du
aW5nTGF5ZXIpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjk4NSw4ICsz
MDE0LDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJ
blJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKICAgICB9CiAKICAgICBpZiAobV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVu
dCgpKSB7CisgICAgICAgIEFTU0VSVChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5n
TGF5ZXIpKTsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVk
UmVjdEZvclBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVk
Q29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsK
KyAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9m
ZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKGRvd25jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNl
dEZyb21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAg
LTMwMzIsOCArMzA2MiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5
ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAo
JmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVy
Q29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAg
ICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJl
Z2lvbkNvbnRleHQpCi0gICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNv
bnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVy
RmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisgICAgICAgICAgICBpZiAoaXM8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoZG93bmNh
c3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbGF5
ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8
IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKQEAg
LTMzMjMsMTcgKzMzNTUsMjMgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgICAg
IHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAogICAgIH0gZWxz
ZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9vd25pbmdMYXllcikpOworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpLmhvcml6b250YWxTY3JvbGxi
YXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIg
PT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsK
KyAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9vd25pbmdMYXllcikp
OworICAgICAgICBwYWludFNjcm9sbGJhcihkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+
KG1fb3duaW5nTGF5ZXIpLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIEFTU0VSVChp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KG1fb3duaW5nTGF5ZXIpKTsKKyAgICAgICAgYXV0byYg
c2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihtX293bmlu
Z0xheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlv
dXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5z
Zm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25p
bmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50
UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6
ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBl
ZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci5wYWlu
dFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAj
aWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcAppbmRleCBhMmI1OGU2NjY5MDY4NWZjZTZiMWE4ODM0OWM3ZmYzY2U2ODUyMjZhLi42ZWNm
YzBmNzI4M2JkOWUxYjY3YjAxOTNmMWRmNDAyM2MxMDNlZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMzE1Myw3ICsz
MTUzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0
CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYg
KCFpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSB8fCAhZG93bmNhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihsYXllcikuY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocXVlcnlEYXRhLmxheW91dFVwVG9EYXRlID09IExh
eW91dFVwVG9EYXRlOjpObykgewpAQCAtMzI5Myw3ICszMjkzLDkgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGwKIAogc3RhdGljIGJvb2wgaXNTY3JvbGxlZEJ5T3ZlcmZsb3dTY3JvbGxMYXllcihj
b25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBvdmVyZmxvd1Njcm9s
bExheWVyKQogewotICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29wZSgpID09IG92ZXJm
bG93U2Nyb2xsTGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOworICAgIEFTU0VSVChpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVy
U2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikpOworICAgIHJldHVybiBkb3duY2FzdDxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS5ib3hTY3JvbGxpbmdTY29wZSgpID09IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ob3ZlcmZsb3dTY3JvbGxMYXllcikuY29udGVudHNT
Y3JvbGxpbmdTY29wZSgpOwogfQogCiBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBv
c2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRl
ckxheWVyJiBpbnRlcm1lZGlhdGVMYXllciwgYm9vbCYgc2F3SW50ZXJtZWRpYXRlTGF5ZXIpCkBA
IC00MjM4LDcgKzQyNDAsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICAgICAgcm9vdExheWVyLT5ub3RlRGV2aWNlT3JQ
YWdlU2NhbGVGYWN0b3JDaGFuZ2VkSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlbW92ZUZyb21TY3JvbGxDb29yZGluYXRlZExheWVycyhS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVtb3ZlRnJv
bVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAobV9sZWdhY3lTY3JvbGxpbmdMYXll
ckNvb3JkaW5hdG9yKQpAQCAtNDU2Nyw4ICs0NTY5LDExIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JWaWV3cG9ydENvbnN0cmFp
bmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3Jv
bGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBh
bmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBhbmNlc3RvckxheWVyIG5lZWRz
IHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxkIGJlY29tZSBhIHJlZmVyZW5jZS4KLSAg
ICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5
b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7CisgICAgaWYgKCFhbmNlc3RvckxheWVyKSB7
CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KGxheWVyKS52aXNpYmxlU2l6ZSgpKSk7CisgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CisgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBp
ZiAoaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ1ODgsMTEgKzQ1OTMsMTQg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91
bmRMYXllcigpLCBjbGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAg
IGZyYW1lVmlldy5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSA/IGRvd25j
YXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4oJmxheWVyKSA6IG51bGxwdHI7CisKICAgICAgICAg
YXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAog
ICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9s
bGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXll
ci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXIgPyBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDog
bnVsbHB0ciwKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllciA/IHNjcm9sbGFibGVMYXllci0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0ciB9KTsKICAgICB9CiB9CiAKQEAg
LTQ2MzAsOCArNDYzOCwxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1
cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29y
ZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9t
ZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkg
eworICAgICAgICAgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKTsK
KyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xs
YWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obGF5ZXIpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdOb2RlSUQ7CkBA
IC00NzY3LDIwICs0Nzc3LDIxIEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
eW5jaHJvbm91c1Njcm9sbGluZ05vZGVzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gcmVsZXZhbnRTY3JvbGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikgeworICAgIGF1dG8gcmVsZXZhbnRTY3Jv
bGxpbmdTY29wZSA9IFtdKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpIHsKICAgICAgICAgaWYgKCZsYXllci5yZW5kZXJlcigp
ID09ICZyZW5kZXJlcikKICAgICAgICAgICAgIHJldHVybiBsYXllci5ib3hTY3JvbGxpbmdTY29w
ZSgpOwogICAgICAgICByZXR1cm4gbGF5ZXIuY29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAg
IH07CiAKLSAgICBhdXRvIHJvb3RTY3JvbGxpbmdTY29wZSA9IG1fcmVuZGVyVmlldy5sYXllcigp
LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVyKCkpKTsKKyAgICBhdXRvIHJvb3RTY3JvbGxpbmdT
Y29wZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obV9yZW5kZXJWaWV3LmxheWVy
KCkpLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAKICAgICBmb3IgKGF1dG8mIHJlbmRlcmVy
IDogKnNsb3dSZXBhaW50T2JqZWN0cykgewogICAgICAgICBhdXRvIGxheWVyID0gcmVuZGVyZXIu
ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgaWYgKCFsYXll
ciB8fCAhaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBhdXRvIHNjcm9sbGluZ1Njb3BlID0gcmVsZXZhbnRTY3JvbGxpbmdT
Y29wZShyZW5kZXJlciwgKmxheWVyKTsKKyAgICAgICAgYXV0byBzY3JvbGxpbmdTY29wZSA9IHJl
bGV2YW50U2Nyb2xsaW5nU2NvcGUocmVuZGVyZXIsICpkb3duY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGU+KGxheWVyKSk7CiAgICAgICAgIGlmIChzY3JvbGxpbmdTY29wZSAhPSByb290U2Nyb2xs
aW5nU2NvcGUpIHsKICAgICAgICAgICAgIGF1dG8gZW5jbG9zaW5nU2Nyb2xsaW5nTm9kZUlEID0g
YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKHJlbmRlcmVyKTsKICAgICAgICAgICAgIEFT
U0VSVChlbmNsb3NpbmdTY3JvbGxpbmdOb2RlSUQpOwpAQCAtNDgwNCwxMCArNDgxNSwxMiBAQCBT
Y3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNj
cm9sbGluZ05vZGVJRChTY3JvbGxpbgogICAgIGlmIChub2RlSUQgPT0gbV9yZW5kZXJWaWV3LmZy
YW1lVmlldygpLnNjcm9sbGluZ05vZGVJRCgpKQogICAgICAgICByZXR1cm4gJm1fcmVuZGVyVmll
dy5mcmFtZVZpZXcoKTsKIAotICAgIHJldHVybiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdl
dChub2RlSUQpLmdldCgpOworICAgIGF1dG8qIHJlc3VsdCA9IG1fc2Nyb2xsaW5nTm9kZVRvTGF5
ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVzdWx0KSk7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4ocmVzdWx0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJC
YWNraW5nJiBiYWNraW5nKQordm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVT
Y3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIsIFJl
bmRlckxheWVyQmFja2luZyYgYmFja2luZykKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDgyMyw3ICs0ODM2LDcgQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJlbmRl
ckxheWVyJiBsYXkKIH0KIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBjYWxsZWQg
ZnJvbSB0aGUgdXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeS4KLXZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6ZGlkQWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJiBsYXllcikKIHsKICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNDkzOCw3ICs0OTUxLDcgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxp
bmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxsVmlld3BvcnRDb25zdHJhaW5lZExheWUK
ICAgICBtX2Nocm9tZUNsaWVudC51cGRhdGVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXJzKGxheWVy
TWFwLCB7IH0pOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0
b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllcikKK3ZvaWQgTGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIoUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlJiBsYXllcikKIHsKICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIu
YmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKQEAgLTQ5NjUsMTIgKzQ5NzgsMTIgQEAg
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1bnJlZ2lzdGVyQWxs
U2Nyb2xsaW5nTGF5ZXJzKCkKICAgICB9CiB9CiAKLXZvaWQgTGVnYWN5V2ViS2l0U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcjo6YWRkU2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImIGxheWVyKQor
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjphZGRTY3JvbGxpbmdM
YXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxheWVyKQogewogICAgIG1fc2Nyb2xsaW5nTGF5
ZXJzLmFkZCgmbGF5ZXIpOwogfQogCi12b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVy
TGF5ZXJCYWNraW5nJiBiYWNraW5nKQordm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjpyZW1vdmVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmIGxh
eWVyLCBSZW5kZXJMYXllckJhY2tpbmcmIGJhY2tpbmcpCiB7CiAgICAgaWYgKG1fc2Nyb2xsaW5n
TGF5ZXJzLnJlbW92ZSgmbGF5ZXIpKSB7CiAgICAgICAgIGF1dG8qIHNjcm9sbENvbnRhaW5lckxh
eWVyID0gYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCk7CkBA
IC00OTc5LDcgKzQ5OTIsNyBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIH0KIH0KIAot
dm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZW1vdmVMYXllcihS
ZW5kZXJMYXllciYgbGF5ZXIpCit2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRp
bmF0b3I6OnJlbW92ZUxheWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYgbGF5ZXIpCiB7CiAgICAg
cmVtb3ZlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIsICpsYXllci5iYWNraW5nKCkpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggN2E4
NWIyNjk2YzY4YWE0MGQ0MjgxZjNiYzIyYzZiY2Q2Yjg4MDA1YS4uNTk2OWVhOWVmNTYwNGY0Nzdh
MzBjYmJiNTViOWNiNzNjZjBhMjE0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXJDbGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyVXBkYXRlci5oIgog
I2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtMTIxLDIwICsx
MjEsMjAgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsK
ICAgICB2b2lkIHVucmVnaXN0ZXJBbGxTY3JvbGxpbmdMYXllcnMoKTsKICAgICAKLSAgICB2b2lk
IGFkZFNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJik7Ci0gICAgdm9pZCByZW1vdmVTY3JvbGxp
bmdMYXllcihSZW5kZXJMYXllciYsIFJlbmRlckxheWVyQmFja2luZyYpOworICAgIHZvaWQgYWRk
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJik7CisgICAgdm9pZCByZW1vdmVT
Y3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUmLCBSZW5kZXJMYXllckJhY2tpbmcm
KTsKIAogICAgIHZvaWQgYWRkVmlld3BvcnRDb25zdHJhaW5lZExheWVyKFJlbmRlckxheWVyJik7
CiAgICAgdm9pZCByZW1vdmVWaWV3cG9ydENvbnN0cmFpbmVkTGF5ZXIoUmVuZGVyTGF5ZXImKTsK
IAotICAgIHZvaWQgcmVtb3ZlTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHJlbW92ZUxh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgdXBkYXRl
U2Nyb2xsaW5nTGF5ZXIoUmVuZGVyTGF5ZXImKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGluZ0xh
eWVyKFJlbmRlckxheWVyU2Nyb2xsYWJsZSYpOwogCiAgICAgQ2hyb21lQ2xpZW50JiBtX2Nocm9t
ZUNsaWVudDsKIAotICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3Njcm9sbGluZ0xheWVyczsK
KyAgICBIYXNoU2V0PFJlbmRlckxheWVyU2Nyb2xsYWJsZSo+IG1fc2Nyb2xsaW5nTGF5ZXJzOwog
ICAgIEhhc2hTZXQ8UmVuZGVyTGF5ZXIqPiBtX3ZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CiAK
ICAgICBjb25zdCBib29sIG1fY29vcmRpbmF0ZVZpZXdwb3J0Q29uc3RyYWluZWRMYXllcnM7CkBA
IC0zNTMsMTAgKzM1MywxMCBAQCBwdWJsaWM6CiAKICAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEKSBjb25zdDsKIAotICAg
IHZvaWQgcmVtb3ZlRnJvbVNjcm9sbENvb3JkaW5hdGVkTGF5ZXJzKFJlbmRlckxheWVyJik7Cisg
ICAgdm9pZCByZW1vdmVGcm9tU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcnMoUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlJik7CiAKLSAgICB2b2lkIHdpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5n
KFJlbmRlckxheWVyJiwgUmVuZGVyTGF5ZXJCYWNraW5nJik7Ci0gICAgdm9pZCBkaWRBZGRTY3Jv
bGxpbmdMYXllcihSZW5kZXJMYXllciYpOworICAgIHZvaWQgd2lsbFJlbW92ZVNjcm9sbGluZ0xh
eWVyV2l0aEJhY2tpbmcoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlJiwgUmVuZGVyTGF5ZXJCYWNraW5n
Jik7CisgICAgdm9pZCBkaWRBZGRTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllclNjcm9sbGFibGUm
KTsKIAogICAgIHZvaWQgcmVzZXRUcmFja2VkUmVwYWludFJlY3RzKCk7CiAgICAgdm9pZCBzZXRU
cmFja3NSZXBhaW50cyhib29sIHRyYWNrc1JlcGFpbnRzKSB7IG1faXNUcmFja2luZ1JlcGFpbnRz
ID0gdHJhY2tzUmVwYWludHM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAyYzU5YTQ4NDZhZjg0NDc1NWVmNzMxMDRh
YWY0YTA4MTUxYThjYjFkLi5jNTAyZWE1NmZhZDEzYjgxMjQzZDJiMzQwYTcwZDZlYmQwOTAwZmU3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCkBAIC05NSw3ICs5NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
ZGVzdHJveUxheWVyKCkKIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y3JlYXRlTGF5ZXIo
KQogewogICAgIEFTU0VSVCghbV9sYXllcik7Ci0gICAgbV9sYXllciA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXI+KCp0aGlzKTsKKyAgICAvLyBGSVhNRTogSG9vayBpbiBvcHRpbWl6YXRpb24gdG8g
b25seSBjcmVhdGUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLCBpZiBuZWNlc3NhcnkuCisgICAgbV9s
YXllciA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPigqdGhpcyk7CiAgICAgc2V0
SGFzTGF5ZXIodHJ1ZSk7CiAgICAgbV9sYXllci0+aW5zZXJ0T25seVRoaXNMYXllcihSZW5kZXJM
YXllcjo6TGF5ZXJDaGFuZ2VUaW1pbmc6OlN0eWxlQ2hhbmdlKTsKIH0KQEAgLTIwOCw5ICsyMDks
MTAgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9s
ZFN0eWxlICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRl
KCpvbGRTdHlsZSwgbmV3U3R5bGUpKSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVy
TGF5ZXIgPSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9m
ZnNldHMoKTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KTsKKyAgICAgICAgaWYgKGxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXll
cigpKSkgeworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNE
b2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1l
VmlldyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVT
bmFwT2Zmc2V0cygpOwpAQCAtMjIzLDggKzIyNSwxMSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxP
YmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dAogICAgICAgICBpZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7
CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5z
dHlsZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVz
cyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9s
bFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAg
c2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmxheWVyKCkgJiYgaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihzY3JvbGxTbmFwQm94LT5sYXllcigpKSkgeworICAgICAgICAgICAgICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHNj
cm9sbFNuYXBCb3gtPmxheWVyKCkpOworICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5p
c0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFNu
YXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29yZGluYXRvclNjcm9s
bFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQz
NzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li40MjM1ZGQyOGVlNWU1NWViYTQyMDRjNDg3ZDU2YzYy
YmQ2OTFlMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKQEAgLTI4LDYgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJMYXllcjsKK2NsYXNzIFJlbmRlckxheWVy
U2Nyb2xsYWJsZTsKIAogc3RydWN0IFJlcGFpbnRMYXlvdXRSZWN0cyB7CiAgICAgTGF5b3V0UmVj
dCBtX3JlcGFpbnRSZWN0OyAvLyBUaGlzIHJlY3QgaXMgY2xpcHBlZCBieSBlbmNsb3Npbmcgb2Jq
ZWN0cyAoZS5nLiwgb3ZlcmZsb3c6aGlkZGVuKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4MzJjMTliNDlj
OTIwYTZhYWYwNTRlNDRlZTkyNWZjZDUxZTllOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGUuY3BwCkBAIC0wLDAgKzEsMjA4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KKyAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZl
bHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1z
CisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZv
dW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0
cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hp
Y2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBs
aWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ug
b2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Yg
b25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5v
dCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVu
ZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBw
cm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICog
b3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBj
YXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3Zl
LCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgbmV4dFNjcm9sbGluZ1Njb3BlKCkK
K3sKKyAgICBzdGF0aWMgU2Nyb2xsaW5nU2NvcGUgY3VycmVudFNjb3BlID0gMDsKKyAgICByZXR1
cm4gKytjdXJyZW50U2NvcGU7Cit9CisKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKTsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0KQorICAgIDogUmVuZGVyTGF5ZXIocmVuZGVyZXJMYXllck1vZGVsT2JqZWN0
LCBSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlKQorICAgICwgbV9pblJlc2l6ZU1v
ZGUoZmFsc2UpCisgICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9p
bk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YShmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKK3sKKyAgICBtX2lzU2Vs
ZlBhaW50aW5nTGF5ZXIgPSBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICBpZiAo
aXNSZW5kZXJWaWV3TGF5ZXIoKSkKKyAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29wZSgpOworCisgICAgaWYgKEVs
ZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgeworICAgICAgICAvLyBXZSBz
YXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xs
IHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxl
bWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQ
b3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVu
dFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7CisgICAgfQorfQorCitSZW5kZXJMYXllclNj
cm9sbGFibGU6On5SZW5kZXJMYXllclNjcm9sbGFibGUoKQoreworICAgIGlmIChpblJlc2l6ZU1v
ZGUoKSkKKyAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxh
eWVyRGVzdHJveWVkKCk7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
PT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0
aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5
ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJl
cigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNj
cm9sbENvcm5lcigpOworICAgIGNsZWFyUmVzaXplcigpOworCisgICAgLy8gU2VlIHRoZSBjb21t
ZW50IGluIFJlbmRlckxheWVyOjpkZXN0cm95KCkgd2h5IHRoaXMgaXMgbmVlZGVkLgorICAgIFJl
bmRlckxheWVyOjpkZXN0cm95KCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
Ojp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVy
biBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gt
PmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpj
b250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCks
IHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1p
bihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBp
ZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6
ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgp
LmhlaWdodCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGlu
c3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXpl
LndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KKyAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOworfQorCitzdGF0aWMgaW5saW5l
IGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBU
aGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1v
emlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIu
eG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRq
dXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1
c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4o
YWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkp
IC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVk
RGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0
PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVs
dGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0
IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uKCk7CisgICAgCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBr
bm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3Rh
dGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91
c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAg
ICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAg
ICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNv
dXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhl
aWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEu
c2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxCeVJl
Y3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVk
QXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyKCku
cGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsK
KyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAg
IC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5
ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBhcmVudCgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4K
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpZZXMpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVu
ZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBo
ZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRp
Y2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cg
Y2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUg
c2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNjcm9sbEJ5
KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxl
ZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklY
TUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkg
bG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGU6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnN0YXRpY19jYXN0PFJlbmRlckxheWVy
Kj4odGhpcykgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOworCisgICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZz
ZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZz
ZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQg
PyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVB
bmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwor
ICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAg
IFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zm
c2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1h
dGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBj
bGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFs
dWUoKSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0Owor
fQorCitSZW5kZXJMYXllclNjcm9sbGFibGUqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAoreworICAgIFJlbmRlclRy
ZWVNdXRhdGlvbkRpc2FsbG93ZWRTY29wZSByZW5kZXJUcmVlTXV0YXRpb25EaXNhbGxvd2VkU2Nv
cGU7CisKKyAgICBhdXRvIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUgPSBbXShjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIpIHsKKyAgICAgICAgcmV0dXJuIGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVy
ZXIoKSkgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKS5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB9OworCisgICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQorICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGUqPih0aGlzKTsKKworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJv
dW5kYXJpZXMpKSB7CisgICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpuZXh0TGF5
ZXIpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihuZXh0
TGF5ZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFi
bGU+KG5leHRMYXllcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hh
bmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxl
QXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBpZiAocmVh
c29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Cisg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxk
cmVuKHRydWUpOworICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzU2Nyb2xs
YWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250
YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3go
KS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAo
aGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAm
JiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdp
b25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNp
dHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhh
c1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAg
ICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9
IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5n
Rm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21h
dGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRW
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2Ug
eworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNj
cm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisg
ICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xs
YmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRl
IHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9s
bGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9v
dCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAg
ICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2Vu
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNj
cm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7CisgICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Cisg
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQor
ICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24p
OworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0g
bnVsbHB0cjsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxi
YXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNI
aWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGU6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7
Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OworCisgICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQor
eworICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3go
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRM
YXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlPihuZXh0TGF5ZXIpICYmIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJs
ZT4obmV4dExheWVyKS0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJl
dHVybiByZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50
cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOworfQorI2VuZGlmCisK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50
KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNj
cm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRp
ZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmRpZEVuZFNjcm9sbCgpCit7CisgICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92
ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpkaWRVcGRh
dGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3Jv
bGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgcGFn
ZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9
CisjZW5kaWYKKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJl
cigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3Jl
aWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZM
T1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkg
fHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3Jv
bGwoKSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitpbnQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAg
ICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAg
ICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlz
T3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJh
clNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIo
KS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkg
Y29uc3QKK3sKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2Nh
bFBvaW50KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3Rz
LnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENv
cm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFy
ICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAg
ICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJl
c3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Cisg
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
CisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAorICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisg
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsK
KyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNj
cm9sbGFibGU+KHBhaW50aW5nUm9vdCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXll
clNjcm9sbGFibGU+KHBhaW50aW5nUm9vdCktPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sg
aXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNl
LgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAg
ICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsK
KworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9y
bWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1l
cworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0
IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5z
IGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2Un
cmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVt
LgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIg
JiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGgg
d2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5
IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICAKKyAgICAv
LyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Ny
b2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNl
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1Jl
Y3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQp
OworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWlu
dEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2Ug
aGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hh
dCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAg
ICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNS
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50UmVzaXplcihHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVy
QWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xU
aW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4
dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVz
aXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQu
CisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Vz
IG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZC
YXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Cisg
ICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAg
IGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAx
X2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0
KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworLy8gVGhpcyBpcyBj
YWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBT
Y3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAg
IGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4g
Y2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
eworICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBp
ZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBzZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIp
Cit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjYW5S
ZXNpemUoKSBjb25zdAoreworICAgIC8vIFdlIG5lZWQgYSBzcGVjaWFsIGNhc2UgZm9yIDxpZnJh
bWU+IGJlY2F1c2UgdGhleSBuZXZlciBoYXZlCisgICAgLy8gaGFzT3ZlcmZsb3dDbGlwKCkuIEhv
d2V2ZXIsIHRoZXkgZG8gImltcGxpY2l0bHkiIGNsaXAgdGhlaXIgY29udGVudHMsIHNvCisgICAg
Ly8gd2Ugd2FudCB0byBhbGxvdyByZXNpemluZyB0aGVtIGFsc28uCisgICAgcmV0dXJuIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCkuaXNSZW5kZXJJRnJhbWUoKSkg
JiYgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBwb3NzaWJsZSBvbiBnZW5lcmF0ZWQgY29udGVudCBidXQgaXMgbm90IHJpZ2h0
IG5vdy4KKyAgICBpZiAoIWluUmVzaXplTW9kZSgpIHx8ICFjYW5SZXNpemUoKSB8fCAhcmVuZGVy
ZXIoKS5lbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGUgb25s
eSBjYXNlIHdoZXJlIHJlbmRlcmVyLT5lbGVtZW50KCktPnJlbmRlcmVyKCkgIT0gcmVuZGVyZXIg
aXMgd2l0aCBjb250aW51YXRpb25zLiBEbyB0aGV5IG1hdHRlciBoZXJlPworICAgIC8vIElmIHRo
ZXkgZG8gaXQgd291bGQgc3RpbGwgYmUgYmV0dGVyIHRvIGRlYWwgd2l0aCB0aGVtIGV4cGxpY2l0
bHkuCisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGF1
dG8qIHJlbmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyQm94PihlbGVtZW50LT5yZW5kZXJlcigpKTsK
KworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYg
KCFkb2N1bWVudC5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS5tb3VzZVByZXNzZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQgem9vbUZhY3RvciA9IHJlbmRlcmVyLT5zdHlsZSgpLmVm
ZmVjdGl2ZVpvb20oKTsKKworICAgIGF1dG8gYWJzb2x1dGVQb2ludCA9IGRvY3VtZW50LnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhldnQucG9zaXRpb24oKSk7CisgICAgYXV0byBsb2NhbFBvaW50
ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Db250ZW50cyhhYnNvbHV0ZVBvaW50KSk7CisK
KyAgICBMYXlvdXRTaXplIG5ld09mZnNldCA9IG9mZnNldEZyb21SZXNpemVDb3JuZXIobG9jYWxQ
b2ludCk7CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKG5ld09mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvcik7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodChuZXdPZmZzZXQuaGVpZ2h0KCkgLyB6b29t
RmFjdG9yKTsKKyAgICAKKyAgICBMYXlvdXRTaXplIGN1cnJlbnRTaXplID0gTGF5b3V0U2l6ZShy
ZW5kZXJlci0+d2lkdGgoKSAvIHpvb21GYWN0b3IsIHJlbmRlcmVyLT5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgIExheW91dFNpemUgbWluaW11bVNpemUgPSBlbGVtZW50LT5taW5pbXVtU2l6
ZUZvclJlc2l6aW5nKCkuc2hydW5rVG8oY3VycmVudFNpemUpOworICAgIGVsZW1lbnQtPnNldE1p
bmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOworICAgIAorICAgIExheW91dFNpemUg
YWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZh
Y3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBuZXdPZmZzZXQu
c2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKKyAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQu
c2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkpOworICAgIH0KKyAgICAKKyAgICBM
YXlvdXRTaXplIGRpZmZlcmVuY2UgPSAoY3VycmVudFNpemUgKyBuZXdPZmZzZXQgLSBhZGp1c3Rl
ZE9sZE9mZnNldCkuZXhwYW5kZWRUbyhtaW5pbXVtU2l6ZSkgLSBjdXJyZW50U2l6ZTsKKworICAg
IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihl
bGVtZW50KTsKKyAgICBib29sIGlzQm94U2l6aW5nQm9yZGVyID0gcmVuZGVyZXItPnN0eWxlKCku
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpCb3JkZXJCb3g7CisKKyAgICBSZXNpemUgcmVzaXpl
ID0gcmVuZGVyZXItPnN0eWxlKCkucmVzaXplKCk7CisgICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6
OlZlcnRpY2FsICYmIGRpZmZlcmVuY2Uud2lkdGgoKSkgeworICAgICAgICBpZiAoaXM8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAvLyBNYWtlIGltcGxp
Y2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgorICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsIHJlbmRlcmVy
LT5tYXJnaW5MZWZ0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9yLCBDU1NVbml0
VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgfQorICAgICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9
IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKKyAgICAgICAgYmFzZVdpZHRo
ID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCAr
IGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAg
IGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
IHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewor
ICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxp
Y2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4K
KyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRv
bSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAg
ICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6
aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRl
bnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhl
aWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOworICAgIH0KKworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwor
CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xs
IHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJz
b3IgaW4gdmlldy4KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpCit7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIHVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjb25zdCBMYXlvdXRSZWN0JiBib3VuZHMp
Cit7CisgICAgbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMudW5pdGUoZW5jbG9zaW5nSW50UmVj
dChib3VuZHMpKTsKK30KKworc3RhdGljIHZvaWQgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0
aW9uR2Fwc0JvdW5kcyhSZW5kZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXll
ciogY2hpbGQgPSBsYXllci0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGls
ZCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+
Y2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVjdXJzaXZlbHlDbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcyhjaGlsZCk7CisgICAg
fQorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKQoreworICAgIG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzID0gSW50UmVjdCgp
OworICAgIHJlY3Vyc2l2ZWx5Q2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHModGhpcyk7Cit9
CisKK3N0YXRpYyB2b2lkIHJlY3Vyc2l2ZWx5UmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcyhSZW5k
ZXJMYXllciogbGF5ZXIpCit7CisgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBsYXllci0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAg
ICAgICBpZiAoaXM8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihjaGlsZCkpCisgICAgICAgICAgICBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGNoaWxkKS0+cmVwYWludEJsb2NrU2VsZWN0
aW9uR2FwcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZWN1cnNpdmVseVJlcGFpbnRC
bG9ja1NlbGVjdGlvbkdhcHMoY2hpbGQpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGU6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQoreworICAgIHJlY3Vyc2l2ZWx5
UmVwYWludEJsb2NrU2VsZWN0aW9uR2Fwcyh0aGlzKTsKKyAgICBpZiAobV9ibG9ja1NlbGVjdGlv
bkdhcHNCb3VuZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRSZWN0
IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKKyAgICByZWN0Lm1vdmVCeSgtc2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
IXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgp
LCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlm
IChyZW5kZXJlcigpLmhhc0NsaXAoKSkKKyAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7
IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgorICAgIGlmICghcmVjdC5pc0Vt
cHR5KCkpCisgICAgICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCisg
ICAgICAgIHJldHVybjsKKworICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlz
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitHcmFwaGljc0xh
eWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGU6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJM
YXllclNjcm9sbGFibGU6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2JhY2tpbmcgPyBt
X2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOworfQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVzZXNBc3luY1Njcm9sbGluZygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zv
ckxheWVyKCp0aGlzKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCitTdHJpbmcgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUmVu
ZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92
ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNB
dXRvbWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmll
bnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxi
YXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDog
c3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9
IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBz
ZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBv
dmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGU6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNl
bHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBl
YXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93
IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVy
Zmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2lu
ZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtl
ZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAg
IGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAm
JiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29s
IG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFz
VmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Ym94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJs
YXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5
IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdl
IG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIg
JiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFy
ICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3Jv
bGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3Zl
cmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNh
bE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwg
dGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgaWYgKG1faEJhciAm
JiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigp
LnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVk
KGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVo
YXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBv
ciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1
dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRv
VmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgdXBkYXRl
U2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKKwor
ICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpB
dXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykg
eworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJl
cigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJl
bnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJv
eD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Cisg
ICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXAp
LgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6
OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxi
YXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQ
cm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7CisgICAgfQorICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94
LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFn
ZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJMYXllciog
bGF5ZXIsIFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFJlbmRlckxh
eWVyU2Nyb2xsYWJsZTo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdz
KQoreworICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gbGF5ZXItPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckxheWVyU2Nyb2xsYWJsZT4oY2hpbGQpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihjaGlsZCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
Z2VvbWV0cnlNYXAsIGZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVjdXJzaXZl
bHlVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKGNoaWxkLCBnZW9tZXRyeU1hcCwgZmxh
Z3MpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQoreworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBj
b3JuZXIgY2FzZXMgd2hlcmUKKyAgICAvLyB0aGVzZSBmbGFncyBhcmUgc3RpbGwgZGlydHkuIFVw
ZGF0ZSBzbyB0aGF0IHRoZSBjaGVjayBiZWxvdyBpcyB2YWxpZC4KKyAgICB1cGRhdGVEZXNjZW5k
YW50RGVwZW5kZW50RmxhZ3MoKTsKKworICAgIC8vIElmIHdlIGhhdmUgbm8gdmlzaWJsZSBjb250
ZW50IGFuZCBubyB2aXNpYmxlIGRlc2NlbmRhbnRzLCB0aGVyZSBpcyBubyBwb2ludCByZWNvbXB1
dGluZworICAgIC8vIG91ciByZWN0YW5nbGVzIGFzIHRoZXkgd2lsbCBiZSBlbXB0eS4gSWYgb3Vy
IHZpc2liaWxpdHkgY2hhbmdlcywgd2UgYXJlIGV4cGVjdGVkIHRvCisgICAgLy8gcmVjb21wdXRl
IGFsbCBvdXIgcG9zaXRpb25zIGFueXdheS4KKyAgICBpZiAoIW1faGFzVmlzaWJsZURlc2NlbmRh
bnQgJiYgIW1faGFzVmlzaWJsZUNvbnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
cG9zaXRpb25DaGFuZ2VkID0gdXBkYXRlTGF5ZXJQb3NpdGlvbigpOworICAgIGlmIChwb3NpdGlv
bkNoYW5nZWQpCisgICAgICAgIGZsYWdzLmFkZChIYXNDaGFuZ2VkQW5jZXN0b3IpOworCisgICAg
aWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgSGFzQ2hhbmdlZEFuY2VzdG9yLCBIYXNTZWVuVmlld3Bv
cnRDb25zdHJhaW5lZEFuY2VzdG9yLCBJc092ZXJmbG93U2Nyb2xsIH0pKQorICAgICAgICBjbGVh
ckNsaXBSZWN0cygpOworCisgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5oYXNWaWV3cG9ydENv
bnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgZmxhZ3MuYWRkKEhhc1NlZW5WaWV3cG9ydENv
bnN0cmFpbmVkQW5jZXN0b3IpOworCisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgIGZsYWdzLmFkZChIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwKTsK
KyAgICAKKyAgICBib29sIHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgPSAoZmxhZ3MuY29udGFp
bnMoSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvcikgfHwgZmxhZ3MuY29udGFpbnNB
bGwoeyBJc092ZXJmbG93U2Nyb2xsLCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIH0p
KSAmJiBpc1NlbGZQYWludGluZ0xheWVyKCk7CisgICAgYm9vbCBpc1Zpc3VhbGx5RW1wdHkgPSAh
aXNWaXN1YWxseU5vbkVtcHR5KCk7CisgICAgYm9vbCBzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3Mg
PSBnZW9tZXRyeU1hcCAmJiAoKHNob3VsZENvbXB1dGVSZXBhaW50UmVjdHMgJiYgIWlzVmlzdWFs
bHlFbXB0eSkgfHwgZmlyc3RDaGlsZCgpKTsKKyAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBp
bmdzKQorICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBw
YXJlbnQoKSk7CisKKyAgICBpZiAoc2hvdWxkQ29tcHV0ZVJlcGFpbnRSZWN0cykgeworICAgICAg
ICAvLyBXaGVuIHNjcm9sbGluZywgd2UgZG9uJ3QgY29tcHV0ZSByZXBhaW50IHJlY3RzIGZvciB2
aXN1YWxseSBub24tZW1wdHkgbGF5ZXJzLgorICAgICAgICBpZiAoaXNWaXN1YWxseUVtcHR5KQor
ICAgICAgICAgICAgY2xlYXJSZXBhaW50UmVjdHMoKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTog
V2UgY291bGQgdHJhY2sgdGhlIHJlcGFpbnQgY29udGFpbmVyIGFzIHdlIHdhbGsgZG93biB0aGUg
dHJlZS4KKyAgICAgICAgICAgIGNvbXB1dGVSZXBhaW50UmVjdHMocmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCksIGdlb21ldHJ5TWFwKTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5wbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIC8vIFdoZW4g
U2Nyb2xsVmlldydzIG1fcGFpbnRzRW50aXJlQ29udGVudHMgZmxhZyBmbGlwcyBkdWUgdG8gbGF5
ZXIgYmFja2luZyBjaGFuZ2VzLCB0aGUgcmVwYWludCBhcmVhIHRyYW5zaXRpb25zIGZyb20KKyAg
ICAgICAgLy8gdmlzdWFsIHRvIGxheW91dCBvdmVyZmxvdy4gV2hlbiB0aGlzIGhhcHBlbnMgdGhl
IGNhY2hlZCByZXBhaW50IHJlY3RzIGJlY29tZSBpbnZhbGlkIGFuZCB0aGV5IG5lZWQgdG8gYmUg
cmVjb21wdXRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xODgxMjEpLgorICAgICAgICAvLyBDaGVjayB0
aGF0IG91ciBjYWNoZWQgcmVjdHMgYXJlIGNvcnJlY3QuCisgICAgICAgIEFTU0VSVCghcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSB8fCByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRS
ZWN0cygpLm1fcmVwYWludFJlY3QgPT0gcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgICAgICBBU1NF
UlQoIXJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgfHwgcmVuZGVyZXIoKS5yZXBh
aW50TGF5b3V0UmVjdHMoKS5tX291dGxpbmVCb3ggPT0gcmVuZGVyZXIoKS5vdXRsaW5lQm91bmRz
Rm9yUmVwYWludChyZW5kZXJlcigpLmNvbnRhaW5lckZvclJlcGFpbnQoKSkpOworICAgIH0KKwor
ICAgIHJlY3Vyc2l2ZWx5VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCh0aGlzLCBnZW9t
ZXRyeU1hcCwgZmxhZ3MpOyAgICAKKworICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBvdXIgcmVmbGVj
dGlvbiBhcyBzY3JvbGxpbmcgaXMgYSB0cmFuc2xhdGlvbiB3aGljaCBkb2VzIG5vdCBjaGFuZ2Ug
dGhlIHNpemUoKQorICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwg
c3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwor
ICAgIC8vIHVwZGF0ZWQgYWJvdmUuCisKKyAgICBpZiAobV9tYXJxdWVlKSB7CisgICAgICAgIGJv
b2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OworICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIH0KKworICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCisgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOworCisgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLm1h
cmtlcnMoKS5pbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCk7Cit9CisKK1Njcm9sbE9mZnNl
dCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29u
c3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykK
K3sKKyAgICBpZiAoIWhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CisgICAgICAgIGlmIChm
cmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFn
bWVudC5iYWNrZ3JvdW5kUmVjdCk7CisgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250
ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBp
eGVsT2Zmc2V0KSksCisgICAgICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKKyAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9j
YWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKKyAgICB9Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAor
eworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNj
cm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJu
IHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhl
IHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAor
eworICAgIGlmICghY2FuUmVzaXplKCkgfHwgbGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50
UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Cisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0byBjb3Ju
ZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29u
c3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRG
cm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJS
ZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdt
ZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNp
emUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAg
ICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJv
eFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAt
IG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Qu
c2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXpl
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFn
bWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5G
cmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50Lmxh
eWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdt
ZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAgICAgICAg
ICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50
KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxTaXplLnNldFdp
ZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKKyAgICBt
X3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJm
bG93VG9wKCkpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0lu
dChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVm
dE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJs
ZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3Ao
KSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93
LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisgICAgCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6
OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
JiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAg
ICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJ
ZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVk
IHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIHJlbmRlckJveCgpLT5m
bGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIHJlbmRlcmVyKCkucmVwYWludFJl
Y3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJl
cGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNp
emVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmlzU2Ny
b2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3go
KSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRS
ZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAg
IHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisKKyAgICByZXR1cm4gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIElu
dFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0
Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGU6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBj
b25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHBvaW50OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5n
KCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xs
aW5nKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnZpc2libGVDb250ZW50
UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxi
YXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIElu
dFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYm
IHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xs
YmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKyAgICAKKyAgICBhdXRvIHZpc2libGVT
aXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigp
LCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0
aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5o
ZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3Zlcmhh
bmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAo
IXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0
cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVz
dCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBh
dXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlm
IChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xs
T2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3Jv
bGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkK
KyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVT
aXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0
LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiBy
ZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5z
ZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2li
bGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIElu
dFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGU6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hh
bmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwor
fQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGlu
Z0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiByZW5kZXJlcigp
LmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNp
ZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZs
b3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1h
dG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5p
bWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxB
bmltYXRvcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6bG9nTW9ja1Njcm9s
bEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVy
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiAiICsgbWVzc2Fn
ZSk7Cit9CisKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGU6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQor
eworICAgIGlmICghcmVuZGVyZXIoKS5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICByZW5k
ZXJlcigpLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1bnJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGlmICghcmVuZGVyZXIoKS5lbGVt
ZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlcigpLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6c2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24g
PDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxU
eXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRv
IGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hh
dCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdp
dGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgp
IC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Cisg
ICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAg
ICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYg
KHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
WE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Nj
cm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9m
ZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxY
T2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBpZiAo
bV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAg
ICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGgg
YW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAg
ICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdl
IHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIHNldE5lZWRz
Q29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBSZW5kZXJWaWV3
JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRl
KCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUg
bG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxp
bmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRh
bnQgd2FsayBmcm9tIHRoZSBwYWludC1vcmRlciBwYXJlbnQuCisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHBhaW50UGFyZW50ID0gcGFpbnRPcmRlclBhcmVudCgpKQorICAgICAgICAgICAgICAg
ICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRh
dGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFy
IHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJp
bmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlv
dXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5k
ZXJlcigpLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJl
dCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisgICAgCisgICAgTGF5b3V0
UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkg
PyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJl
cigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisg
ICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZv
clJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFr
ZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNw
YXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVu
dCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5u
ZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNj
aGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVw
YWludCkKKyAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBh
bmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyKCkuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBl
bmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJm
bG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAg
ZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgp
Cit7CisgICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkg
eworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29u
dGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVw
b3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRl
eHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBk
YXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRT
Y3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hv
c2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAg
IGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRI
aWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9z
aXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lu
dFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAg
ICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dykKK3sKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2li
bGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9
IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hp
dFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVU
b0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYg
aXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNv
bnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworICAgIAorICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQor
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgT3B0aW9uYWw8SW50U2l6ZT4m
IG9mZnNldEZyb21Sb290LCBSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXApCit7CisgICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghcmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFNpemUg
b2Zmc2V0OworICAgIGlmIChvZmZzZXRGcm9tUm9vdCkKKyAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0
RnJvbVJvb3QudmFsdWUoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgTGF5b3V0U2l6ZSBjb21wdXRl
ZE9mZnNldEZyb21Sb290OworICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCisgICAgICAgICAgICBj
b21wdXRlZE9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1h
cC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gRklYTUU6IEl0IGxvb2tzIHN1c3BpY2lvdXMgdG8gY2FsbCBjb252ZXJ0VG9MYXll
ckNvb3JkcyBoZXJlCisgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3Ig
bWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgorICAgICAgICAgICAgY29tcHV0ZWRP
ZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihyb290KCkpOworICAgICAgICB9Cisg
ICAgICAgIG9mZnNldCA9IHJvdW5kZWRJbnRTaXplKGNvbXB1dGVkT2Zmc2V0RnJvbVJvb3QpOwor
ICAgIH0KKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAg
IGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXQpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgfQorICAgIAorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0
KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENv
cm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxD
b3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFt
ZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1
cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVu
ZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIGNvcm5l
ciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5j
YWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJl
bmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAg
ICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
Y29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxk
IG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRl
cmVyKCkpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyU2Nyb2xsQ29ybmVyKCkK
K3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3Jv
bGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjp1cGRhdGVSZXNpemVyU3R5bGUo
KQoreworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3Jv
bGxiYXIocmVuZGVyZXIoKSk7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisK
KyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50
KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hv
dWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQoJnJlbmRlcmVyKCkpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OmNsZWFyUmVzaXplcigpCit7Cisg
ICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBh
cmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAg
UmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29ybmVyUmVz
aXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29y
bmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNv
cm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXpl
Q29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVy
SW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
Y29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCitS
ZW5kZXJMYXllclNjcm9sbGFibGU6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXM8
UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhl
IGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0g
c25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9o
QmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92
QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xs
YmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisg
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxT
Y3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29s
IHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZv
aWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJs
YXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIp
KTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUg
Y29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAg
ICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0
OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJS
ZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9s
bGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJS
ZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAg
ICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAg
IH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxi
YXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VU
byhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAs
IGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJh
ciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUg
Y29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVm
dCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIElu
dFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNv
cm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlD
b3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5l
clJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVz
dWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9s
bGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVz
cygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFy
VGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6b3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAor
eworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0
cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3Jv
bGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlOjp1cGRhdGVNYXJxdWVlKCkKK3sKKyAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1
dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOjpjcmVhdGVPckRl
bGV0ZU1hcnF1ZWVJZk5lZWRlZCgpCit7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVl
ZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVo
YXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJx
dWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0
aGlzKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVs
c2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGU6OnN1YnRyYWN0U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Ny
b2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIC8vIFN1YnRyYWN0
IG91ciBwYXJlbnQncyBzY3JvbGwgb2Zmc2V0LgorICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVk
UGFyZW50OworICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChw
b3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigp
LnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9s
bGFibGU+KHBvc2l0aW9uZWRQYXJlbnQpKSB7CisgICAgICAgICAgICBhdXRvKiBwb3NpdGlvbmVk
UGFyZW50U2Nyb2xsYWJsZSA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocG9zaXRp
b25lZFBhcmVudCk7CisgICAgICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1
YnRyYWN0IG91dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0
LgorICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlv
dXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKwor
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudFNj
cm9sbGFibGUtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5y
ZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG9mZnNl
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOworICAgICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlLT5jb250ZW50c1Njcm9s
bGluZ1Njb3BlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVy
ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocGFy
ZW50TGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGUgPSBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHBhcmVudExheWVyKTsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRMYXllclNjcm9sbGFibGUtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJT
Y3JvbGxhYmxlLT5zY3JvbGxQb3NpdGlvbigpKTsKKworICAgICAgICAgICAgQVNTRVJUKHBhcmVu
dExheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKKyAgICAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllclNjcm9sbGFibGUtPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdMYXllciA9IHBhcmVudExheWVyLT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZSogZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxl
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHdoaWxlIChlbmNsb3NpbmdMYXllcikgeworICAgICAg
ICAgICAgICAgIGlmIChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKSkg
eworICAgICAgICAgICAgICAgICAgICBlbmNsb3NpbmdMYXllclNjcm9sbGFibGUgPSBkb3duY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGVuY2xvc2luZ0xheWVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuY2xvc2lu
Z0xheWVyID0gZW5jbG9zaW5nTGF5ZXItPnBhcmVudCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZW5jbG9zaW5nTGF5ZXJTY3JvbGxhYmxlKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVuY2xvc2luZ0xheWVyU2Nyb2xsYWJsZS0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKKyAgICAgICAgICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gZW5jbG9zaW5nTGF5ZXJT
Y3JvbGxhYmxlLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSB7CisgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNT
Y3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICAgICAgbV9jb250
ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CisgICAgfSBlbHNlIGlm
ICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAh
PSBtX2JveFNjcm9sbGluZ1Njb3BlKQorICAgICAgICBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUg
PSBtX2JveFNjcm9sbGluZ1Njb3BlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZTo6
dXBkYXRlU2Nyb2xsYmFyU3R5bGUoKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBh
IHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNjcm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4K
KyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlm
IChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlOjphbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3QKK3sKKyAgICBp
ZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBp
cyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCisgICAgLy8g
RklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2VkIHRvIGJlIHJlbGV2YW50IGZvciBT
YWZhcmkgUlNTLgorICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpICYmICFyZW5kZXJlcigpLnBh
cmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xpcCBzZXQuCisKKyAgICBpZiAocmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCkpIHsK
KyAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJlIGlzIG1pc2xlYWRpbmc7IHRo
aXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUgb3ZlcmZsb3csCisgICAgICAg
IC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNvbnRyb2wuCisgICAgICAgIHJl
dHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKTsKKyAgICB9CisKKyAgICAv
LyBQcm9ncmFtbWF0aWMgc2Nyb2xscyBjYW4gc2Nyb2xsIG92ZXJmbG93OmhpZGRlbi4KKyAgICBy
ZXR1cm4gYm94LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBib3gtPmhhc1ZlcnRpY2FsT3Zl
cmZsb3coKTsKK30KKworT3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
OjpzY3JvbGxSZWN0VG9WaXNpYmxlSWZDdXJyZW50U2Nyb2xsSXNBbGxvd2VkKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRv
VmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKCFhbGxvd3NDdXJyZW50U2Nyb2xs
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBEb24ndCBzY3JvbGwg
dG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUgLXdl
YmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZy
b20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KKyAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExh
eW91dFJlY3QgbG9jYWxFeHBvc2VSZWN0KGJveC0+YWJzb2x1dGVUb0xvY2FsUXVhZChGbG9hdFF1
YWQoRmxvYXRSZWN0KGFic29sdXRlUmVjdCkpKS5ib3VuZGluZ0JveCgpKTsKKyAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIC8vIEZv
ciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNj
cm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAorICAgICAgICAv
LyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBs
b2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgor
ICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCksIDApKTsKKyAgICB9CisgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOworICAgIExh
eW91dFJlY3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxF
eHBvc2VSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsK
KworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCku
bG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNl
dCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgICAgICBib29sIGF1dG9zY3JvbGxOb3RJblByb2dyZXNz
ID0gIXJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVz
cygpOworICAgICAgICBpZiAoYXV0b3Njcm9sbE5vdEluUHJvZ3Jlc3MgJiYgdXNlU21vb3RoU2Ny
b2xsaW5nKG9wdGlvbnMuYmVoYXZpb3IsIGJveC0+ZWxlbWVudCgpKSkKKyAgICAgICAgICAgIGFu
aW1hdGVkID0gQW5pbWF0ZWRTY3JvbGw6OlllczsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQg
LSBvbGRTY3JvbGxPZmZzZXQ7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRy
YW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHJldHVybiBhYnNvbHV0ZVJl
Y3Q7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllclNjcm9sbGFibGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTE1NjkzYzEyNDZhZjYyMzQ0YTUzN2I2MjNhYWFmYWE5
YjhiMjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmlj
YXRpb25zIENvcnBvcmF0aW9uLgorICoKKyAqIE90aGVyIGNvbnRyaWJ1dG9yczoKKyAqICAgUm9i
ZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KKyAqICAgRGF2aWQgQmFyb24gPGRiYXJv
bkBmYXMuaGFydmFyZC5lZHU+CisgKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVzaW5nZXJA
d2ViLmRlPgorICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgorICogICBSb2xh
bmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5kZT4KKyAq
ICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KKyAqICAgQm9yaXMgWmJhcnNreSA8Ynpi
YXJza3lAbWl0LmVkdT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBv
ZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3
dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxl
IGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9m
IHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1h
eSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBv
ZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFJlbmRlckxheWVyU2Nyb2xsYWJsZSk7CisKK3VzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWlu
dDY0X3Q7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZSBmaW5hbAorICAgIDogcHVibGlj
IFJlbmRlckxheWVyCisgICAgLCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyU2Nyb2xsYWJs
ZSk7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CisKKyAgICBleHBsaWNpdCBSZW5kZXJMYXllclNjcm9s
bGFibGUoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVy
U2Nyb2xsYWJsZSgpOworCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0
IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50
U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAgaW50
IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisg
ICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNj
cm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93
LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIGJvb2wgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpIGZpbmFsOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9s
bFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Cisg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
YnkgbWFycXVlZS4KKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xs
VG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpV
bmNsYW1wZWQpOyB9CisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRp
b25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOworCisgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3Npbmcg
bGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgorICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4g
dGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJh
bWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXMpIGNvbnN0OworCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZh
aWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIHNjcm9sbHNPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNv
bnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKyAg
ICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9
CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVT
Y3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJh
cihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsg
fQorCisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmlu
YWw7CisKKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKKyAgICBTY3JvbGxQb3NpdGlv
biBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247
IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxhYmxlQXJl
YSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZv
aWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRy
dWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1Jl
Y29uY2lsaWF0aW9uOyB9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgp
IGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhl
IGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0
aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wg
aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKKyAgICBi
b29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCk7CisgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSk7CisKKyAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OworICAgIHZvaWQgcmVz
aXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IExheW91dFNpemUmKTsKKyAgICBi
b29sIGluUmVzaXplTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5SZXNpemVNb2RlOyB9CisgICAg
dm9pZCBzZXRJblJlc2l6ZU1vZGUoYm9vbCBiKSB7IG1faW5SZXNpemVNb2RlID0gYjsgfQorCisg
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKyAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgdm9p
ZCBhZGRCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoY29uc3QgTGF5b3V0UmVjdCYpOworICAgIHZv
aWQgY2xlYXJCbG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMoKTsKKyAgICB2b2lkIHJlcGFpbnRCbG9j
a1NlbGVjdGlvbkdhcHMoKTsKKworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgorICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KKyAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29u
dGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdT
Y29wZTsgfQorCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIGJv
b2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpOyB9CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
CisKKyAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnIHsKKyAgICAg
ICAgSXNPdmVyZmxvd1Njcm9sbCAgICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAg
ICAgICBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yICAgICAgPSAxIDw8IDEsCisg
ICAgICAgIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgICAgICAgICA9IDEgPDwgMiwK
KyAgICAgICAgSGFzQ2hhbmdlZEFuY2VzdG9yICAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAz
LAorICAgIH07CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRl
ckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxG
bGFnPiA9IHsgfSk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheWVyUGFpbnRpbmdJbmZvJik7CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworCisgICAgYm9v
bCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKworICAgIGJvb2wgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9pZCBjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKworICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQorICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOworICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOyAgCisKKyAgICBJbnRT
aXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICB2b2lkIHBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBPcHRpb25hbDxJbnRTaXplPiYgb2Zmc2V0RnJv
bVJvb3QsIFJlbmRlckdlb21ldHJ5TWFwKiA9IG51bGxwdHIpOworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgdm9p
ZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAg
dm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgc3RydWN0IE92ZXJmbG93Q29udHJv
bFJlY3RzIHsKKyAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBJ
bnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcjsK
KyAgICAgICAgSW50UmVjdCByZXNpemVyOworICAgICAgICBJbnRSZWN0IHNjcm9sbENvcm5lck9y
UmVzaXplclJlY3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIXNjcm9s
bENvcm5lci5pc0VtcHR5KCkgPyBzY3JvbGxDb3JuZXIgOiByZXNpemVyOworICAgICAgICB9Cisg
ICAgfTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50
UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlTWFycXVlZSgpOworICAg
IHZvaWQgY3JlYXRlT3JEZWxldGVNYXJxdWVlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHN1YnRyYWN0
U2Nyb2xsT2Zmc2V0QW5kVXBkYXRlU2Nyb2xsaW5nU2NvcGVzKExheW91dFBvaW50JiBsb2NhbFBv
aW50KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhclN0eWxlKCk7CisgICAgYm9vbCBhbGxvd3ND
dXJyZW50U2Nyb2xsKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gc2Nyb2xsUmVj
dFRvVmlzaWJsZUlmQ3VycmVudFNjcm9sbElzQWxsb3dlZChjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRp
b25zJik7CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5
ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRv
IHN0YXJ0IGFuZCBzdG9wLgorICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOworICAgIGJvb2wg
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlv
dXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBi
b29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyNl
bmRpZgorICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOworI2Vu
ZGlmCisKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDog
MTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBi
b29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAgU2Nyb2xsUG9zaXRpb24g
bV9zY3JvbGxQb3NpdGlvbjsKKyAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3Jv
bGxlZCBhcmVhLgorICAgIEludFNpemUgbV9zY3JvbGxTaXplOworCisgICAgLy8gRm9yIGxheWVy
cyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0
cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAg
ICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICBNYXJrYWJs
ZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwg
MD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CisgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIElu
dGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVl
OyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIg
Y3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJlbmRlclNj
cm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBJbnRSZWN0IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91
bmRzOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6UmVuZGVyTGF5ZXImIGxheWVyKSB7IHJldHVybiBsYXllci5sYXllclR5cGUoKSA9PSBXZWJD
b3JlOjpSZW5kZXJMYXllcjo6TGF5ZXJUeXBlOjpTY3JvbGxhYmxlOyB9CitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKaW5kZXggN2U5ZjM4MzJkMzZlZmQxOTEzY2Y3Mzk3MDExZWJiM2QyMTk0OGUyNC4uNzJjMjk4
YTcyMmZhMTBmNGEzY2FhZDM5YTM0NWE3YmQ2YTkyM2Y3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDgsNyArNDgsNyBAQAogI2luY2x1ZGUgIk5v
ZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8u
aCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODc5LDEwICs4NzksOSBA
QCBib29sIFJlbmRlckxpc3RCb3g6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZv
clBlcmZvcm1hbmNlVGVzdGluZygpIGNvbgogU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKIHsKICAgICBhdXRvKiBsYXllciA9IGVu
Y2xvc2luZ0xheWVyKCk7Ci0gICAgaWYgKCFsYXllcikKKyAgICBpZiAoIWxheWVyIHx8ICFpczxS
ZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllciktPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKQEAgLTg5Miw3ICs4OTEsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5
ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCk7CisgICAgYXV0byogbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOworICAgIGlmICgh
bGF5ZXIgfHwgIWlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5
ZXIpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CiB9CiAKIEludFJl
Y3QgUmVuZGVyTGlzdEJveDo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0
ZDA5OTZlNmJmYmU0MGE2NDQxMTY0NDU5YWE2NzgwZDhiLi4xYmE1YTYwMjFlOGQyMTNhYmQ0MjRl
N2VlZjUyMzg0YmY0MDE5MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCkBAIC00OSwxNCArNDksMTQgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MTWFycXVlZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5kZXJNYXJxdWVlOjpSZW5kZXJNYXJxdWVlKFJl
bmRlckxheWVyKiBsYXllcikKK1JlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlKiBsYXllcikKICAgICA6IG1fbGF5ZXIobGF5ZXIpCiAgICAgLCBtX3RpbWVy
KCp0aGlzLCAmUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5oCmluZGV4IDFjNzg4NDk1ZTBlODg1NzVlODBiZjkzMDhhMmY0
OTRmYjRhNjI4ZDUuLjA4NGFkMzM3NzQ4NmRmOWNlODMyNTY2NjY4NTQ1MmM0N2I5ODIzMzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuaApAQCAtNDksMTMgKzQ5LDEz
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyTGF5ZXI7CitjbGFzcyBS
ZW5kZXJMYXllclNjcm9sbGFibGU7CiAKIC8vIFRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgYXV0by1z
Y3JvbGxpbmcgZm9yIDxtYXJxdWVlPgogY2xhc3MgUmVuZGVyTWFycXVlZSBmaW5hbCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyTWFycXVlZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqKTsK
KyAgICBleHBsaWNpdCBSZW5kZXJNYXJxdWVlKFJlbmRlckxheWVyU2Nyb2xsYWJsZSopOwogICAg
IH5SZW5kZXJNYXJxdWVlKCk7CiAKICAgICBib29sIGlzSG9yaXpvbnRhbCgpIGNvbnN0OwpAQCAt
ODAsNyArODAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB0aW1lckZpcmVkKCk7CiAKLSAgICBS
ZW5kZXJMYXllciogbV9sYXllcjsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIG1fbGF5ZXI7
CiAgICAgVGltZXIgbV90aW1lcjsKICAgICBpbnQgbV9jdXJyZW50TG9vcCB7IDAgfTsKICAgICBp
bnQgbV90b3RhbExvb3BzIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCmluZGV4IDcxMTNmNWMzMjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjk1NzU0
MWE2YmU4MWYxYzBjNmNjZDdjYTQ2ZjVjYmYxYzNiNmQ5ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmpl
Y3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5k
ZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGU7CiBwdWJsaWM6CiAgICAgLy8gQW5vbnlt
b3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUsIGFuZCB0
aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFub255bW91
cyBpbiB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IGEwNzUwODFmNTY1Y2Vk
YjU1ZGRiZWM5NjhlYzJjYjEzOWQ2MGJhYjguLjg1NWE5MmM4MWFkM2ZjNGM0MDdmMjQ4MmYxMDIw
ODI4N2ZkNGM2YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDAwLDE3
ICs0MDAsMjMgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWwKICAgICBSZW5kZXJUZXh0Q29udHJv
bElubmVyQmxvY2sqIHJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpOwog
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZW5kZXJMYXll
ciogbGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYmIGlzPFJlbmRlckxheWVyU2Nyb2xs
YWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
ICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwgc3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5s
YXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVu
ZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHJlbmRlcmVyLT5sYXllcigpICYm
IGlzPFJlbmRlckxheWVyU2Nyb2xsYWJsZT4ocmVuZGVyZXItPmxheWVyKCkpKSB7CisgICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KHJlbmRlcmVyLT5sYXllcigpKS0+
c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCBlMDU2MGQ3YTUyYTk1MjY0ZDZh
M2Q1NjgyZDc5MzU2OTVjMjNmNjBjLi4xZjEwYTMyMjk0NjZjODU2YTI0MmQ3ODA0MDVkYWRkYzVi
ZjRmYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwCkBAIC00Nyw4ICs0Nyw4IEBACiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5k
ZXJMaXN0TWFya2VyLmgiCkBAIC01OTksMjAgKzU5OSwyMSBAQCBzdGF0aWMgdm9pZCB3cml0ZUxh
eWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91
dFJlYwogICAgICAgICAgICAgdHMgPDwgIiBjbGlwICIgPDwgYWRqdXN0ZWRDbGlwUmVjdDsKICAg
ICB9CiAKLSAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAg
ICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBz
Y3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIu
c2Nyb2xsT2Zmc2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5
ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYg
cm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Ny
b2xsV2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5z
Y3JvbGxXaWR0aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdo
dCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxI
ZWlnaHQoKTsKKyAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBp
czxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkgeworICAgICAgICBhdXRvJiBzY3JvbGxh
YmxlTGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKTsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCisgICAgICAgICAgICB0
cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwor
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLnNjcm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAg
ICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci5zY3JvbGxPZmZzZXQoKS55
KCk7CisgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKKyAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXIu
c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNj
cm9sbGFibGVMYXllci5zY3JvbGxIZWlnaHQoKTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAg
IFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
OwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFz
VmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9j
a1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAg
ICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2FzdDxTY3Jv
bGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7Ci0gICAgICAgICAgICBpZiAobWFjVGhl
bWUuaXNMYXlvdXREaXJlY3Rpb25SVEwoKmxheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAg
ICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5
ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxi
YXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOwogICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggMTcyNDhjZGEzNGFhNmI2YTcxOTZm
N2YwMDZmMjA4NWZhOWFiNDI2Yy4uYzliYmQzYjY5YjAxOWI0NGNkZTcyZGM5NDYyZGM1MzE2NWYz
YTI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTI4
LDggKzI4LDggQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0z
MjksOCArMzI5LDEyIEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBs
YXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50
SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFp
bnRJbmZvLnJlY3QpOworICAgIGlmICghaGFzTGF5ZXIoKSB8fCAhaXM8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcigpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIoKSk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+Y2FuUmVzaXplKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVzaXplcihwYWludEluZm8u
Y29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50SW5m
by5yZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJv
b2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGMw
NTNhNGRkYTIwMDhlZmQ3YTY2ODhkMzQ0OGZmYmYzYmZjYmUxZjUuLjgwMmYzNTFjOTJjNTg0ZmZh
NGQzZTNhMzA3NjdiYzAyNTc1NTA0N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTE1NSw2ICsxNTUsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE5MDYsNyArMTkwNyw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudChFbGVtZW50JiBlbGVtZW50
LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJl
YSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVyKCk7CisgICAgICAgIEFTU0VS
VChpczxSZW5kZXJMYXllclNjcm9sbGFibGU+KGJveC5sYXllcigpKSk7CisgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihib3gubGF5ZXIoKSk7
CiAgICAgfQogICAgIAogICAgIGlmICghc2Nyb2xsYWJsZUFyZWEpCkBAIC0yOTAwLDggKzI5MDIs
OCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFy
ZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxS
ZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIGlmIChpczxSZW5k
ZXJMYXllclNjcm9sbGFibGU+KHJlbmRlckJveC5sYXllcigpKSkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihyZW5kZXJCb3gubGF5
ZXIoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9k
ZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4
IDg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDczODg1M2RkNTAuLjkyOGQ4YjNmMDdlYjQ5
YTEwYmQ1Y2MzYThkODYwNTllNWQ4N2Y2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MLm1tCkBAIC01Miw3ICs1Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0F1dG9jYXBpdGFs
aXplLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1l
c3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzcsMTEgQEAgLSAoaW50KXNjcm9sbFhPZmZzZXQK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllciB8fCAhaXM8V2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlPihsYXllcikpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpLT5zY3JvbGxP
ZmZzZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC04OCwxMCArOTIsMTUg
QEAgLSAoaW50KXNjcm9sbFlPZmZzZXQKIAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93PigqcmVuZGVyZXIpKQogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5jb250YWlu
aW5nQmxvY2soKTsKKwogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
IHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigp
LT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3Jl
OjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyIHx8ICFpczxX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihs
YXllciktPnNjcm9sbE9mZnNldCgpLnkoKTsKIH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0
OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeQpAQCAtMTExLDExICsxMjAsMTYgQEAgLSAodm9p
ZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeSBhZGp1c3RGb3JJ
T1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogbGF5ZXIgPSBk
b3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyIHx8ICFpczxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8V2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlPihsYXllcik7CisKICAgICBpZiAoYWRqdXN0Rm9y
SU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7Ci0gICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNl
dCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogfQogCiAtICh2b2lkKWFi
c29sdXRlUG9zaXRpb246KGludCAqKXggOihpbnQgKil5IDooaW50ICopdyA6KGludCAqKWgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGVmNzM1MDA0
ZWE2ZDA1ZTkxMjg2ZWNmYTZmMGY4ZDQwMTA1ZTY2ZGUuLmJjZjQ2ODgyZDBlN2I2YzIzYWJiOGQz
YTY5MzMwMmZjZjJiMjRmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtOTQsNyArOTQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QbHVnaW5EYXRh
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
YW5nZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJMYXllclNjcm9sbGFibGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oPgpAQCAtNzM3LDEwICs3MzcsMTEgQEAgLSAodm9pZClfc2Ny
b2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICAgICAgICAgc3RhcnROb2Rl
LT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJl
Y3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9k
ZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQs
IFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6
U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogI2Vsc2UKICAgICAgICAg
YXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0g
ICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgaWYgKGxheWVyICYmIGlzPFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZT4obGF5ZXIpKSB7CisgICAgICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxh
eWVyKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwg
aW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9z
c09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAg
ICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0
ZSgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRl
QXBwZWFyYW5jZSgpOwogICAgICAgICB9CkBAIC03NTcsMTAgKzc1OCwxMSBAQCAtICh2b2lkKV9z
Y3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZSB3aXRoSW5zZXQ6KENHRmxv
YXQpaW5zZXQKIAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7
CiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdM
YXllcigpOwotICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgIGlmIChsYXllciAmJiBp
czxXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKSkgeworICAgICAgICAgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlPihsYXllcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVu
ZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJh
bmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3Vs
ZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAK
ICAgICAgICAgICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlm
IChjb3JlRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYmY2OGE3
MTQ1ZGE4OThlZDRlN2NlNzRlNjE1N2YwMGJkNzBmN2E2My4uYzhjNDcxMDk2M2M0NTIzODdjOGIy
Y2M2ZmMzNDM3YTkzNmE0OTg0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAg
LTE0NSw3ICsxNDUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJh
Y2tlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhl
bWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclZpZXcuaD4KQEAgLTIwMzUsMTAgKzIwMzUsMTIgQEAgYm9vbCBXZWJWaWV3
OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgIGZsb2F0IHNj
YWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICAgICAgSW50U2l6ZSBsb2dpY2Fs
U2Nyb2xsRGVsdGEoLWRlbHRhWCAqIHNjYWxlRmFjdG9yLCAtZGVsdGFZICogc2NhbGVGYWN0b3Ip
OwogCi0gICAgICAgIFJlbmRlckxheWVyKiBzY3JvbGxhYmxlTGF5ZXIgPSBudWxscHRyOworICAg
ICAgICBSZW5kZXJMYXllclNjcm9sbGFibGUqIHNjcm9sbGFibGVMYXllciA9IG51bGxwdHI7CiAg
ICAgICAgIGlmIChtX2dlc3R1cmVUYXJnZXROb2RlICYmIG1fZ2VzdHVyZVRhcmdldE5vZGUtPnJl
bmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IG1fZ2VzdHVyZVRhcmdl
dE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpCi0gICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7CisgICAgICAg
ICAgICBpZiAoYXV0byogbGF5ZXIgPSBtX2dlc3R1cmVUYXJnZXROb2RlLT5yZW5kZXJlcigpLT5l
bmNsb3NpbmdMYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckxheWVyU2Ny
b2xsYWJsZT4obGF5ZXIpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIgPSBk
b3duY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGU+KGxheWVyKS0+ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmll
czo6WWVzKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNThmMzE5YmFiMTk1OGZlZmU1YjUzYjk1N2JlZGNiZjUyM2Zj
OTAxYS4uMzgzNTdhYzBmZDYzN2ViYTMwYTA2MDY5M2JhMzY4MzE5NmZmNDc2MiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDIwLTA4LTE3ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBS
ZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdCB1cCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyICYgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlLgorCisgICAgICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBnbGliIGV4cGVjdGF0aW9uIGZv
ciB0aGUgdGVzdAorICAgICAgICBmYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3ItYmFzaWMt
ZXZlbnRzLmh0bWwuCisgICAgICAgIChUaGlzIGlzIHVucmVsYXRlZCB0byB0aGlzIGJyYW5jaCwg
YW5kIHNob3VsZCBiZSBmaXhlZCBiZWZvcmUpCisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9z
Y3JvbGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgcy9SZW5k
ZXJMYXllci9SZW5kZXJMYXllclNjcm9sbGFibGUvCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9h
bmltYXRpb25zL3N0ZXBzLXRyYW5zZm9ybS1yZW5kZXJpbmctdXBkYXRlcy1leHBlY3RlZC50eHQ6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3Jv
bGwtYW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgcy9SZW5kZXJM
YXllci9SZW5kZXJMYXllclNjcm9sbGFibGUvCisKIDIwMjAtMDgtMTcgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gUmVtb3Zl
IHN1cHBvcnQgZm9yIE5QQVBJIHBsdWdpbnMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
c2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBl
Y3RlZC50eHQKaW5kZXggOTM2YmVkMjVjMjcxN2Y1MjFkYzU2ZDUzMjYzMDlkYjg2OTRhMjYxNS4u
OWEzNDY3NWQxZjQ2Mjc0NzAwYmQ0N2YyYmRmZWM1MjdjY2MxYjY5YyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLWJhc2ljLWV2ZW50cy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9y
LWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTEsMTQgKzEsMTQgQEAKIENPTlNPTEUgTUVT
U0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VFbnRlcmVkQ29udGVudEFyZWEKIENPTlNPTEUgTUVT
U0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUgTUVT
U0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NB
R0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBN
RVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCitD
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VFbnRlcmVkVmVydGlj
YWxTY3JvbGxiYXIKIENPTlNPTEUgTUVTU0FHRTogTWFpbkZyYW1lVmlldzogbW91c2VNb3ZlZElu
Q29udGVudEFyZWEKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlTW92ZWRJbkNv
bnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUlzRG93bkluVmVy
dGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNVcElu
VmVydGljYWxTY3JvbGxiYXIKLUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhp
dGVkVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlOiBtb3VzZU1vdmVkSW5Db250ZW50QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXll
clNjcm9sbGFibGU6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgorQ09OU09MRSBNRVNT
QUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlSXNVcEluVmVydGljYWxTY3JvbGxiYXIK
K0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRlZFZlcnRp
Y2FsU2Nyb2xsYmFyCiBDT05TT0xFIE1FU1NBR0U6IE1haW5GcmFtZVZpZXc6IG1vdXNlTW92ZWRJ
bkNvbnRlbnRBcmVhCi1DT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUV4aXRlZENv
bnRlbnRBcmVhCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VF
eGl0ZWRDb250ZW50QXJlYQogVGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL2FuaW1hdGlvbnMvc3RlcHMtdHJhbnNmb3JtLXJlbmRlcmluZy11cGRhdGVzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zv
cm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4NWIyYTM4Y2EyNzNjNmQ3MDA2ODc4NmUzMzlkZjc0MWU2NGNhNGU5Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvYW5pbWF0aW9ucy9zdGVwcy10cmFuc2Zvcm0tcmVuZGVyaW5nLXVwZGF0ZXMtZXhw
ZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1QQVNTIGNvdW50IGlzIDAK
LVBBU1MgY291bnQgPCA2IGlzIHRydWUKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
LQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMt
d2sxL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9mYXN0L3Njcm9sbGluZy9zY3JvbGwt
YW5pbWF0b3ItYmFzaWMtZXZlbnRzLWV4cGVjdGVkLnR4dAppbmRleCA2MGNkYjY2YzFmMGEyYjEw
N2Y1ODQxN2IzMzJlZjg3ZjYxNTFmOTQyLi40NTg3ZjliNWQ0ZTE1OWRiOGMzNWM5MjRjMDQwNmVl
YWZlZDYzY2UxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL2Zhc3Qv
c2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1iYXNpYy1ldmVudHMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1h
dG9yLWJhc2ljLWV2ZW50cy1leHBlY3RlZC50eHQKQEAgLTEsMTEgKzEsMTEgQEAKLUNPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRW50ZXJlZENvbnRlbnRBcmVhCi1DT05TT0xFIE1F
U1NBR0U6IFJlbmRlckxheWVyOiBtb3VzZUVudGVyZWRWZXJ0aWNhbFNjcm9sbGJhcgotQ09OU09M
RSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNPTlNPTEUg
TUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlSXNEb3duSW5WZXJ0aWNhbFNjcm9sbGJhcgotQ09O
U09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VJc1VwSW5WZXJ0aWNhbFNjcm9sbGJhcgot
Q09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllcjogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKLUNP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkVmVydGljYWxTY3JvbGxiYXIK
LUNPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXI6IG1vdXNlRXhpdGVkQ29udGVudEFyZWEKK0NP
TlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUVudGVyZWRDb250ZW50
QXJlYQorQ09OU09MRSBNRVNTQUdFOiBSZW5kZXJMYXllclNjcm9sbGFibGU6IG1vdXNlRW50ZXJl
ZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTogbW91c2VNb3ZlZEluQ29udGVudEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlOiBtb3VzZUlzRG93bkluVmVydGljYWxTY3JvbGxiYXIKK0NPTlNPTEUgTUVTU0FH
RTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUlzVXBJblZlcnRpY2FsU2Nyb2xsYmFyCitD
T05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJsZTogbW91c2VNb3ZlZEluQ29udGVu
dEFyZWEKK0NPTlNPTEUgTUVTU0FHRTogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlOiBtb3VzZUV4aXRl
ZFZlcnRpY2FsU2Nyb2xsYmFyCitDT05TT0xFIE1FU1NBR0U6IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZTogbW91c2VFeGl0ZWRDb250ZW50QXJlYQogVGhpcyBpcyBhIHNjcm9sbGFibGUgZGl2LgogCiBQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414792</attachid>
            <date>2020-11-22 17:05:42 -0800</date>
            <delta_ts>2020-11-22 17:43:15 -0800</delta_ts>
            <desc>Patch, v5 (squashed for testing)</desc>
            <filename>patch-v5-squashed.diff</filename>
            <type>text/plain</type>
            <size>310944</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxN2M5YmMyNDY5MGYuLmFmZmJhMGIxZDFhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJhdGlv
biBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAgIFRoZSBn
b2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBv
dXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAg
ICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAg
ICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRj
aCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zh
c3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0xMS0xOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFtMRkNdW0ludGVncmF0aW9uXSBFbmFibGUgaW5saW5lLWJsb2NrCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zh
c3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4
dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQt
ZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9i
bG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBA
IC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICBSZW5k
ZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMw
MDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgwLDApIHNpemUgMTAweDEwMAog
ICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAotbGF5ZXIgYXQg
KDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAorbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUw
eDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQgKDUwLDApIHNpemUgNTB4MTAwIFtiZ2Nv
bG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4OTczNDk1NDJmLi5iOWI3ZjdkNjJhY2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMDUgQEAKKzIwMjAtMTEtMjIgIE5pa29sYXMgWmltbWVybWFu
biAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5n
IGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFByZXBhcmF0aW9uIGZvciB0aGUgUmVuZGVyTGF5ZXIgYXJjaGl0ZWN0
dXJlIGNoYW5nZToKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Ny
b2xsVG8gY29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OnNldFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
YXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSBjb25zdCk6CisgICAgICAgICogaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBl
OjplbGVtZW50RGlkQmx1cik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSk6CisgICAg
ICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0Zvck92ZXJmbG93TGF5ZXIg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5
b3V0VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29u
dHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhz
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJM
b2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYW5TY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNj
dXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9y
U3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6ZmxhZ3NGb3JVcGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9j
a0xheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3Rz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXpl
Q29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxXaWR0
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFn
bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Om91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVyZmxvd1RpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0VGlsZWRCYWNr
aW5nQ292ZXJhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6bGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zv
cm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdT
dGFja0xheWVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Ny
b2xsQ29ybmVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVy
YXJjaHkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlc0NsaXBwaW5nU2NvcGUpOgorICAgICAg
ICAoV2ViQ29yZTo6ZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQW5jZXN0b3JDbGlwcGluZ1N0
YWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5
bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUlu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjppc0FzeW5jU2Nyb2xsYWJsZVN0aWNreUxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNWaWV3cG9ydENvbnN0cmFp
bmVkRml4ZWRPclN0aWNreUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2lu
Z0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmxheWVyU2Nyb2xsQmVoYWhhdmlvclJlbGF0aXZlVG9Db21wb3NpdGVkQW5j
ZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRP
dmVyZmxvd05vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUNvb3JkaW5hdGVkUG9zaXRpb25pbmdGb3JMYXllciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGlu
YXRlZExheWVyV2l0aFJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05v
ZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJsZUFy
ZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Zm9yY2VV
cGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNBc3luY1Nj
cm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxUb1hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxUb1lQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbHNPdmVyZmxvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVT
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3Zl
cmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Ny
b2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGlj
YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xs
YmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBh
aW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5n
V2hlZWxFdmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZl
YWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNj
cm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Nyb2xs
RnJvbVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50
U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDogQWRkZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJx
dWVlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVk
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisKKzIwMjAtMTEtMjAgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgTmVlZCBhIHNo
b3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMh
KS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVw
YXJhdGlvbiBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAg
IFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAg
ICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQK
KyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5l
ZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIEFk
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIHNrZWxldG9uLCB3aGljaCB3aWxsIGJlIHVzZWQK
KyAgICAgICAgdG8gYWJzdHJhY3QgdGhlIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZSBmcm9tIFJl
bmRlckxheWVyLgorCisgICAgICAgIEZvbGxvdy11cCBjb21taXRzIHdpbGwgbGFuZCB0aGUgYWN0
dWFsIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIC0gbm8g
bmV3IHRlc3RzIG5lZWRlZC4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6IEFkZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLiogdG8gYnVpbGQuCisgICAgICAgICogU291cmNlcy50eHQ6IERp
dHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8u
CisKIDIwMjAtMTEtMTYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW2Nzcy1mbGV4XSBJbWFnZXMgYXMgZmxleCBpdGVtcyBzaG91bGQgdXNlIHRo
ZSBvdmVycmlkaW5nTG9naWNhbEhlaWdodCB3aGVuIGRlZmluZWQgdG8gY29tcHV0ZSB0aGUgbG9n
aWNhbCB3aWR0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDIzZTE1M2RhM2M2Li5lYTE4NDdhZmVm
N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ1OSw2ICsxNDU5LDcgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBhZmNmNDVhYWNiNDcuLjVlZTQzODc5ZDZhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAg
LTIyMDYsNiArMjIwNiw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3Rh
dGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDhiMjUxNGZkMmIyYi4uNTFmMDE1Mzg3YTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDE2
LDYgKzYwMTYsOCBAQAogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NG
aWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNC
Nzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNTNGQjhCMjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZp
bHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRl
eHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NTg0LDYg
KzI5NTg2LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJG
aWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVy
TW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8q
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovLAorCQkJCTBGNTNGQjg0MjEzQjc4NjQw
MEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8sCiAJCQkJMkQ5MDY2MDQw
QkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYw
NTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIx
QTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKaW5kZXggN2YyYmRhOGJlMTNjLi5hNjM4ZTFkZjhmNmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcApAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJy
ZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJ
dGVtLmgiCkBAIC0zOTAzLDcgKzM5MDQsNyBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAg
IGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94
LmxheWVyKCkgPyBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CiB9CiAK
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdApAQCAtMzkxNiw3ICszOTE3LDkgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3Jv
bGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LmxheWVyKCkpOworICAgIGlmICAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOwogfQogCiAjaWYgRU5B
QkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkNjFjN2Y2OTU0MTIuLmVkMTk1
YmIwM2M0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTIsNiArOTIsNyBAQAogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBAIC0xMzM0LDggKzEz
MzUsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCiAgICAgICAg
IGludCBjbGFtcGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiByZW5kZXJlci0+c3R5
bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9
IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRl
ZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0
U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5z
ZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9CiAKQEAg
LTEzNTgsOCArMTM1OSw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3Ap
CiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIobmV3VG9wICogcmVuZGVy
ZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRoaXMpID8g
QW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAgcmVuZGVy
ZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOworICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA5YjY3ZDI5
N2UxOTEuLmFkZWY5NjhhODJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAKQEAgLTIzOTEsOSArMjM5MSwxMyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIg
PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7
CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVj
dCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3Vs
ZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBsYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisKICAgICAg
ICAgICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9j
dW1lbnQtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5j
aHJvbWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUo
Km1fZG9jdW1lbnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2NGUyZS4uMjY5MTZlNjVmNzI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCkBAIC0xNzUsNyArMTc2LDkgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVF
bGVtZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwg
IXJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1
ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFk
NWE5Zi4uYWVlMTZlOTk1YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjUzLDkgKzI1NCwxMyBAQCB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYXV0byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghaW5uZXJMYXllclNjcm9sbGFibGUpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRvd25j
YXN0PFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7Ci0g
ICAgaW5uZXJMYXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXll
clNjcm9sbGFibGUtPnNjcm9sbFdpZHRoKCksIDApOworICAgIGlubmVyTGF5ZXJTY3JvbGxhYmxl
LT5zY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXQpOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VM
RU1FTlQpCiAgICAgY2xvc2VTdWdnZXN0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IDA3ZjJiMDJhNWEwNS4uYTNmZGFjYTE4ZjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNDEsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxl
V2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25z
dCBXaGUKIAogICAgIFJlbmRlckJveCogY3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5j
bG9zaW5nQm94OwogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlm
IChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7
CisgICAgICAgIGlmIChhdXRvKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVy
KCkgPyBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRl
cmx5aW5nUGxhdGZvcm1FdmVudCgpOwogICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5k
bGVkOwogICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKQEAgLTE1NjIsNyArMTU2Myw3
IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIg
PSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsK
ICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJv
bChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAg
IGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vy
c29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGxheWVyLT5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29y
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTkxMiw5ICsxOTEzLDkgQEAgU2Ny
b2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSog
bm9kZSkKICAgICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6Tm8pKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5k
ZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwor
ICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICAgICAgfQogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGQ2N2I0NDAwMGE0ZS4uYThlZjlk
ZDE4MzJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUg
IlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAg
LTI1OTUsNyArMjU5NiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQo
KSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1
cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCkt
PnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgICAgICAg
ICBBU1NFUlQocmVuZGVyVmlldy0+bGF5ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVy
Vmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3
LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9j
dW1lbnRTY3JvbGwoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxNCwxMCBA
QCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICIgYW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisg
ICAgYXV0byogZW5jbG9zaW5nTGF5ZXIgPSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3Np
bmdMYXllcigpOworICAgIGlmIChlbmNsb3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNj
cm9sbGFibGVBcmVhKCkpCisgICAgICAgIGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCk7CisKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRv
IHJldmVhbCB0aGUgYW5jaG9yLgogICAgIC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBj
bG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hv
ck5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAg
LTM4NjIsNyArMzg3MCwxMSBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAg
ICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbGFibGVBcmVhKCk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJv
dW5kaW5nQm94KGJvb2wqKSBjb25zdApAQCAtNDMyNiw4ICs0MzM4LDExIEBAIHZvaWQgRnJhbWVW
aWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVj
dCYgZGlydHlSZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAg
ICAgcm9vdExheWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9w
YWludEJlaGF2aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09
IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlP
cmlnaW5QYWludFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4
dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlT
Y3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xs
YWJsZUFyZWEoKSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVSb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwg
ZGlydHlSZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQ
YWludENvbnRlbnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4u
ODA5YmMxOTEzNDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zOTQsNyArMzk1LDggQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBj
b250YWluZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xv
c2luZ0xheWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVu
Y2xvc2luZ0xheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKaW5kZXggNzM5MzE5Njc0ODc1Li40MjFiMzA3
NWFmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyKGNvbnN0IFJlbmRl
ckxheWUKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwog
Ci0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAg
ICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSA/IGxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSA6IGZhbHNlOwogfQogCiBTY3JvbGxp
bmdOb2RlSUQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVDb250YWluZXJOb2RlSUQo
Y29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCmluZGV4IGM4ZDgxZWYyNDg2Ni4uYjBkNjA2YTYwNGE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtl
ci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC01NTMsNyArNTU0LDkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJh
bnNhY3Rpb24oKQogCiAgICAgZm9yIChhdXRvKiBibG9jayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAg
ICAgICAgIEFTU0VSVChibG9jay0+aGFzT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBibG9jay0+
bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgICAgIGJsb2NrLT5s
YXllcigpLT51cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gYmxvY2stPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogICAgICAg
ICBibG9jay0+Y2xlYXJMYXlvdXRPdmVyZmxvdygpOwogICAgIH0KIH0KQEAgLTU4NCw4ICs1ODcs
MTMgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5ZXIoKSkKLSAg
ICAgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAo
IWxheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbGFi
bGVBcmVhKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0KCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTEzLDgg
KzExMjEsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIC8vIHotaW5kZXguIFdlIHBhaW50
IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3Jv
bGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAg
IGlmICgocGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBh
aW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpCi0gICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50
SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92
ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAg
ICAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgq
dGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgICAgICBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZv
LmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVk
SW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCkBAIC0yMDA3LDcgKzIwMTUsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3Zl
cmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9p
bnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
KTsKKyAgICBBU1NFUlQobGF5ZXIoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5l
ciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVy
QmxvY2s6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QKQEAgLTI1MDMsOCArMjUxNiw5IEBAIGludCBS
ZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBi
b29sIGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBt
b3ZlcykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxp
Z25zIHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxp
bmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVk
CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0
aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGlu
ZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jp
em9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNj
cm9sbE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAo
aXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxw
dHI7CisgICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAoc2Nyb2xsYWJsZUxheWVyICYmIChz
Y3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5l
ID8gKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpLnkoKSAhPSAwKQorICAgICAgICAgICAgOiAoc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigp
KTsKICAgICAgICAgCiAgICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVC
YXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9u
KTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCmluZGV4IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0OCw4IEBAIHZvaWQg
UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0
JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGls
ZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5s
aW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAm
JiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwo
KSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYm
IHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgp
LT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDMwN2Y5YjJjN2Yy
Zi4uOTUwMjY5MWFlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApA
QCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0
U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOCwxMSArMzE5LDEzIEBAIHZvaWQgUmVuZGVyQm94Ojpz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBh
IGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50
byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9z
aXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAg
ICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRT
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29t
U2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24oc2Nyb2xsUG9zaXRpb24pOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBvbGRTdHls
ZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20o
KSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBTY3JvbGxQb3Np
dGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpv
b20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBzY3JvbGxQb3Np
dGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICB9
CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhv
dXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBpbnQgUmVuZGVyQm94
OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCkt
PnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJu
IChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRv
cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAg
IHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSA/IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6
cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTkwLDMxICs1OTUs
MzggQEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5
ZXIpCiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlmICgh
cGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICByZXR1cm47Ci0gICAgbGF5
ZXIuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZS53aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGF1dG8m
IHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmltYXRvcigpOworICAg
IHNjcm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRU
ZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5l
d0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVm
dCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwg
YW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXll
cigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUs
IGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lQb3Np
dGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQg
UmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRp
b24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxh
eWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9u
aXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODE0
LDI0ICs4MjYsMzIgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2
ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6
OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFy
cygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBz
Y3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMo
KQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8
IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQogCiBib29sIFJlbmRl
ckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNj
cm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNj
cm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsKIH0KIAogaW50
IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICghc2Nyb2xsYWJsZUxh
eWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xs
YmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAw
OwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigp
LT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAg
ICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNT
Y3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTksMTYgQEAgaW50IFJl
bmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkg
ewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJh
cigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFibGVM
YXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0K
IAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxv
d1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkg
ewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xsYWJs
ZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzSG9yaXpvbnRhbFNj
cm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsK
ICAgICB9CiAKQEAgLTg1NCw4ICs4NzcsOCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3Jv
bGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIo
U2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJM
YXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXllci0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgYXV0byog
Ym94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hM
YXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1lbnQg
PSBlbGVtZW50KCk7CiAKQEAgLTg5Miw3ICs5MTUsOCBAQCBib29sIFJlbmRlckJveDo6bG9naWNh
bFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dAogICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKICAgICAgICAg
ICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURp
cmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsK
ICNlbmRpZgotICAgICAgICBpZiAobC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlv
biwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICBhdXRvKiBib3hM
YXllclNjcm9sbGFibGUgPSBsID8gbC0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cjsKKyAgICAgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFi
bGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAg
CiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAtOTIxLDYgKzk0NSwyMCBAQCBib29sIFJlbmRl
ckJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0CiAgICAgcmV0dXJu
IGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOwogfQogCitib29sIFJlbmRlckJv
eDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGlz
UmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzY3JvbGxzT3Zl
cmZsb3coKSB8fCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHN0eWxlKCkucmVzaXplKCkgIT0g
UmVzaXplOjpOb25lIHx8IHN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBGSVhN
RTogVGhpcyBpcyBiYWRseSBuYW1lZC4gb3ZlcmZsb3c6aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0
aWNhbGx5IHNjcm9sbGVkLCB5ZXQgdGhpcyByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZS4KIGJv
b2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIHsKQEAg
LTkzOCw3ICs5NzYsNyBAQCBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3Jv
bGxlZCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYg
bGF5ZXIoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpICYmIGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiB9CiAK
IHZvaWQgUmVuZGVyQm94OjphdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAg
LTk5Nyw4ICsxMDM1LDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJs
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNv
bnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVy
KCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
QXJlYSA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEtPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwogfQogCiBi
b29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMTAyNyw3
ICsxMDY1LDExIEBAIFNjcm9sbFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24oKSBj
b25zdAogICAgICAgICByZXR1cm4geyAwLCAwIH07CiAKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7
Ci0gICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFi
bGVMYXllcikKKyAgICAgICAgcmV0dXJuIHsgMCwgMCB9OworCisgICAgcmV0dXJuIHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNh
Y2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdApAQCAtMTU3NSw5ICsxNjE3LDEwIEBAIGJv
b2wgUmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQoY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAgICAgaWYgKCFnZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVu
dChwYWludE9mZnNldCwgYmFja2dyb3VuZFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3Jv
dW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsK
KyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3Vu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gZm9yZWdy
b3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3JvdW5kT2Jz
Y3VyYXRpb25UZXN0TWF4RGVwdGgpOwogfQogCkBAIC0xODk0LDEwICsxOTM3LDEwIEBAIExheW91
dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2Nh
dGlvbiwgUmVuZGVyRnJhZ21lCiAgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkg
LSBMYXlvdXRTaXplKGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsg
Ym9yZGVyQm90dG9tKCkpKTsKIAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdl
IGhhdmUgdGhlbS4KLSAgICBpZiAobGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsK
ICAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkK
LSAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCAwKTsKLSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIoKS0+dmVy
dGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KHJlbGV2YW5jeSkpOworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShzY3JvbGxh
YmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7CisgICAgICAg
IGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
cmVsZXZhbmN5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDNjZDgwYmNkMDcyZC4uZGYwZWExYzA3MTRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHx8ICFzdHlsZSgpLmhhc0F1dG9Vc2VkWkluZGV4KCkgfHwgaGFzUnVubmlu
Z0FjY2VsZXJhdGVkQW5pbWF0aW9ucygpOwogICAgIH0KIAorICAgIGJvb2wgcmVxdWlyZXNMYXll
cldpdGhTY3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25U
b0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QgZmluYWw7
CiAgICAgCiAgICAgLy8gUmV0dXJucyBmYWxzZSBmb3IgdGhlIGJvZHkgcmVuZGVyZXIgaWYgaXRz
IGJhY2tncm91bmQgaXMgcHJvcGFnYXRlZCB0byB0aGUgcm9vdC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGI5ODI3YzhhMTRk
Mi4uYmE1ZGNmYTQwMzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00ODksOCArNDkwLDEwIEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFp
bnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyTG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXplKGVu
Y2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBh
ZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3Ao
KSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5j
bG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdC
b3ggIT0gY29udGFpbmluZ0Jsb2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yICs9IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgfQogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmluZ0Js
b2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTUw
Nyw4ICs1MTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBv
c2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICBpZiAoZW5jbG9zaW5n
Q2xpcHBpbmdMYXllcikgewogICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxp
bmdBbmNlc3RvciAtPSBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgp
ICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xv
c2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGlu
Z1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5n
QmxvY2spCi0gICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc3RpY2t5
TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgfQogICAgIC8v
IEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90IHRyYW5zZm9ybWVkLgog
ICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5zZXRMb2NhdGlvbihzdGlj
a3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01NDcsMTEgKzU1Miwx
NCBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmluZ1JlY3RGb3JT
dGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRSZWN0IGNvbnN0cmFpbmluZ1Jl
Y3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3Qo
Y2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0gICAgICAgIEZsb2F0UG9pbnQg
c2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xh
eWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAg
RmxvYXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlRW5jbG9zaW5n
Q2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSAr
IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKIAogICAg
ICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xp
cHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBw
aW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpICYmIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGlu
Z0xheWVyKQorICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gc2Nyb2xsYWJsZUVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxvYXRQ
b2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQueSgp
KSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMzI2ZTI4ZTYwYzQ3Li41ODVhNDM2ZjM0NjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUg
Q29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgog
ICoKQEAgLTk3LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckZp
bHRlcnMuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgog
I2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKQEAgLTMwNCw0MCArMzA2LDI2IEBAIFJlbmRlckxh
eWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9k
ZWxPYmplY3QpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1faGFk
TmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQogICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCi0g
ICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFpbnRp
bmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAg
ICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZsb3dS
ZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQp
CiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzVmlz
aWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHko
ZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdW
aWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBtXzNE
VHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzM0RUcmFu
c2Zvcm1lZERlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFu
dChmYWxzZSkKICAgICAsIG1faGFzQ29tcG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzKGZh
bHNlKQotICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCi0gICAg
LCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2hhc1Ry
YW5zZm9ybWVkQW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3Rv
cihmYWxzZSkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1f
aW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RD
b21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRh
dGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzYxLDE2ICszNDksNiBAQCBSZW5kZXJMYXll
cjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVs
T2JqZWN0KQogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAg
ICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUgYW5kIHJl
c3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFy
ZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIGlmIChyZW5kZXJCb3goKSkgewotICAgICAgICAgICAg
bV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwot
ICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24p
OwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlv
bihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQpA
QCAtMzc4LDI5ICszNTYsMTAgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgaWYg
KGluUmVzaXplTW9kZSgpKQogICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9s
bGFibGVBcmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkK
LSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEodGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNl
dFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAg
ICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBj
bGVhclNjcm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigpOwotCisgICAgY2xlYXJMYXll
clNjcm9sbGFibGVBcmVhKCk7CiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChw
YWludHNJbnRvUHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTkxMyw4ICs4NzIsMTAgQEAgT3B0aW9u
U2V0PFJlbmRlckxheWVyOjpVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IFJlbmRlckxheWVyOjpm
bGFnc0ZvclVwZGF0ZUxheWUKICAgICAgICAgaWYgKHBhcmVudC0+YmVoYXZlc0FzRml4ZWQoKSB8
fCAocGFyZW50LT5yZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgIXBhcmVudC0+aGFz
VHJhbnNmb3JtZWRBbmNlc3RvcigpKSkKICAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuRml4ZWRM
YXllcik7CiAKLSAgICAgICAgaWYgKHBhcmVudC0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yKCkgfHwgcGFyZW50LT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAg
ICAgICAgICBmbGFncy5hZGQoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcik7CisgICAgICAg
IGlmIChhdXRvKiBwYXJlbnRTY3JvbGxhYmxlTGF5ZXIgPSBwYXJlbnQtPnNjcm9sbGFibGVBcmVh
KCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRTY3JvbGxhYmxlTGF5ZXItPmhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3RvcigpIHx8IHBhcmVudFNjcm9sbGFibGVMYXllci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIGZsYWdzLmFkZChTZWVu
Q29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVy
biBmbGFnczsKQEAgLTk0OSw3ICs5MTAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdl
b21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsK
ICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVk
KCk7CiAKICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFw
cGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKQEAgLTk1Nyw3ICs5MTksNyBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGlu
Zm9ybWF0aW9uLgogICAgIGNsZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dD
b250cm9scygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJl
YS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSB7CiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RnJv
bVJvb3Q7CiAgICAgICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgICAgIG9mZnNldEZyb21S
b290ID0gTGF5b3V0U2l6ZSh0b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChG
bG9hdFBvaW50KCkpKSk7CkBAIC05NjYsNyArOTI4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25T
ZXQKICAgICAgICAgICAgIC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1
ZSBmb3IgYW4gYW5jZXN0b3IgbGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9m
ZnNldEZyb21BbmNlc3Rvcihyb290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3Zl
cmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5wb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUo
b2Zmc2V0RnJvbVJvb3QpKTsKICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50
RmxhZ3MoKTsKQEAgLTEwMTMsNyArOTc1LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAg
ICBtX2hhc1RyYW5zZm9ybWVkQW5jZXN0b3IgPSBmbGFncy5jb250YWlucyhTZWVuVHJhbnNmb3Jt
ZWRMYXllcik7CiAgICAgbV9oYXMzRFRyYW5zZm9ybWVkQW5jZXN0b3IgPSBmbGFncy5jb250YWlu
cyhTZWVuM0RUcmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2JlaGF2ZXNBc0ZpeGVkID0gZmxhZ3Mu
Y29udGFpbnMoU2VlbkZpeGVkTGF5ZXIpOwotICAgIHNldEhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcihmbGFncy5jb250YWlucyhTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKSk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldEhh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmbGFncy5jb250YWlucyhTZWVuQ29tcG9zaXRl
ZFNjcm9sbGluZ0xheWVyKSk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHJlZmxlY3Rpb24ncyBwb3Np
dGlvbiBhbmQgc2l6ZS4KICAgICBpZiAobV9yZWZsZWN0aW9uKQpAQCAtMTAzNiwyMCArOTk5LDE1
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5
TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgIGZsYWdzLmFkZChTZWVuRml4ZWRM
YXllcik7CiAgICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9z
aXRlZFNjcm9sbGluZ0xheWVyKTsKIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAg
Y2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAv
LyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVl
ZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6
IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRo
IGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwot
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChyZW5kZXJlcigp
LmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGJvb2wgaW50
ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJbnRlcnNlY3RzVmlld3Bv
cnQoKnRoaXMpOwpAQCAtMTEyOSwyNyArMTA4Nyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
UmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVwYWludExheW91dFJlY3RzKCk7
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0
cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21l
dHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFy
ZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hl
Y2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCi0gICAgLy8gaW5pdGlh
bGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFu
Y2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Ci19Ci0KIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlN
YXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bEZsYWc+IGZsYWdzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQs
IGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKQEAgLTEyMDIsMTIgKzExMzks
OCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcAogICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBS
ZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxh
eWVyIHBvc2l0aW9uIHdhcwogICAgIC8vIHVwZGF0ZWQgYWJvdmUuCiAKLSAgICBpZiAobV9tYXJx
dWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0g
dHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAg
ICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAKICAgICBpZiAoc2hvdWxkUHVzaEFuZFBv
cE1hcHBpbmdzKQogICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBh
cmVudCgpKTsKQEAgLTE2OTgsOCArMTYzMSwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVM
YXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwog
ICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwogICAgIGlmIChyZW5kZXJlcigpLmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5j
ZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CiAgICAg
ICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3Np
bmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0gICAgICAgIGlmIChwb3NpdGlv
bmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9j
YWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcG9zaXRpb25lZFBhcmVudFNjcm9sbGFi
bGVBcmVhID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAg
ICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBp
czxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAg
ICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4ocG9zaXRpb25l
ZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25lZElubGluZSgmZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CkBAIC0xNzA5LDE0ICsxNjQ0LDE2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgICAgIEFTU0VSVChwb3NpdGlvbmVkUGFyZW50LT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
cG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAgIH0gZWxzZSBp
ZiAoYXV0byogcGFyZW50TGF5ZXIgPSBwYXJlbnQoKSkgewotICAgICAgICBpZiAocGFyZW50TGF5
ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50
IC09IHRvTGF5b3V0U2l6ZShwYXJlbnQoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlm
IChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEgPSBwYXJlbnRMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6
ZShwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAg
fQogCiAgICAgICAgIEFTU0VSVChwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgp
KTsKICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyLT5jb250ZW50c1Nj
cm9sbGluZ1Njb3BlKCk7CiAgICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFy
ZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoIW1f
Y29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9i
b3hTY3JvbGxpbmdTY29wZSkKICAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9
IG5leHRTY3JvbGxpbmdTY29wZSgpOwogICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxp
bmdTY29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29w
ZSkKQEAgLTE4NDIsOSArMTc3OSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNv
bnN0IFJlbmRlckxheWVyJiBsYXllcikKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0g
bGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOworICAgIGF1dG8qIG93
bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBp
ZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTE4NTUsMTUg
KzE3OTIsMTUgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5j
bG9zaW5nTGF5ZXIoKTsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFy
aWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1l
Qm91bmRhcmllcykgY29uc3QKIHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNs
b3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0
b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0
dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CkBAIC0xODc3LDcgKzE4MTQs
NyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAogICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNs
dWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlz
KSkKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKICAgICAK
LSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJp
ZXMpKSB7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4
dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmll
cykpIHsKICAgICAgICAgaWYgKGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCiAg
ICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwogICAgIH0KQEAgLTE4ODUsNTAgKzE4MjIsNiBA
QCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1JbnRS
ZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRl
Rml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1
dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkg
ewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jl
c3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
OwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQot
ICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJ
blByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmlt
YXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7Ci19Ci0KIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNv
bnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAgLTI0NTQsMTkgKzIz
NDcsNiBAQCBMYXlvdXRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3Qg
UmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUo
Y29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0
Rm9yQ29sdW1ucykpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKLXsKLSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWln
bk9iamVjdCgpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9X
X1NDUk9MTElOR19UT1VDSCkKLSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxv
dygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xs
KCkpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQogYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDk2LDI4OSArMjM3Niw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJ
WE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJl
bmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQot
Ly8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJv
b2wgUmVuZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0K
LQotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVs
dGEpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAg
Ly8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQv
d2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEy
OwotCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNl
cjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBz
dGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4o
YWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQot
ICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICog
c3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJl
dHVybiBhZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRT
Y3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShh
ZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRl
bHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2lu
dChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3du
TW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25v
d25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUg
bGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUg
bW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0g
ICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtu
b3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwg
MCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlv
bjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1v
dXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlv
biAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxW
aWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNl
IGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRl
bHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAg
ZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxS
ZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVj
dXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRB
cmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ym9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5w
YXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAg
IFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwot
ICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Ny
b2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAg
Ly8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXll
ciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Ny
b2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlm
ICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgot
ICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vy
c2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAg
ICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5k
ZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhl
cmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGlj
YWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBj
bGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBz
Y3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnko
ZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVk
QXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhN
RTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBs
b29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9z
aXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9z
aXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQ
b3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRl
ZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwg
eSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5n
LCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYg
KGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxU
eXBlLCBjbGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0K
LVNjcm9sbE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xs
T2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5j
b25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1
cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhp
cywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xs
T2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgY2xhbXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09
IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xh
bXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8g
Y2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAo
Y2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgp
OwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1
ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRT
Y3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAg
c2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0
aW9uKTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBT
Y3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3Jv
bGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBT
Y3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChj
dXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5O
b25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0
aW9ucygpOwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkp
Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3
U2Nyb2xsT2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xs
VHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJiBwb3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAg
IGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIg
ZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3Vy
cmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Ny
b2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1M
TWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwg
YmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2Nr
cykuCi0gICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAg
ICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBC
ZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGlu
dCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRo
KCkpOwotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9
IG5ld09mZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNl
dCAtIGNhcmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0
V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkK
LSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgp
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAg
ICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNl
bmRpZgotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlv
biAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1
czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVl
cyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBl
bmQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRv
ciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVy
ZSBlbmRzLgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwot
ICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3
UG9zaXRpb247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVk
ZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4K
LSAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5l
ZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAg
ICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5
b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdl
J2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAg
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZp
ZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAg
ICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lk
IHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2Un
cmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRh
dGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBS
ZW5kZXJMYXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxs
IHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVy
cyBsYXRlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVl
ZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3Jv
bGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2Nl
bmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAg
ICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFja2luZyBjb250
ZXh0LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IHN0YWNraW5nQ29u
dGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNO
ZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2Ug
dGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERl
YnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0K
LSAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVw
YWludCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFm
dGVyIHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBk
YXRlKCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCku
aGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygp
Lm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFp
bmVyKQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5l
ci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBm
cmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQo
cXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9
IHRydWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0
TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRz
TmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWly
ZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsK
LSAgICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmpl
Y3QuCi0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50
VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAg
Ly8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBl
bGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7
Ci0KLSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCku
ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0
Q29udGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3Jv
bGwoKnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Bl
cm1pdFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVW
aWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRs
eSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODIzLDcgKzI0MjAsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29s
dXRlUmVjdCwgYm9vbCBpbnNpZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVS
ZWN0OwogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci0gICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRM
YXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpObyk7CiAKICAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1l
bnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQogICAgIHsKQEAgLTI4MzMsNiAr
MjQzMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgfTsKIAogICAgIGlmIChhbGxv
d3NDdXJyZW50U2Nyb2xsKCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5z
dXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0byBy
ZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0
LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZy
b20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KICAg
ICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKQEAgLTI4NDMsMjQgKzI0NDIsMTcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0
JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgLy8gYm9yZGVyIGVkZ2UuIE1ha2Ug
dGhlIHJlY3RhbmdsZSByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhLgogICAgICAgICBs
b2NhbEV4cG9zZVJlY3QubW92ZUJ5KC1MYXlvdXRQb2ludChib3gtPmJvcmRlckxlZnQoKSwgYm94
LT5ib3JkZXJUb3AoKSkpOwogCi0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBGb3IgZGlyZWN0aW9u
OiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwgYmFyIGlz
IG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAgICAgIC8vIHN0YXJ0
cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxvY2FsRXhw
b3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0gICAgICAg
ICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCksIDApKTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0
UG9pbnQoLXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CiAg
ICAgICAgIH0KICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1LCAwX2x1LCBib3gt
PmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBleHBhbmRTY3Jv
bGxSZWN0VG9WaXNpYmxlVGFyZ2V0UmVjdFRvSW5jbHVkZVNjcm9sbFBhZGRpbmcoYm94LCBsYXll
ckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0KTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0
ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZp
eGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9m
ZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0
KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwot
ICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pIHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmlt
YXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgb3B0aW9ucy5iZWhhdmlvcik7Ci0gICAgICAgICAg
ICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9s
bE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5j
ZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0gICAgICAgICAgICBs
b2NhbEV4cG9zZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7Ci0gICAgICAgICAg
ICBuZXdSZWN0ID0gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3go
KSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc2Nyb2xsYWJsZUxheWVy
LT51cGRhdGVTY3JvbGxQb3NpdGlvbihvcHRpb25zLmJlaGF2aW9yLCByZXZlYWxSZWN0LCBsb2Nh
bEV4cG9zZVJlY3QpKQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAg
IH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwog
CkBAIC0yODc0LDcgKzI0NjYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAg
ICAgICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUg
b3duZXJFbGVtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlw
dERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAot
ICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNv
bnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAg
IExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9s
bGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAg
ICAgIGF1dG8qIGVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3du
ZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRy
OwogICAgICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVu
dC0+cmVuZGVyQm94KCkgOiBudWxscHRyOwpAQCAtMjk1MSwyMyArMjU0Myw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVS
ZWN0LCBib29sIGluc2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxl
KG5ld1JlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0
b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3Rh
Y2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2Nl
bmRhbnRzIHRoYXQgbWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRl
IGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9z
aXRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMo
Q29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5j
ZXN0b3IpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdv
dWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZm
ZWN0ZWQgYnkgc2Nyb2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3It
PnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsK
LSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29t
cG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6
OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5
b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25t
ZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBA
IC0zMTE0LDcgKzI2ODksNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQt
PnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91
dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8g
em9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5k
ZXJlci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAg
ICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1
c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAg
fQpAQCAtMzEzNCwxMDI0ICsyNzA5LDExMSBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAg
ICAgICBMYXlvdXRVbml0IGJhc2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6
aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4
dGVudCgpKTsKICAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKICAg
ICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdp
ZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9u
dGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBt
YXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJn
aW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAg
c3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJv
dHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6
OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVu
ZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52
ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBi
YXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsg
ZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAg
IGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQp
OiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtl
ZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAg
IHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xs
aW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlm
ICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tp
bmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3Jv
bGxpbmcpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRl
cm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVz
aW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNj
cm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxi
YXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNl
ID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRo
aXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6
Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0
ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkp
IH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAot
ewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBG
SVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNl
dEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUg
PSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgp
IDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAg
ZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVh
Y2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5z
ZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAg
IHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hh
YmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAg
ICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBh
Z2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxh
eWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9s
bENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkp
OwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVy
ZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigm
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJ
bnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9p
bnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVu
ZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChz
Y3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJu
IEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+
Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWln
aHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRz
U2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0g
ICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgo
KSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4o
Y29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICBy
ZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAg
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0g
ICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hh
bmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVs
YXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgp
OwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6
ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4g
d2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgot
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3Jv
bGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQot
Ci1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAg
IGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJl
bmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAw
OwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lk
dGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5n
ZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25P
dmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Ny
b2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkg
IT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVO
b25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Ny
b2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9s
bGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXpl
IGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAv
LyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUu
Ci0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9Owot
ICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0g
ICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJT
aXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3Qu
Y29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAg
ICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdo
dCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAg
IH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAg
IGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21M
ZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgp
LCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJT
aXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUp
OwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRD
b3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xs
YmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQot
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50
U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRl
ckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6Omlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBs
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsK
LX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAg
IGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJh
cj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJl
ciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3Rv
bVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAg
ICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVu
dCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVn
dWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9u
KTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9u
TnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3Jv
bGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92
QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNj
cm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJh
cihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikK
LXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIg
PSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNj
cm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNj
cm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJh
ciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUg
c2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHls
ZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
IGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAg
ICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0
eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5k
aW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0
b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNj
cm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bw
b3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFy
LT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxl
Q2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkK
LXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwot
fQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhU
TUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkp
IHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0g
ICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5z
dHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAo
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9k
ZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1
cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0g
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsK
LX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVy
IDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2Up
LCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAo
dHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7
Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1v
ZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAg
ICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xh
dGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAv
LyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAg
ICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tp
bmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2
YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYg
KHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAg
ICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAg
ICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQot
ICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5l
cik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVj
dChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVy
biBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWln
aHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxv
d0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNp
emUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkp
OwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgp
IC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9s
bGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBz
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJv
cmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZs
b3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93
WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJu
IHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xs
SGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0K
LXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93
ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0
eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxl
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3Rh
dGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVy
ZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIg
PyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBv
dmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxl
IG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJl
bmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBh
Z2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7
Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJh
cnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRy
dWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWlu
U2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSBy
YW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAg
ICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Nj
cm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJl
Zm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNl
IG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwot
I2VuZGlmCi0KLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBM
YXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJ
biB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0
cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBl
bmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBw
b2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8g
b2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Cisg
ICAgfQogCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9z
aXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYm
IGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5z
IGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3Ao
KSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwg
cmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19Q
WCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXIt
PmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNh
bEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVp
Z2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVy
ZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAotICAgIGlmIChj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENv
bXBvc2l0aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICB1
cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdl
IHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0
aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJlbmRlckxheWVy
OjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKLSAgICBpZiAo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAg
ICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAg
IC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJm
bG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFk
ZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVjdHMudmVydGlj
YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5kZXJCb3guc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJl
c2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwogCi0g
ICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBhdXRv
IGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxl
ZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVy
KCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCks
IGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6
ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6
ZSB9OworICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVj
dCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAg
ICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9s
bGJhclRoaWNrbmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBz
Y3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9CiAKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBP
biBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJl
dHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXpl
KCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJuIHRydWU7Ci19
CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFu
c2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi17Ci0g
ICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAo
IXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
aGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAK
LSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJh
Y2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4g
YSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBh
aW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9y
bWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBi
ZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVy
ZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQu
IFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0
byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRo
ZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBw
YXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmln
aHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50
T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25k
IHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgo
bV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdl
UmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xz
SW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAg
aWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBt
b2RlIl9zKTsKIAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAg
ICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7CisgICAgaWYgKGlz
b2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVu
ZGluZyJfcyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVk
KCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0g
aW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0g
PDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxl
YXNlKCkpOwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQg
cGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChwYWludGluZ092
ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwotICAg
IGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNl
dCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1vdmUgdGhlIHNj
cm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6
ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3aWRnZXRzIGNh
biBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNj
cm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVs
ZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVk
UGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJh
cnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYm
ICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBz
Y3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBl
ZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQ
YWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIg
bGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFp
bnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBSZW5kZXJMYXll
cjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29u
c3QKIHsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRh
bWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRp
bmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAg
ICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBh
YnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdl
IG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHJl
bmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVz
aXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7
CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRlckxheWVyOjpz
Y3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFn
ZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0g
ICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAg
ICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigp
KTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwot
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0g
ICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJT
aXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0Lmhl
aWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNj
YWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdl
KQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0
LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6
ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9
IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJh
d0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50
KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50
IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigp
LnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0
IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3Zl
QnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1h
Z2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5n
Q29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jl
c2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxIZWlnaHQoKTsKIAotICAgIC8v
IERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJl
IGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVk
ZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAgIGlmICghaGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICBjb250
ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5l
ciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRT
aXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsg
MV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsg
MjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4w
Zik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIp
KTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQo
Ym94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgpIC0gb3ZlcmZs
b3dSZWN0LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRy
b2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNjIsNDIgKzI4MjQsNiBAQCBib29s
IFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQp
IGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFp
bnMobG9jYWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
Ci17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJl
c2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5l
ciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYm
IG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNo
b3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVB
cmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Ci19Ci0KIHZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVu
dFJlZ2lvbkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92ZXJsYXBUZXN0
UmVxdWVzdHM7CkBAIC00MjEzLDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAog
ICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAg
aWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJl
Y3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50
Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJG
bGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1Jl
Y3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFp
bnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3Qg
Q2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAg
ICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpOwpAQCAtNDI0Niw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xp
cFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JgogICAgICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9y
IGJlaW5nIGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2Jq
ZWN0IGJlIGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNo
ZWNrIHRoYXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09
IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5
ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNv
bnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYm
IGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgYm9vbCB1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8gbGF5ZXItPnNj
cm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0
ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChsYXllci0+cmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhh
c0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4o
KmxheWVyKSkgewpAQCAtNDQ0OCw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBG
b250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sJgog
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVh
bnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwg
dGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBj
b250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAm
JiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25l
ckVsZW1lbnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNjcm9sbGFi
bGVBcmVhKCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIDog
ZmFsc2U7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJl
cigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAo
c2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pv
b21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzUxLDggKzMzNjgsMTAgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBj
dXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Nj
cm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAg
ICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50aW5n
T3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygpKQor
ICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgfQog
CiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNh
bGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMgcmVz
ZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIyMiwxMSArMzg0MSwxMyBA
QCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJm
bG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21l
bnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBs
b2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAgICAg
aWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0s
IGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
KGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91
bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8u
c3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWlu
dGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3JlQ2xp
cChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwog
ICAgIH0KQEAgLTUyNjUsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAg
ICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7
CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9y
dFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2Vj
dChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJz
ZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3Jv
bGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAg
IFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCBy
ZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAg
LTU0OTYsNyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVy
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9mZnNl
dEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7
Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJG
cmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2FuUmVz
aXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0UmVz
aXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9p
bnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxv
Y2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTcxLDM1ICs0MTky
LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0
IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2Nh
dGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5
ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
IGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJ
bnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAg
ICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewot
ICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3Qu
bWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBv
ZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9
LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNl
dEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21l
bnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6
ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAo
aW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAg
ICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwot
ICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50
KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0g
ICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2Nh
dGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5y
b3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0
UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2Nh
dGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RU
cmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVy
TGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjA2
MCw5ICs0NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdh
cHMoKQogICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGFibGVBcmVh
KCk7CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsK
LSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYg
KHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFibGVMYXllci0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4o
cmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8v
IEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhh
c0NsaXAoKSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdp
b25zIG5vdCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM1OSwyMSArNDk1NCw2IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNraW5nICYm
IG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBt
X2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVs
bHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxT
Y3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7
Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dp
bmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsK
QEAgLTY0MDQsMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQ
YXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAogICAgIHJldHVy
biBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5n
Q2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3Jv
dW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBj
b25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRp
bmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1MzIsOSArNTEwNywxMCBAQCBib29sIFJlbmRlckxh
eWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAoIWlzTm9ybWFs
Rmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gaGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSB8fCBt
X3Njcm9sbGFibGVBcmVhLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAg
ICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVv
KCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0KCkKQEAgLTY2NDksNyAr
NTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNv
bnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwg
aGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlv
bnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVh
LT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1Zpc3Vh
bGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApAQCAtNjY1
OSw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50
ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250
ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkg
fHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250
cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIApAQCAtNjY4NCwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlO
b25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJu
IGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1z
ZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxv
dyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3Zl
cmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9p
bmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBr
ZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAg
ICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkg
JiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9v
bCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFy
KGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVy
bGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1h
eSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3
ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFy
ICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNj
cm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJh
ciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9y
bWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3MzYsNiArNTI4MCw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9CiAKKyAgICB1cGRhdGVT
Y3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFu
ZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRz
LiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRo
ZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc0NywxOCArNTI5MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBp
cyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNp
YmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFi
bGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hU
TUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1h
cnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYg
KCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1h
cnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwot
ICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwot
Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9y
RGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xs
YmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNj
cm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAg
ICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0
ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3NzMsMTMgKzUzMTUsMTEg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6IE5l
ZWQgdG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5k
IHZpY2UgdmVyc2EpLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFu
Z2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsK
LSAgICAKLSAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJT
dHlsZSgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5k
ZW50RmxhZ3MoKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0oKTsKQEAgLTY4MDAsOTggKzUzNDAsNiBA
QCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCi17Ci0gICAgRnJhbWVW
aWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgIGJv
b2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIoKS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7
Ci0gICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUo
KS5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5y
ZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0K
LSAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVz
dDsKLSAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVB
cmVhKHRoaXMpKTsKLSAgICAKLSAgICBpZiAoaXNTY3JvbGxhYmxlKSB7Ci0gICAgICAgIGlmICgh
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVk
ID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICAgICAgbV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZy
YW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgbV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKLSAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsKLSAgICAgICAgaWYgKGlzU2Nyb2xsYWJs
ZSAmJiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgcmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0
ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBiZWNhbWUKLSAgICAgICAgICAgIC8vIGFj
Y2VsZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCi0g
ICAgICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsK
LSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1v
dmVkKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7
IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6
IG51bGxwdHI7Ci0KLSAgICBpZiAoIWNvcm5lcikgewotICAgICAgICBjbGVhclNjcm9sbENvcm5l
cigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikg
ewotICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJh
clBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7Ci0gICAgICAg
IC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0g
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBt
X3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
c2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6Y2xlYXJTY3JvbGxDb3JuZXIoKQotewotICAgIGlmICghbV9zY3JvbGxDb3JuZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIp
OwotICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlUmVzaXplclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJl
ciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVzaXplciA9
IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNo
ZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5
bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZXNpemVyKSB7Ci0gICAgICAgIGNsZWFyUmVz
aXplcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc2l6ZXIpIHsK
LSAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4o
cmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAg
IG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9yZXNpemVyLT5p
bml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9yZXNpemVyLT5zZXRTdHls
ZShXVEZNb3ZlKCpyZXNpemVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVzaXpl
cigpCi17Ci0gICAgaWYgKCFtX3Jlc2l6ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jlc2l6
ZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOwotfQotCiBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlZmxlY3Rpb25MYXllcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fcmVmbGVjdGlvbiA/IG1fcmVmbGVjdGlvbi0+bGF5ZXIoKSA6IG51bGxwdHI7CkBA
IC02OTczLDYgKzU0MjEsMjYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJMYXllckZpbHRlcnMo
KQogICAgIG1fZmlsdGVycyA9IG51bGxwdHI7CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEqIFJlbmRlckxheWVyOjplbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBib29s
IGhhZFNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIW1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBtYWtlVW5pcXVlPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE+KCp0aGlzKTsKKworICAgIGlmICghaGFkU2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5nZXQoKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6Y2xl
YXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgewor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5jbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YSA9IG51bGxwdHI7CisgICAgfQorfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJz
QWZ0ZXJTdHlsZUNoYW5nZSgpCiB7CiAgICAgaWYgKCFoYXNGaWx0ZXIoKSkgewpAQCAtNjk4OSw2
ICs1NDU3LDMxIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlcnNBZnRlclN0eWxlQ2hh
bmdlKCkKICAgICAgICAgbV9maWx0ZXJzLT5yZW1vdmVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7
CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKKyAgICAgICAgY2xlYXJMYXllclNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBib3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIGlmICghYm94LnJlcXVpcmVzTGF5
ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKTsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y3JlYXRlT3JEZXN0cm95
TWFycXVlZSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0
eWxlQ2hhbmdlKG51bGxwdHIpOworICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAg
ICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQoKTsKKyAgICBtX3Njcm9s
bGFibGVBcmVhLT51cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVG
aWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKIHsKICAgICAvLyBSZW5kZXJMYXllckZpbHRlcnMgaXMg
b25seSB1c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVycyBpbiBzb2Z0d2FyZSBtb2RlLApAQCAtNzAy
Myw3ICs1NTE2LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5w
YXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdG
cmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVS
ZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVj
dGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MDQ1LDYgKzU1MzgsMTEgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2ltdWxhdGVGcmVxdWVudFBhaW50KCkKICAgICBTaW5nbGVQYWludEZyZXF1ZW5j
eVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIsIHBhZ2UoKS5sYXN0UmVuZGVyaW5n
VXBkYXRlVGltZXN0YW1wKCkgfTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVu
ZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS5nZXQoKTsKK30KKwogI2lmICFMT0dfRElTQUJMRUQKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllcjo6RXZlbnRSZWdpb25JbnZh
bGlkYXRpb25SZWFzb24gcmVhc29uKQogewpAQCAtNzI0Nyw5ICs1NzQ1LDEwIEBAIHN0YXRpYyB2
b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRTdHJlYW0mIHN0cmVhbSwgY29u
c3QgV2ViQ29yZTo6UmVuCiAgICAgICAgIHJldHVybiAiLSI7CiAgICAgfTsKIAorICAgIGJvb2wg
bGF5ZXJIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBsYXllci5zY3JvbGxhYmxlQXJl
YSgpID8gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yKCkgOiBmYWxzZTsKICAgICBzdHJlYW0gPDwgY29tcG9zaXRlZFBhaW50aW5nRGVzdGluYXRp
b25TdHJpbmcoKTsKICAgICBzdHJlYW0gPDwgKGxheWVyLmhhc0NvbXBvc2l0aW5nRGVzY2VuZGFu
dCgpID8gImMiIDogIi0iKTsKLSAgICBzdHJlYW0gPDwgKGxheWVyLmhhc0NvbXBvc2l0ZWRTY3Jv
bGxpbmdBbmNlc3RvcigpID8gInMiIDogIi0iKTsKKyAgICBzdHJlYW0gPDwgKGxheWVySGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID8gInMiIDogIi0iKTsKICAgICBzdHJlYW0gPDwgKGxh
eWVyLmhhc1RyYW5zZm9ybWVkQW5jZXN0b3IoKSA/ICJ0IiA6ICItIik7CiAKICAgICBzdHJlYW0g
PDwgIiAiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBmZGZmMmVm
ZGZlYjEuLjI2ODhjMGQxZmM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEy
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgg
TmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtNTEsNyArNTIsNiBA
QAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0ci5oIgogI2luY2x1
ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFz
cyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CiBjbGFz
cyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwog
Y2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBjbGFzcyBSZW5kZXJT
Y3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsxNDQsMjEgQEAgc3RydWN0IFNjcm9sbFJlY3RUb1Zp
c2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7CiAKIERFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJl
bmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxh
eWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGlj
OgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5k
ZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogCiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAg
ICBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAg
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsK
KwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVu
ZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdp
bGxCZURlc3Ryb3llZCgpOwpAQCAtMjIzLDYgKzIyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZGVzdHJv
eSgpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBv
cmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQw
MSw2ICs0MDksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcGFpbnRJbmNsdWRpbmdEZXNjZW5k
YW50cygpOwogCisgICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gSW5k
aWNhdGUgdGhhdCB0aGUgbGF5ZXIgY29udGVudHMgbmVlZCB0byBiZSByZXBhaW50ZWQuIE9ubHkg
aGFzIGFuIGVmZmVjdAogICAgIC8vIGlmIGxheWVyIGNvbXBvc2l0aW5nIGlzIGJlaW5nIHVzZWQu
CiAgICAgdm9pZCBzZXRCYWNraW5nTmVlZHNSZXBhaW50KEdyYXBoaWNzTGF5ZXI6OlNob3VsZENs
aXBUb0xheWVyID0gR3JhcGhpY3NMYXllcjo6Q2xpcFRvTGF5ZXIpOwpAQCAtNDExLDggKzQyMSw2
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAotICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUo
KSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KLQogICAgIGJvb2wgaXNTZWxmUGFp
bnRpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWxmUGFpbnRpbmdMYXllcjsgfQogCiAg
ICAgYm9vbCBjYW5ub3RCbGl0VG9XaW5kb3coKSBjb25zdDsKQEAgLTQzMywxMDYgKzQ0MSwyOSBA
QCBwdWJsaWM6CiAKICAgICBMYXlvdXRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRS
ZWN0KGxvY2F0aW9uKCksIHNpemUoKSk7IH0KIAotICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAg
IEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLQogICAg
IGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwogICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsK
IAotICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAv
LyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVy
Zmxvdy4KLSAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7Ci0KLSAgICBib29sIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkKSBmaW5hbDsKLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zm
c2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CiAKICAgICB2b2lkIHNjcm9sbFRvWFBvc2l0
aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAgICAgdm9pZCBz
Y3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OwogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRl
ZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1
c2VkIGJ5IG1hcnF1ZWUuCi0gICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLSAgICB2b2lkIHNj
cm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGlu
Zzo6VW5jbGFtcGVkKTsgfQotCi0gICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
T3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKLSAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQoKTsKKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCk7Cisg
ICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgbmVh
cmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgogICAgIC8vIEZJWE1FOiBU
aGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFi
bHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1l
Qm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdl
ZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJl
Y3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJl
Y3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZp
eGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8
IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAg
ICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ry
b3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0g
ICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Ny
b2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgp
IGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Ny
b2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9s
bFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Ny
b2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAg
ICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhh
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVz
ZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05B
UCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJv
b2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxp
YXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0g
cmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRp
ZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAg
ICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5z
IHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24n
dCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4K
LSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKLSAgICAvLyBSZXR1
cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1
aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93OyB9Ci0KLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsK
LSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wg
aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29u
dHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAg
ICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBv
aW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBw
YWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29y
bmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAg
dm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29sIGNhblJlc2l6ZSgp
IGNvbnN0OwpAQCAtNTU1LDkgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBh
aW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xs
KCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsK
LQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVySW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4o
KSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBv
c2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5j
bHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM3LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNv
bnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Js
b2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVs
YXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVk
LgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAt
Njk4LDcgKzYyOCw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFp
bnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdp
biwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0
Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVu
ZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xp
cFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5
ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVz
cGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODQsMTEgKzcxMyw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVuaXQg
cG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9p
ZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNC
bG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBt
X2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0
aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
LmdldCgpOyB9CkBAIC04NTgsMTYgKzc4Miw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJh
Y2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVy
QmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9sbGlu
ZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQot
ICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
ID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0KICAgICAvLyBMYXllcnMgd2l0
aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5j
ZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxT
Y3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNj
cm9sbGluZ1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0K
QEAgLTg4NSwxMSArNzk5LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdp
dmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0Jl
T3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xs
aW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
ID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29u
c3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0Owog
CkBAIC05MTgsOCArODI3LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRl
cmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wg
cGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNr
ZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzgzNyw3IEBAIHB1YmxpYzoK
ICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNl
dHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGlu
dmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAg
ICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArOTE3LDYgQEAg
cHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAg
ZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQg
ICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludElu
QmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDM4LDggKzk0Miw2IEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVy
R2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZs
YWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0
aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAt
MTA1Myw2ICs5NTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7
CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCBjbGVhckxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50
aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNvbnN0Owog
ICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGlu
YXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxh
Zz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0
PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0Nv
bnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMDk5LDY0ICsx
MDAzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJC
b3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAg
IGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJv
b2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Owog
ICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYg
aGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFu
c2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAg
IGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxp
c3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIo
KSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNS
ZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsK
LSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5l
clZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZp
bmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFs
OwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQot
ICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0
SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmlu
YWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNw
ZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3Jj
ZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25z
dCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxT
bmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Nj
cm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0
b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEu
Ci0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxi
YXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVT
Y3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93
c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlz
aWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzEwNDksNiBAQCBwcml2YXRlOgog
ICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29y
ZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29s
dXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3Np
dGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9p
ZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAg
dm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9u
KCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMiwxMSArMTA1Nyw2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9y
SW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0
VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0
KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBz
dHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxT
Y3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0xMjI5LDgg
KzEwNjksNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJ
bnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRp
b25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBi
b29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0Nyw3ICsxMDg1LDYgQEAgcHJpdmF0
ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkg
cmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3Au
CiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAg
ICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUg
dG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBA
IC0xMjU5LDE0ICsxMDk2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5k
YW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7
ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVw
bGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBt
X3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJs
ZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDog
MTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9v
bCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDog
MTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc2LDggKzExMTEsNiBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJ
biB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWlu
ZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNl
c3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1l
ZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsK
QEAgLTEyODcsMTcgKzExMjAsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1
bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8g
Vmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBi
b29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAg
Ym9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9v
bCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBt
X2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzgsMjUgKzExNjAs
MTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRT
aXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsK
LSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247
Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIElu
dFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3
ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJh
cjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9j
YWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2Nv
cGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9s
bGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxl
VHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3Ig
PG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFi
c29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgog
ICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1f
c3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjYsMTAgKzExNzQsNiBAQCBwcml2YXRlOgogICAg
IC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhl
aXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZs
ZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29y
bmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Nj
cm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVy
OwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1
c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4K
ICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApA
QCAtMTM3Nyw2ICsxMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5
ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lU
cmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NDksNiArMTI1NCwzIEBA
IHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2
b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYK
IAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEp
IHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uNDU5MTczZWZlY2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTksNiArNTksNyBAQAog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgpAQCAtNDE4LDExICs0
MTksMTMgQEAgc3RhdGljIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxv
d1RpbGVkQmFja2luZ0NvdmVyYWdlKGNvbnN0IFJlbmQKICAgICBUaWxlZEJhY2tpbmc6OlRpbGVD
b3ZlcmFnZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmlzaWJsZUFy
ZWE7CiAgICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0gZnJhbWVWaWV3
LmluTGl2ZVJlc2l6ZSgpOwogICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6
ZSkgewotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
KQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JI
b3Jpem9udGFsU2Nyb2xsaW5nOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXll
ci0+aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHRp
bGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGlu
ZzsKIAotICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkK
LSAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVy
dGljYWxTY3JvbGxpbmc7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8
PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxpbmc7CisgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKIH0KQEAgLTQzNSw3ICs0MzgsNyBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKQogICAg
ICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRUaWxlQ292ZXJhZ2UodGlsZUNvdmVyYWdlKTsKICAg
ICB9CiAKLSAgICBpZiAobV9vd25pbmdMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKKyAgICBpZiAobV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpICYmIG1fc2Nyb2xsZWRDb250ZW50c0xheWVy
KSB7CiAgICAgICAgIGlmIChhdXRvKiB0aWxlZEJhY2tpbmcgPSBtX3Njcm9sbGVkQ29udGVudHNM
YXllci0+dGlsZWRCYWNraW5nKCkpIHsKICAgICAgICAgICAgIGF1dG8gdGlsZUNvdmVyYWdlID0g
Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UobV9vd25pbmdMYXllcik7CiAgICAg
ICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwpAQCAt
Nzc1LDcgKzc3OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDdXN0b21BcHBl
YXJhbmNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHN0YXRpYyBib29sIGxheWVyT3JBbmNl
c3RvcklzVHJhbnNmb3JtZWRPclVzaW5nQ29tcG9zaXRlZFNjcm9sbGluZyhSZW5kZXJMYXllciYg
bGF5ZXIpCiB7CiAgICAgZm9yIChhdXRvKiBjdXJyID0gJmxheWVyOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGN1cnItPmhhc1RyYW5zZm9ybSgpIHx8IGN1cnIt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGN1cnItPmhh
c1RyYW5zZm9ybSgpIHx8IChjdXJyLT5zY3JvbGxhYmxlQXJlYSgpICYmIGN1cnItPnNjcm9sbGFi
bGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk3Miw3ICs5NzUsNyBAQCBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbihjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRpbmdBbmNlcwogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIAogICAg
IGJvb2wgbmVlZHNEZXNjZW5kYW50c0NsaXBwaW5nTGF5ZXIgPSBmYWxzZTsKLSAgICBib29sIHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVh
KCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKIAogICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZykgewogICAgICAgICAvLyBJZiBpdCdzIHNjcm9sbGFibGUsIGl0IGhh
cyB0byBiZSBhIGJveC4KQEAgLTEyMjcsMTAgKzEyMzAsMTMgQEAgTGF5b3V0UmVjdCBSZW5kZXJM
YXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdChjb25zdCBSZW5kZXJM
YXllcioKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBzbmFwcGVkR3JhcGhpY3NM
YXllcihjbGlwcGluZ0JveE9mZnNldCwgY2xpcHBpbmdCb3guc2l6ZSgpLCBkZXZpY2VTY2FsZUZh
Y3RvcigpKS5tX3NuYXBwZWRSZWN0OwogICAgIH0KIAotICAgIGlmIChjb21wb3NpdGVkQW5jZXN0
b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAgIGlmIChjb21wb3Np
dGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkgJiYgY29tcG9zaXRlZEFuY2VzdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAg
ICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJhY2tpbmct
PmNvbXBvc2l0ZWRCb3VuZHMoKTsKICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxDb250YWluZXJC
b3ggPSBzY3JvbGxDb250YWluZXJMYXllckJveChhbmNlc3RvclJlbmRlckJveCk7Ci0gICAgICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9m
ZnNldCgpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yID0gY29tcG9zaXRlZEFuY2VzdG9y
LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJs
ZUNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHBhcmVudEdyYXBo
aWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9uKCkg
LSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0gdG9M
YXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsKICAg
ICB9CiAKQEAgLTEzNjcsNyArMTM3MywxMSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICAg
ICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChzY3JvbGxD
b250YWluZXJCb3gubG9jYXRpb24oKSAtIHBhcmVudExheWVyQm91bmRzLmxvY2F0aW9uKCkpKTsK
ICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShM
YXlvdXRTaXplKHNjcm9sbENvbnRhaW5lckJveC53aWR0aCgpLCBzY3JvbGxDb250YWluZXJCb3gu
aGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKworICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAg
c2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAg
dXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9s
ZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJv
bVJlbmRlcmVyKCk7CkBAIC0xMzgxLDcgKzEzOTEsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikK
IAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5
ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7
CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgo
KSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAgICAgIEludFNpemUgc2Nyb2xs
U2l6ZTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgIHNjcm9sbFNp
emUgPSBJbnRTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAg
ICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAg
LTE0OTAsMTQgKzE1MDIsMTcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9u
T2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zm
c2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Ny
b2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlQXJlYSk7CisKKyAgICBp
ZiAoc2Nyb2xsYWJsZUFyZWEtPmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNl
cikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdl
IGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNl
IHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENv
bnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7
Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0UmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5v
dGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhlIGNvbnRlbnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBv
cmlnaW4gb24gdGhpcyBsYXllciwgcmF0aGVyIHRoYW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5
ZXIuCiAgICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwg
U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXll
ci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOworICAgICAg
ICBzY3JvbGxhYmxlQXJlYS0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKTsKICAgICB9CiAKICAgICBBU1NFUlQobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBv
c2l0aW9uKCkuaXNaZXJvKCkpOwpAQCAtMTkwOSw3ICsxOTI0LDkgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KExheWVyQW5jZXN0b3JD
bGlwcGluZ1MKICAgICAgICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0U2l6ZShzbmFwcGVkQ2xp
cHBpbmdMYXllclJlY3Quc2l6ZSgpKTsKIAogICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNP
dmVyZmxvd1Njcm9sbCkgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9
IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xh
eWVyLT5zY3JvbGxPZmZzZXQoKSA6IFNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyID8gZW50cnkuY2xpcERhdGEuY2xpcHBp
bmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAgICAgICAgc2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAg
ICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAg
ICAgICAgICAgICBsYXN0Q2xpcExheWVyUmVjdC5tb3ZlQnkoLXNjcm9sbE9mZnNldCk7CkBAIC0y
MDExLDEyICsyMDI4LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVy
Rm9yU2Nyb2xsYmFyKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxh
eWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewot
ICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4gcmVxdWlyZXNMYXllckZv
clNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0
aWNhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZv
clNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisg
ICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+
dmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0yMDI0
LDEyICsyMDQ1LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENv
cm5lckxheWVyKCkgY29uc3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5y
ZW5kZXJlcigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0
ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJl
c2l6ZXJSZWN0KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICBpZiAo
Y29ybmVyUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
dmVydGljYWxTY3JvbGxiYXIgPSBtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0g
ICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFy
IDogbV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgYXV0byB2ZXJ0aWNh
bFNjcm9sbGJhciA9IHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBh
dXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBz
Y3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICByZXR1cm4gcmVxdWly
ZXNMYXllckZvclNjcm9sbGJhcihzY3JvbGxiYXIpOwogfQogCkBAIC0yMDY1LDEwICsyMDkwLDEy
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJz
KGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAgICAgbGF5ZXJzQ2hhbmdlZCB8PSBjcmVhdGVP
ckRlc3Ryb3lMYXllcihtX2xheWVyRm9yU2Nyb2xsQ29ybmVyLCBuZWVkc1Njcm9sbENvcm5lckxh
eWVyLCB0cnVlLCAic2Nyb2xsIGNvcm5lciIpOwogCiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gbV9vd25pbmdMYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkg
ewotICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlk
Q2hhbmdlKG1fb3duaW5nTGF5ZXIsIEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgICAgICBpZiAo
dmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xh
eWVyLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJl
YSA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGhv
cml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9s
bGFibGVBcmVhLCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNh
bFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFy
ZWEsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBs
YXllcnNDaGFuZ2VkOwpAQCAtMjA3Niw3ICsyMTAzLDExIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Ny
b2xsCiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNM
YXllcnMoKQogewotICAgIGlmICghbV9vd25pbmdMYXllci5oYXNTY3JvbGxiYXJzKCkpCisgICAg
aWYgKCFtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFycygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGluZy4K
QEAgLTIwOTgsMTYgKzIxMjksMTUgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3RzIGFy
ZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9vd25p
bmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQorICAgIGF1dG8gcmVjdHMgPSBzY3Jv
bGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwogICAgIGlmIChhdXRvKiBsYXll
ciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Ny
b2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLCBwYWRkaW5nQm94
SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIuaG9y
aXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBp
ZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAg
cG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLCBw
YWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5n
TGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkp
OworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+dmVydGlj
YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTMwODYs
NyArMzExNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlz
cGxheUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiByLCBHcmFwaAogCiAgICAgaWYgKG1fc2Nyb2xs
ZWRDb250ZW50c0xheWVyICYmIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5kcmF3c0NvbnRlbnQo
KSkgewogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRSZWN0
Rm9yUGFpbnRpbmc7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmluZ0xh
eWVyLnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOworICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAg
c2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
bGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21S
ZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkgLSBtX3N1YnBpeGVsT2Zmc2V0
RnJvbVJlbmRlcmVyKTsKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChsYXllckRpcnR5UmVjdCwgc2hvdWxkQ2xpcCk7CiAgICAgfQogfQpAQCAt
MzEzMiw3ICszMTY1LDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVy
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICAgICAgaWYgKCZs
YXllciA9PSAmbV9vd25pbmdMYXllcikgewogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNv
bnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKLSAgICAgICAgICAg
IGlmIChsYXllci5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdp
b25Db250ZXh0KQorICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYgc2Nyb2xs
YWJsZUxheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdp
b25Db250ZXh0KQogICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250
ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZs
YWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGxheWVyLnBhaW50TGF5ZXJXaXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBh
aW50RmxhZ3MpOwpAQCAtMzQyMCwxNyArMzQ1NCwyNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFw
aAogICAgICAgICAgICAgcGFpbnREZWJ1Z092ZXJsYXlzKGdyYXBoaWNzTGF5ZXIsIGNvbnRleHQp
OwogCiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpv
bnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFT
U0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIHBhaW50U2Nyb2xsYmFyKHNjcm9sbGFi
bGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAg
IH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
IHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJh
cigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXIpOworCisgICAgICAgIHBhaW50U2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+dmVy
dGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBhdXRvIGNv
cm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENv
cm5lck9yUmVzaXplclJlY3QoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9v
d25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxh
eWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAgICBj
b250ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgTGF5b3V0
UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlvdXRSZWN0KGNsaXApOwogICAgICAgICB0cmFuc2Zv
cm1lZENsaXAubW92ZUJ5KGNvcm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3duaW5n
TGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZEludFJl
Y3QodHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFpbnRSZXNpemVy
KGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgICAgIHNjcm9sbGFi
bGVMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZElu
dFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFpbnRS
ZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgfQogI2lm
bmRlZiBOREVCVUcKICAgICByZW5kZXJlcigpLnBhZ2UoKS5zZXRJc1BhaW50aW5nKGZhbHNlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5j
cHAKaW5kZXggY2ZjNGFiMTUyODg2Li41MjM1NDU2MTM5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC01NSw2ICs1NSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMTM5Nyw3ICsxMzk4LDcg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHko
UmVuZGVyTGF5ZXImIGxheWVyLCBWZWN0b3IKICAgICAgICAgaWYgKGxheWVyQmFja2luZy0+aGFz
QW5jZXN0b3JDbGlwcGluZ0xheWVycygpICYmIGxheWVyQmFja2luZy0+YW5jZXN0b3JDbGlwcGlu
Z1N0YWNrKCktPmhhc0FueVNjcm9sbGluZ0xheWVycygpKQogICAgICAgICAgICAgdHJhdmVyc2Fs
U3RhdGUubGF5ZXJzQ2xpcHBlZEJ5U2Nyb2xsZXJzLT5hcHBlbmQoJmxheWVyKTsKIAotICAgICAg
ICBpZiAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBp
ZiAobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0
ZS5vdmVyZmxvd1Njcm9sbExheWVycy0+YXBwZW5kKCZsYXllcik7CiAKICAgICAgICAgbGF5ZXJC
YWNraW5nLT51cGRhdGVBZnRlckRlc2NlbmRhbnRzKCk7CkBAIC0yMDAxLDcgKzIwMDIsNyBAQCBz
dGF0aWMgQW5jZXN0b3JUcmF2ZXJzYWwgdHJhdmVyc2VBbmNlc3RvckxheWVycyhjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIEZ1bmN0aQogCiBzdGF0aWMgYm9vbCBjcmVhdGVzQ2xpcHBpbmdTY29w
ZShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCk7CiB9CiAKIHN0YXRpYyBWZWN0b3I8TGF5ZXJPdmVybGFwTWFwOjpMYXllckFuZEJv
dW5kcz4gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBj
b25zdCBSZW5kZXJMYXllciYgcm9vdExheWVyKQpAQCAtMjAwOSw3ICsyMDEwLDcgQEAgc3RhdGlj
IFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGlu
Z1Njb3Blcyhjb25zdCBSZW4KICAgICBWZWN0b3I8TGF5ZXJPdmVybGFwTWFwOjpMYXllckFuZEJv
dW5kcz4gY2xpcHBpbmdTY29wZXM7CiAgICAgY2xpcHBpbmdTY29wZXMuYXBwZW5kKHsgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllciY+KHJvb3RMYXllciksIHsgfSB9KTsKIAotICAgIGlmICghbGF5ZXIu
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxh
YmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKSkKICAgICAgICAgcmV0dXJuIGNsaXBwaW5nU2NvcGVzOwogCiAgICAgdHJh
dmVyc2VBbmNlc3RvckxheWVycyhsYXllciwgWyZdKGNvbnN0IFJlbmRlckxheWVyJiBhbmNlc3Rv
ckxheWVyLCBib29sIGluQ29udGFpbmluZ0Jsb2NrQ2hhaW4sIGJvb2wpIHsKQEAgLTIwNDEsNyAr
MjA0Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAoTGF5
ZXJPdmVybGFwTWFwJiBvdmVybGFwTWFwLCBjb25zdCBSCiAgICAgYXV0byBjbGlwcGluZ1Njb3Bl
cyA9IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGxheWVyLCByb290UmVuZGVyTGF5ZXIoKSk7CiAK
ICAgICBMYXlvdXRSZWN0IGNsaXBSZWN0OwotICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoKSkgeworICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxh
eWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7
CiAgICAgICAgIC8vIENvbXB1dGUgYSBjbGlwIHVwIHRvIHRoZSBjb21wb3NpdGVkIHNjcm9sbGlu
ZyBhbmNlc3RvciwgdGhlbiBjb252ZXJ0IGl0IHRvIGFic29sdXRlIGNvb3JkaW5hdGVzLgogICAg
ICAgICBhdXRvJiBzY3JvbGxpbmdTY29wZSA9IGNsaXBwaW5nU2NvcGVzLmxhc3QoKTsKICAgICAg
ICAgYXV0byYgc2NvcGVMYXllciA9IHNjcm9sbGluZ1Njb3BlLmxheWVyOwpAQCAtMjg4OSw3ICsy
ODkwLDcgQEAgVmVjdG9yPENvbXBvc2l0ZWRDbGlwRGF0YT4gUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlQW5jZXN0b3JDbGlwcGluZ1N0YWNrKGMKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIucmVuZGVyZXIoKS5oYXND
bGlwT3JPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIuaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgICAgICBpZiAoYW5jZXN0
b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllcikgewogICAgICAg
ICAgICAgICAgICAgICBwdXNoTm9uU2Nyb2xsYWJsZUNsaXAoKmN1cnJlbnRDbGlwcGVkTGF5ZXIs
IGFuY2VzdG9yTGF5ZXIpOwogICAgICAgICAgICAgICAgICAgICBoYXZlTm9uU2Nyb2xsYWJsZUNs
aXBwaW5nSW50ZXJtZWRpYXRlTGF5ZXIgPSBmYWxzZTsKQEAgLTI5MzMsNyArMjkzNCw3IEBAIFNj
cm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJsZUNvbnRh
aW5lck5vZGVJRChjb25zdCBSZW5kCiAKICAgICBTY3JvbGxpbmdOb2RlSUQgY29udGFpbmVyU2Ny
b2xsaW5nTm9kZUlEID0gMDsKICAgICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKCplbmNsb3NpbmdM
YXllciwgWyZdKGNvbnN0IFJlbmRlckxheWVyJiBhbmNlc3RvckxheWVyLCBib29sIGlzQ29udGFp
bmluZ0Jsb2NrQ2hhaW4sIGJvb2wgLyppc1BhaW50T3JkZXJBbmNlc3RvciovKSB7Ci0gICAgICAg
IGlmIChpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGlmIChpc0NvbnRhaW5pbmdCbG9ja0No
YWluICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVyLnNj
cm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAg
ICAgICAgICAgY29udGFpbmVyU2Nyb2xsaW5nTm9kZUlEID0gbGF5ZXJTY3JvbGxpbmdOb2RlSUQo
YW5jZXN0b3JMYXllcik7CiAgICAgICAgICAgICByZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0
b3A7CiAgICAgICAgIH0KQEAgLTMyNDMsNyArMzI0NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yUG9zaXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9i
amVjCiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9y
T3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBSZXF1aXJlc0NvbXBv
c2l0aW5nRGF0YSYgcXVlcnlEYXRhKSBjb25zdAogewotICAgIGlmICghbGF5ZXIuY2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpKQorICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSB8fCAh
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAocXVlcnlEYXRhLmxheW91dFVwVG9EYXRlID09
IExheW91dFVwVG9EYXRlOjpObykgewpAQCAtMzI1MSw3ICszMjUyLDcgQEAgYm9vbCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhj
b25zdCBSZW5kZXIKICAgICAgICAgcmV0dXJuIGxheWVyLmlzQ29tcG9zaXRlZCgpOwogICAgIH0K
IAotICAgIHJldHVybiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cisg
ICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKTsKIH0KIAogSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKGNvbnN0IFJlbmRlckxh
eWVyJiBsYXllciwgYm9vbCBoYXNDb21wb3NpdGVkRGVzY2VuZGFudHMsIGJvb2wgaGFzM0RUcmFu
c2Zvcm1lZERlc2NlbmRhbnRzLCBib29sIHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcpIGNvbnN0
CkBAIC0zMjczLDcgKzMyNzQsNyBAQCBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdSZWFzbwogICAgIH0KIAog
ICAgIC8vIElmIHRoaXMgbGF5ZXIgc2Nyb2xscyBpbmRlcGVuZGVudGx5IGZyb20gdGhlIGxheWVy
IHRoYXQgaXQgd291bGQgcGFpbnQgaW50bywgaXQgbmVlZHMgdG8gZ2V0IGNvbXBvc2l0ZWQuCi0g
ICAgaWYgKCFwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nICYmIGxheWVyLmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYgKCFwYWludHNJbnRvUHJvdmlkZWRCYWNraW5n
ICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAgYXV0byogcGFpbnREZXN0
aW5hdGlvbiA9IGxheWVyLnBhaW50T3JkZXJQYXJlbnQoKTsKICAgICAgICAgaWYgKHBhaW50RGVz
dGluYXRpb24gJiYgbGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0NvbXBvc2l0ZWRBbmNl
c3RvcihsYXllciwgKnBhaW50RGVzdGluYXRpb24pICE9IFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZp
b3I6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6
T3ZlcmZsb3dTY3JvbGxQb3NpdGlvbmluZzsKQEAgLTMzMTAsNyArMzMxMSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc0FzeW5jU2Nyb2xsYWJsZVN0aWNreUxheWVyKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllCiAKICAgICBhdXRvKiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyID0gbGF5
ZXIuZW5jbG9zaW5nT3ZlcmZsb3dDbGlwTGF5ZXIoRXhjbHVkZVNlbGYpOwogCi0gICAgaWYgKGVu
Y2xvc2luZ092ZXJmbG93TGF5ZXIgJiYgZW5jbG9zaW5nT3ZlcmZsb3dMYXllci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKGVuY2xvc2luZ092ZXJmbG93TGF5
ZXIgJiYgZW5jbG9zaW5nT3ZlcmZsb3dMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBlbmNsb3Np
bmdPdmVyZmxvd0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkpIHsKICAgICAgICAgaWYgKGVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dM
YXllcikKICAgICAgICAgICAgICplbmNsb3NpbmdBY2NlbGVyYXRlZE92ZXJmbG93TGF5ZXIgPSBl
bmNsb3NpbmdPdmVyZmxvd0xheWVyOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNDIsNyAr
MzM0Myw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc1ZpZXdwb3J0Q29uc3RyYWlu
ZWRGaXhlZE9yU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyCiAKICAgICAvLyBGSVhNRTogSGFuZGxl
IGZpeGVkIGluc2lkZSBvZiBhIHRyYW5zZm9ybSwgd2hpY2ggc2hvdWxkIG5vdCBiZWhhdmUgYXMg
Zml4ZWQuCiAgICAgZm9yIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLnBhcmVudCgpOyBhbmNlc3Rv
cjsgYW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGFuY2VzdG9y
LT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChhbmNlc3Rv
ci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIGlmIChhbmNlc3Rvci0+aXNTdGFja2luZ0NvbnRleHQoKSAmJiBhbmNlc3Rvci0+aXND
b21wb3NpdGVkKCkgJiYgYW5jZXN0b3ItPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMzOTMsOCArMzM5NCwxMCBAQCBzdGF0aWMg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsCiAgICAgICAgIGlmIChhbmNlc3RvckxheWVyID09ICZpbnRlcm1lZGlh
dGVMYXllcikKICAgICAgICAgICAgIHNhd0ludGVybWVkaWF0ZUxheWVyID0gdHJ1ZTsKIAotICAg
ICAgICBpZiAoYW5jZXN0b3JMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KQotICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPihhbmNlc3Rvckxh
eWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIGFuY2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYSA9IGFu
Y2VzdG9yTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3Rv
ckxheWVyU2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KGFuY2VzdG9y
TGF5ZXIpOworICAgICAgICB9CiAKICAgICAgICAgYW5jZXN0b3JMYXllciA9IGFuY2VzdG9yTGF5
ZXItPnBhcmVudCgpOwogICAgIH0KQEAgLTM0MDQsNyArMzQwNyw3IEBAIHN0YXRpYyBSZW5kZXJM
YXllciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllciwKIAogU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvciBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmxheWVyU2Nyb2xsQmVoYWhhdmlvclJlbGF0aXZlVG9Db21wb3NpdGVkQW5jZXN0b3IoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciYgY29tcG9zaXRlZEFuY2Vz
dG9yKQogewotICAgIGlmICghbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkp
CisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxhYmxlQXJl
YSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKICAgICAgICAgcmV0dXJuIFNj
cm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAKICAgICBib29sIGNvbXBvc2l0ZWRBbmNl
c3RvcklzSW5zaWRlU2Nyb2xsZXIgPSBmYWxzZTsKQEAgLTM0NDMsNyArMzQ0Niw3IEBAIHN0YXRp
YyB2b2lkIGNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rlcyhjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsCiAgICAgICAgIGlmIChpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYm
IGlzUGFpbnRPcmRlckFuY2VzdG9yKQogICAgICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVy
c2FsOjpTdG9wOwogCi0gICAgICAgIGlmIChzZWVuUGFpbnRPcmRlckFuY2VzdG9yICYmICFpc0Nv
bnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoc2VlblBhaW50T3JkZXJBbmNlc3RvciAmJiAhaXND
b250YWluaW5nQmxvY2tDaGFpbiAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYg
YW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpCiAgICAgICAgICAgICBhcHBlbmRPdmVyZmxvd0xheWVyTm9kZUlEKGFuY2VzdG9y
TGF5ZXIpOwogCiAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNhbDo6Q29udGludWU7CkBA
IC0zNDU4LDcgKzM0NjEsNyBAQCBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y29tcHV0ZUNvb3JkaW5hdGVkUG9zaXRpb25pbmdGbwogICAgIGlmIChsYXll
ci5yZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybiBTY3JvbGxQ
b3NpdGlvbmluZ0JlaGF2aW9yOjpOb25lOwogICAgIAotICAgIGlmICghbGF5ZXIuaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgp
IHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSkKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAK
ICAgICBhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCk7CkBAIC00NDQwLDcgKzQ0NDMsOCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKFJlbmRlckxheWVyJiBsYXllciwgUwogICAg
ICAgICBtX2NsaXBMYXllci0+c2V0U2Nyb2xsaW5nTm9kZUlEKG5vZGVJRCk7CiAjZW5kaWYKIAot
ICAgIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuYWRkKG5vZGVJRCwgbWFrZVdlYWtQdHIobGF5
ZXIpKTsKKyAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgbV9zY3JvbGxp
bmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCBtYWtlV2Vha1B0cigqbGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKSkpOwogCiAgICAgcmV0dXJuIG5vZGVJRDsKIH0KQEAgLTQ0NzUsOCArNDQ3OSw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVy
V2l0aFJvbGUoUmVuZGVyTGF5ZXImIGxhCiAgICAgYXV0byB1bnJlZ2lzdGVyTm9kZSA9IFsmXShT
Y3JvbGxpbmdOb2RlSUQgbm9kZUlEKSB7CiAgICAgICAgIGF1dG8gY2hpbGROb2RlcyA9IHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmNoaWxkcmVuT2ZOb2RlKG5vZGVJRCk7CiAgICAgICAgIGZvciAoYXV0
byBjaGlsZE5vZGVJRCA6IGNoaWxkTm9kZXMpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHdlYWtM
YXllciA9IG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KGNoaWxkTm9kZUlEKSkKLSAgICAg
ICAgICAgICAgICB3ZWFrTGF5ZXItPnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVwZGF0ZSgpOworICAg
ICAgICAgICAgaWYgKGF1dG8gd2Vha1Njcm9sbGFibGVBcmVhID0gbV9zY3JvbGxpbmdOb2RlVG9M
YXllck1hcC5nZXQoY2hpbGROb2RlSUQpKQorICAgICAgICAgICAgICAgIHdlYWtTY3JvbGxhYmxl
QXJlYS0+bGF5ZXIoKS5zZXROZWVkc1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKICAgICAgICAgfQog
CiAgICAgICAgIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAucmVtb3ZlKG5vZGVJRCk7CkBAIC00
NjU3LDggKzQ2NjEsMTEgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQKIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJl
bmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0
CiB7CiAgICAgLy8gRklYTUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1u
dWxsLCBzbyBzaG91bGQgYmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlmICghYW5jZXN0b3JMYXll
cikKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnZpc2li
bGVTaXplKCkpKTsKKyAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAgICAgaWYgKCFsYXll
ci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAg
ICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnNjcm9sbGFibGVB
cmVhKCktPnZpc2libGVTaXplKCkpKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFi
bGVSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDY3
OCwxMSArNDY4NSwxNCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4
ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigp
LAogICAgICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBm
cmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7Cisg
ICAgICAgIGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKKwogICAgICAgICBhdXRvJiBiYWNraW5nID0g
KmxheWVyLmJhY2tpbmcoKTsKICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3Iuc2V0Tm9kZUxh
eWVycyhub2RlSUQsIHsgYmFja2luZy5ncmFwaGljc0xheWVyKCksCiAgICAgICAgICAgICBiYWNr
aW5nLnNjcm9sbENvbnRhaW5lckxheWVyKCksIGJhY2tpbmcuc2Nyb2xsZWRDb250ZW50c0xheWVy
KCksCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAotICAgICAgICAgICAg
bGF5ZXIubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGxheWVyLmxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSB9KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSwgc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSB9KTsKICAgICB9CiB9CiAKQEAgLTQ3MjAsOCArNDczMCwxMCBAQCBTY3JvbGxpbmdO
b2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZShSZW5kZQogICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VG
bGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05v
ZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5n
ZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRl
LnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3Jv
bGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAg
ICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkg
JiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkgeworICAgICAgICAgICAgQVNTRVJUKGxheWVyLnNj
cm9sbGFibGVBcmVhKCkpOworICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNj
cm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgKmxheWVyLnNjcm9s
bGFibGVBcmVhKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApp
bmRleCBjMTUxZTIzZDBlZjYuLjJjZDcxY2I4ZjNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaApAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNs
aXBwaW5nU3RhY2suaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtNjM1LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAg
Q29sb3IgbV92aWV3QmFja2dyb3VuZENvbG9yOwogICAgIENvbG9yIG1fcm9vdEV4dGVuZGVkQmFj
a2dyb3VuZENvbG9yOwogCi0gICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVu
ZGVyTGF5ZXI+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwOworICAgIEhhc2hNYXA8U2Nyb2xs
aW5nTm9kZUlELCBXZWFrUHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+PiBtX3Njcm9sbGlu
Z05vZGVUb0xheWVyTWFwOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc3RkOjp1bmlx
dWVfcHRyPExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I+IG1fbGVnYWN5U2Ny
b2xsaW5nTGF5ZXJDb29yZGluYXRvcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTI5NzgzNzIxZjI2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
CkBAIC0wLDAgKzEsMTgyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUg
TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93
d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29w
eWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNp
b25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0
aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9u
IG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisg
KiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0
byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGlj
YXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5k
IHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJl
cXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYg
eW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1
c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0
aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRl
ckxheWVyJiBsYXllcikKKyAgICA6IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAg
LCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKGZhbHNlKQorICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmFs
c2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2UpCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICAs
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQorI2Vu
ZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKKyNlbmRp
ZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCisg
ICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKKyAgICAsIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCisgICAgLCBtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvblNldChmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCit7Cit9CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Ny
b2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
KQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFy
ZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5zZXRT
YXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICBkZXN0cm95
U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVy
dGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
cmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbigpCit7CisgICAgYXV0byog
ZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhl
IHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVk
LgorICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRp
b24oKTsKKyAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCisgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIGVs
ZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKK30KKworI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAg
ICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcg
YmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3Vt
ZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5k
ZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50
KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0g
ZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29s
KiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCku
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBpc0luc2lk
ZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9
IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJ
RCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNj
cm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1
dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJhbmRJblBy
b2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKTsKK30KKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3
ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0Fz
eW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5jb21wb3NpdG9yKCku
dXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xheWVyKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIGlmICghcG9zaXRpb24pIHsKKyAg
ICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAg
ICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IGZhbHNlOworICAgIH0KKworICAg
IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb24udmFsdWUoKTsKKyAgICBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCit7
CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBT
Y3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRp
b24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcs
IEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Cit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCksIHkp
OworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Cit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFt
cFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBt
YXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7
CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAi
IDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
bGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3Jv
bGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3Np
dGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Nyb2xsT2Zm
c2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7Cisg
ICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9s
bFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIGlm
ICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChj
bGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcp
OworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJ
bkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5
cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Ny
b2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
c2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBp
bmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQp
IDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3Jv
bGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFu
aW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0g
dGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09m
ZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRTY3Jv
bGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIg
ZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3Vy
cmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Ny
b2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1M
TWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwg
YmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2Nr
cykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAg
ICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBC
ZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGlu
dCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRo
KCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9
IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNl
dCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0
V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkK
KyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgp
CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAg
ICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0
aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNl
bmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYm
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdl
IGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBv
ZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHBy
b2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVu
ZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkg
eworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY3JvbGxQb3NpdGlvbiA9
IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZpZXcoKTsKKworICAgIC8vIFVwZGF0
ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZp
eGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8vIFdlIGRv
bid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRl
ZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICghdmlldy5m
cmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgeworICAg
ICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRh
dGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFtZVZpZXco
KS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlmICghbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29t
cG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVw
ZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBv
c2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywg
YW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhl
aXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCisgICAg
ICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYgKHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29t
cG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHBv
c2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50
ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAorICAgICAgICAgICAgICAgIC8v
IHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgc3RhY2tpbmcgY29udGV4dC4K
KyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBtX2xheWVyLnN0YWNraW5n
Q29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFu
dHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFu
Z2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIuZG9j
dW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOworICAgICAgICBE
ZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyLmZyYW1lKCkpOworICAgIH0KKwor
ICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5lckZvclJlcGFpbnQo
KTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciBz
Y3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgp
OworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyLmhhc1JlcGFpbnRM
YXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVj
dCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWlu
ZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1
YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29s
dXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRs
ZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYg
KHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0Nv
bXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXREZXNjZW5kYW50
c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgIHJlcXVp
cmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRT
Y3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9m
IG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVuZGVyZXIu
cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsK
KworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVu
dHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCisgICAg
ICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVt
ZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5mcmFtZVZp
ZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3KCkudmll
d3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRp
ZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAobV9sYXllci5j
b21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAgICAgLy8g
T3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91
ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNv
IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYgKFJlbmRl
ckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKS0+
ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51
cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRl
ZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3
aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCisgICAgICAgICAgICAg
ICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29tcG9zaXRv
cigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3Jv
bGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGgoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7Cit9CisKK2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xh
eWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRl
U2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBl
ZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJu
IG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1
dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJx
dWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRl
T3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlci5zdHls
ZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJl
ci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJx
dWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9sYXllcik7CisgICAgICAgIG1fbWFy
cXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCisg
ICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94Pihy
ZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCBpc1Zpc2libGUgPSByZW5k
ZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlm
IChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIW1fbGF5ZXIu
aXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUg
JiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxv
d1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRP
dmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNj
cm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xheWVyLmlzQ29t
cG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2xheWVyLmJhY2tp
bmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3Jv
bGxpbmcpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVD
b250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBz
Y3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAorewor
ICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9s
cygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAg
c2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8gdmlzaWJs
ZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9u
KCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndp
ZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNl
LmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVy
LnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisg
ICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlz
IHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFi
bGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zm
c2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkp
OworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0Lnko
KSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0
cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQo
KSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQor
ICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6
ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Ny
b2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkp
OworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7Cisj
ZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxDb3Ju
ZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Ny
b2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xs
Q29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyZXIoKS5p
c0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9CisK
K0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5t
b3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5k
ZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVu
ZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9s
bGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2lu
dCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7Cit9CisK
K0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmll
dygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwgcGFyZW50
UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAg
ICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5k
ZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0lu
dChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3Jv
bGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIElu
dFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNl
dFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRo
KCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAg
ICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCks
IHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVD
aGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFi
bGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxh
YmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlz
PFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAg
ICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAor
eworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMo
KTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5j
aHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0
aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2Vl
cCBzZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxh
eWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAg
YXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8g
U2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5n
Qm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAg
ICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFs
U2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9v
bCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFy
KG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0
ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wg
aGF2ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
KyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVS
ZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Ny
b2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJT
aXplID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5k
ZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikg
eworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7
CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAg
ICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUu
d2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250
cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0
Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIp
IHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVj
dDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAg
ICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkp
OworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQor
CisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAg
ICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0
byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5Y
TWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRD
b3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0s
IGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJm
bG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUs
IGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikK
KyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisK
KyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVz
dWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJU
aGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkp
CisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRp
b24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJl
dHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJm
bG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0g
bV92QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
YXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVu
ZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5z
ZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlm
ICghYm94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92
ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdl
dCgpKQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRS
ZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVj
dCk7CisgICAgYm94LT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChy
ZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikK
KyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYg
KG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwor
fQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xs
YmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5
bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAorewor
ICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwor
fQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFk
b3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAg
aWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAg
ICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFy
PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0g
KnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVu
ZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdp
ZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmll
bnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3Jv
bGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7
CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAg
ICAgICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAg
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVy
LnBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJl
bGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVz
dHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBS
ZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNj
cm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAg
ICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisK
KyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxs
cHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICho
YXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkg
ZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3Rp
Y2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxl
QXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYK
KyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxi
YXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6
OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNl
bmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4g
Y2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVw
ZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAg
ICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBt
X3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlm
IChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAg
ICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9s
bEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNl
dHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8g
U2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAg
ICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkp
OworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNh
bFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxh
YmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25l
KTsKKyNlbmRpZgorICAgIH0KKworICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBi
YXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVl
ZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hC
YXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sK
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCk7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1
cm4gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQorewor
ICAgIGZvciAoYXV0byogbmV4dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIg
PSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dz
T3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8
fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8
fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRT
aXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFt
X2xheWVyLmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIu
cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVy
dGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0
RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9o
QmFyKSB7CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9t
Um9vdCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1f
cmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7
Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3Ao
KSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QueSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
KyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9k
ZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlv
dXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94
KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZh
bHNlOworCisgICAgbV9zY3JvbGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0g
b3ZlcmZsb3dMZWZ0KCkpOworICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxv
d0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7Cisg
ICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAg
ICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Cisg
ICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAt
IGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xs
YWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
Cit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwg
aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94
KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3Zl
cmZsb3dZKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpv
bnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5k
VG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMg
Ym9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Ny
b2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMg
PT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVy
Zmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3Rz
TGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29s
IHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBh
eGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUu
b3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xs
QWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJm
bG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7Cisg
ICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1z
ZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhh
c0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAg
IGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsK
KworICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3Qg
bmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVu
ZGVyZXIuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0
RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisg
ICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8v
IFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4g
aWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9u
dGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRv
QmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxP
dmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRh
bFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAg
ICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQor
ICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOworCisgICAgICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKwor
ICAgICAgICByZW5kZXJlci5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxl
KCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZs
b3dSZWxheW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2Vk
KGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hh
bmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5k
ZXJlci5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVC
b3goKSAmJiByZW5kZXJlci5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxl
eGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5y
ZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ug
c3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdp
ZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0
ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAg
ICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRU
b0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xs
YmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisg
ICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlz
IGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBp
ZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkg
PSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVw
ZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2Fz
ZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsK
KyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8g
TGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4g
SW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNl
dHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUg
ZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlz
IGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24g
cG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8v
IG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlm
IChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Ny
b2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwor
I2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAg
ICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwor
CisgICAgaWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXRO
ZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVk
c0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5
b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRl
cnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMu
cmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBu
byBvdmVyZmxvdy4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBs
YXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5
dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0
IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisg
ICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25k
IHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBh
aW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5
IHNvIHRoYXQgdGhlCisgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVy
IHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBu
b3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWlu
dCBpbnRvIGxheWVycy4KKyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRh
bWFnZVJlY3Q7CisgICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwor
ICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdS
b290ID0gbV9sYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICgh
cGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygp
LmxheWVyKCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5n
Um9vdC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBj
dXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNo
ZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdp
ZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMg
ZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0
aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9j
dW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgor
ICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNl
dCkpOworCisgICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4g
dGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRh
bWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlm
IChsYXllckZvclNjcm9sbENvcm5lcigpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBm
aWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0
aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhl
IGJveC4KKyAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0
IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250
ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAg
YWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3Rz
KGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlk
YXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0
LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNl
IHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNP
dmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWlu
dFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6
ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKKyAgICBpZiAo
cmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtS
ZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJl
czsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgp
OworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxv
UmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIiku
bGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50
cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgo
KSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBj
b3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRT
aXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAg
ICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkK
KyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAt
IGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyLmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNv
cm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5
bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVz
aXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7CisgICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJl
Y3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250
cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4
dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVz
aXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQu
CisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Vz
IG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZC
YXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Cisg
ICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAg
IGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAx
X2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBj
b250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0
KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFy
ICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIElu
dFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRo
ZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJh
ci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygp
KSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2Fs
UG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnBh
Z2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQorCitJbnRQb2ludCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVu
dCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtBcHBlYXJh
bmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnVzZURhcmtBcHBl
YXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6
IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxl
bWVudD4obV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFtX2xheWVyLmVuY2xvc2luZ0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCog
Ym94ID0gbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0
ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwg
Ym94LT5wYWRkaW5nQm94UmVjdCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNP
dmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7
CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAg
aWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbygmbV9sYXll
ciwgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6
ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKKyAgICBtX2xheWVyLnBhaW50TGF5ZXIoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3Zlcmxh
eVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBm
YWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0UmVzaXpl
ckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJh
Z21lbnQpIGNvbnN0Cit7CisgICAgaWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcikuYm9yZGVyQm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0g
WyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVy
UmVjdCkgeworICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9y
ZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIo
KTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0
LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVu
dHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVj
dEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5y
ZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMo
aGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVz
dExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50
ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCkt
PmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5
ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92
ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGlz
dCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExp
c3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBi
b3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5z
dHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBp
biB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0
aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KKyAgICBib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUo
KSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5z
dHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Ny
b2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKHZlcnRpY2FsU2Nyb2xsYmFyKCkg
JiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxT
Y3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGlj
YWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpv
bnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNh
bFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwg
c2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KKyAgICAv
LyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0
aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNj
cm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV9oQmFy
LT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Ny
b2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX3ZCYXIt
PnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQor
ICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdykKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsK
KworICAgIGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIudmlzaWJsZVRvSGl0VGVz
dGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3
LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBv
d25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGlu
ZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVU
b0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOworCisgICAgQVNTRVJU
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFi
bGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYgKCFt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQg
PSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3JlZ2lz
dGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJh
bWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxhYmxl
ICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRl
ZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8gYWNj
ZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KKyAg
ICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwor
ICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92
ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5k
ZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVk
b0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxw
dHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAg
ICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhN
RTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBt
X3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcik7CisgICAgICAgIG1fc2Nyb2xsQ29y
bmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29y
bmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxs
cHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxlKCkKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5k
ZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBhdXRvIHJlc2l6ZXIg
PSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hl
ZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHls
ZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNp
emVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgewor
ICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0Pihy
ZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1F
OiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1f
cmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcik7CisgICAgICAgIG1fcmVzaXplci0+aW5pdGlh
bGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RG
TW92ZSgqcmVzaXplcikpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNs
ZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRy
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhclN0eWxlQ2hh
bmdlZCgpCit7CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQo
KTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2
ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhl
IHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVu
ZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgp
KTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRy
dWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXI7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0
ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICByZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJl
ci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisK
Ky8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5pc0NvbXBvc2l0ZWQoKSAmJiBtX2xheWVyLmJh
Y2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRq
dXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCit7CisgICAgLy8gVGhpcyBpbXBs
ZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCisgICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9y
Zy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYu
CisgICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOworCisgICAgaW50IGFkanVzdGVkRGVs
dGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKKyAgICBpZiAoYWRqdXN0ZWREZWx0
YSA+IDEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVk
RGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Cisg
ICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQorICAgICAgICBhZGp1c3RlZERlbHRhID0g
c3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+
KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKKworICAgIHJldHVybiBhZGp1c3RlZERlbHRhOworfQor
CitzdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXpl
JiBkZWx0YSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRh
LndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IElu
dFBvaW50JiBzb3VyY2VQb2ludCkKK3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uID0gbV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3du
TW91c2VQb3NpdGlvbigpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBr
bm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2Ug
aXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3Rh
dGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91
c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAg
ICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAg
ICBlbHNlCisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb247CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNv
dXJjZVBvaW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0
aGUgaWNvbgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhl
aWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEu
c2V0SGVpZ2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERl
bHRhKGRlbHRhKSk7Cit9CisKK09wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yLCBj
b25zdCBMYXlvdXRSZWN0JiByZXZlYWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9z
ZVJlY3QpCit7CisgICAgQVNTRVJUKG1fbGF5ZXIuYWxsb3dzQ3VycmVudFNjcm9sbCgpKTsKKwor
ICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsKKworICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCog
ZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IpCisgICAgeworICAgICAgICBib29sIHVz
ZUFuaW1hdGVkU2Nyb2xsaW5nID0gIW1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnQgJiYg
dXNlU21vb3RoU2Nyb2xsaW5nKGJlaGF2aW9yLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHVz
ZUFuaW1hdGVkU2Nyb2xsaW5nID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xs
OjpObzsKKyAgICB9OworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBj
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVj
dChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQg
IT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Ny
b2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIFNjcm9sbE9mZnNl
dCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byBhbmltYXRl
ZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBiZWhhdmlvcik7Cisg
ICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVk
U2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCwgYW5pbWF0ZWQpOworICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVu
Y2UgPSBjbGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OworCisgICAgICAgIGF1
dG8gbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQgPSBsb2NhbEV4cG9zZVJlY3Q7CisgICAgICAgIGxv
Y2FsRXhwb3NlUmVjdFNjcm9sbGVkLm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOworICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFk
KEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3Vu
ZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50
U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChk
ZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxz
ZTsKKyAgICBpZiAocmVuZGVyZXIucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVD
bGFtcCA9ICFyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsK
KworICAgIGlmIChyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxP
ZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQp
OworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9
IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdl
IGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIElu
dFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zm
c2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJl
bmRlcmVyLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3Jv
bGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZW5kZXJlci5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVy
ZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAg
ICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEg
ZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJl
YSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIudmlldygpLmZyYW1lVmll
dygpOworCisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3
YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIz
NworICAgIH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQoreworICAgIEFTU0VSVCgmbV9sYXllciA9
PSBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOworCisgICAgTE9HKFNjcm9sbGlu
ZywgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJE
b2N1bWVudFNjcm9sbCIpOworCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNl
VHJhbnNmb3Jtcyk7CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KCZnZW9tZXRyeU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9t
ZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAoJm1fbGF5ZXIgIT0g
bV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5w
dXNoTWFwcGluZ3NUb0FuY2VzdG9yKG1fbGF5ZXIucGFyZW50KCksIG51bGxwdHIpOworCisgICAg
Ly8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlz
IGxheWVyIGluIG9yZGVyIHRvCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0
Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBm
bGFncz8KKyAgICBtX2xheWVyLnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21l
dHJ5TWFwLCBSZW5kZXJMYXllcjo6SXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRv
cigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxB
bmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIG1fbGF5
ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsK
K30KKworU3RyaW5nIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi4zNjkzZmQwZGJiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCkBAIC0wLDAgKzEsMjg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBi
ZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9N
UEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVy
c2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAor
ICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBv
ciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYg
eW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9u
bHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUg
TVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lv
biBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdp
dGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1Q
TCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0
ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJz
aW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQ
TC4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZW5kZXJNYXJxdWVlOworCitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDog
cHVibGljIFNjcm9sbGFibGVBcmVhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVy
Jik7CisgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCisgICAgUmVu
ZGVyTGF5ZXImIGxheWVyKCkgeyByZXR1cm4gbV9sYXllcjsgfQorCisgICAgUmVuZGVyTWFycXVl
ZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQg
dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVl
KCk7CisKKyAgICB2b2lkIHNjcm9sbGJhclN0eWxlQ2hhbmdlZCgpOworCisgICAgdm9pZCBzdG9y
ZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2
b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisK
KyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgp
OworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgp
IGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
KworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRo
ZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXpl
JiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0Jiwg
U2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxU
b09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9s
bCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQg
eSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Ny
b2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAg
dm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkg
eyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisg
ICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1
cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisg
ICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAg
Ym9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNp
bGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
PSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0
aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdo
ZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hl
biB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQg
dG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9
CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9
IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWlu
dFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsK
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
ID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3Zl
cnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKwor
ICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwor
CisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9
CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAg
ICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAg
ICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisgICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZp
bmFsOworI2VuZGlmCisKKyAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7CisgICAgdm9p
ZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFs
OworI2VuZGlmCisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFs
OworCisgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3QgZmluYWw7CisKKyAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIm
LCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAg
SW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQ
b2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
JiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xs
aW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVj
dEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNv
bnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91
bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNp
ZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFk
Rm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsK
KyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25z
dCBmaW5hbDsKKworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisK
KyAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBjb250
ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2Vy
LCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAg
IGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KKyAgICB2b2lkIHNldEhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3Rvcihib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcikg
eyBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGhhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcjsgfQorCisgICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAg
IHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxi
YXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJz
OyB9CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQoKTsKKworICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUm
KTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCBjbGVhclNj
cm9sbENvcm5lcigpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgdm9pZCBj
bGVhclJlc2l6ZXIoKTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAg
IExheW91dFVuaXQgb3ZlcmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93
Qm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpP
dmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNv
bnN0OworCisgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7CisKKyAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAg
Ly8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0
U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25z
dCBTY3JvbGxQb3NpdGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFy
JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3Zl
cmZsb3cpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3Zl
cmZsb3dTY3JvbGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpOworCisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRp
b24oU2Nyb2xsQmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCk7CisKK3ByaXZhdGU6CisgICAgLy8gTWluaW11bSBw
YWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1fc2Nyb2xsSGVpZ2h0KQorICAgIGJv
b2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJmbG93UmVs
YXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOworICAg
IGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJbiB0aGUgbGF5
ZXItb3JkZXIgdHJlZS4KKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
IDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworICAgIGJvb2wg
bV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOworCisgICAgLy8gVGhlIHdpZHRoL2hl
aWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3JvbGxXaWR0aDsKKyAgICBp
bnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKKyAgICBTY3Jv
bGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNjcm9sbFBvc2l0aW9uIG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3
ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJh
cjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQb2ludCBtX2NhY2hl
ZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIg
Y3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJlbmRlclNj
cm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4g
bV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKaW5kZXgg
N2U5ZjM4MzJkMzZlLi41MjIwMjU5YmVlYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3Rh
dGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94Ojpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVM
YXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODk3LDEwIEBAIGJvb2wgUmVuZGVy
TGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wgUmVuZGVyTGlz
dEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7Ci0gICAgcmV0
dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6
IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAogSW50
UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4IDc2ZTIz
ZTRkMDk5Ni4uOWE0ODFhOTdhZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1
ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fdGlt
ZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAgIGxheWVyLT5zZXRD
b25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgQVNTRVJUKGxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2V0Q29u
c3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBSZW5kZXJNYXJxdWVl
Ojp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3Myw5ICsxNzQsOSBAQCB2b2lkIFJl
bmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9zdXNwZW5kZWQgJiYgIW1fc3RvcHBl
ZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5z
Y3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgICAgICBtX2xheWVy
LT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwg
MCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9s
bE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFt
cGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCkt
PnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBtX3N0b3BwZWQgPSBmYWxzZTsKQEAg
LTI0NCwxMiArMjQ1LDE1IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAg
aWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5zY3JvbGxh
YmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgaWYgKG1fcmVz
ZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFs
KCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobV9zdGFydCk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG1fc3RhcnQpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIsNyArMjc2LDcgQEAgdm9pZCBSZW5k
ZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9vbCBwb3NpdGl2ZSA9IHJhbmdlID4g
MDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jpem9udGFsKCkgPyByb3VuZFRvSW50
KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSA6IHJvdW5kVG9JbnQobV9sYXll
ci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGludCBpbmNyZW1lbnQg
PSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1
ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAgICBpbnQgY3VycmVudFBvcyA9IChp
c0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IG1fbGF5ZXItPnNj
cm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRh
bCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkgOiBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5ld1BvcyA9ICBjdXJyZW50UG9zICsg
KGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpOwogICAgICAgICBpZiAocG9z
aXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1pbihuZXdQb3MsIGVuZFBvaW50KTsK
QEAgLTI4OSw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQoKQogICAg
IH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgIG1fbGF5ZXItPnNjcm9s
bFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9m
ZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0
KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bv
cyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0Li4xMTA1MTE3MjNhZWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDAxLDcgKzEwMDEs
NyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6Y29tcHV0ZUZsb2F0VmlzaWJs
ZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGljIHZvaWQgb3V0cHV0UmVuZGVyVHJl
ZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0g
ICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRl
L0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlw
LCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIChDKW9tcG9zaXRlZCwgKCsp
RGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJ
KW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGlj
KEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0
ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxlQXJlYSwgKEMpb21wb3NpdGVkLCAo
KylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsK
IH0KIApAQCAtMTExNSwxMCArMTExNSwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6b3V0cHV0UmVu
ZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgpCiAgICAg
ZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAgaWYgKGhhc0xheWVyKCkpCisgICAg
aWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8ICJMIjsKLSAgICBlbHNlCi0gICAg
ICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJMYXllck1vZGVs
T2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHN0
cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiLSI7Cisg
ICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwogCiAgICAgaWYgKGlzQ29tcG9zaXRl
ZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uMDExMzg0MWU2YzI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgY2xhc3MgUmVu
ZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsK
KyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIHB1YmxpYzoKICAg
ICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIg
bm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQg
YXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggYTA3
NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM5NywxOSArMzk4LDIw
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwg
UmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBv
aW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5l
clRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBpbm5lclRl
eHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigpOwot
ICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IHJlbmRlcmVyLT5sYXll
cigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51
bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVu
dEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJl
bmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwobG9naWNh
bFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCks
IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIo
KS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllciA/IGxheWVy
LT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChib3hMYXll
clNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNh
bFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5k
ZXggN2MwMWYwMjBmZTgyLi5mNTg4ZTg2OWUwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNjAwLDE0ICs2MDEsMTYgQEAg
c3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAgICBpZiAobGF5ZXIucmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCku
eCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0
KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQotICAgICAgICAg
ICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwotICAgICAg
ICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAgICAgICBpZiAobGF5
ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVp
Z2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAgICAgICB0
cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKTsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSkKKyAg
ICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAi
IDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWln
aHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAgICAgICAg
ICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0
KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9sbGJhclRoZW1l
JiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwogICAgICAgICBpZiAo
IXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGljYWxTY3JvbGxi
YXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBi
MTAzM2RhMDc5MzAuLjViYjRlNGZkNDBmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlcldpZGdldC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIVE1MRnJhbWVPd25l
ckVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0zMzIsOCArMzMzLDEwIEBAIHZvaWQgUmVuZGVyV2lk
Z2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRS
ZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9
CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAg
bGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlmIChsYXllcigp
ICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRS
ZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50
T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6
OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCmluZGV4IGUzZGZlNzk1MTZjMy4uZGI0MTQzNjA1OGI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTksNiArMTU5LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTgzOSw3
ICsxODQwLDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRp
bmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2Fu
QmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEg
PSBib3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NjAsOCArMjg2MiwxMCBAQCBFeGNlcHRp
b25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5v
ZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJv
eCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94
PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9
IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZW5kZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJv
eC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggODEwZTgxOGIyM2QyLi44OThjYjUzYWVmYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0xMS0yMiAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJlcGFyYXRpb24gZm9yIHRoZSBSZW5kZXJM
YXllciBhcmNoaXRlY3R1cmUgY2hhbmdlOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFs
bCBzY3JvbGxpbmcvb3ZlcmZsb3cgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVy
LCB0byBzdHJlYW1saW5lIGl0cyBpbnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNh
YmxlIGZvciBsYXllciB0eXBlcyB0aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0
IHNjcm9sbGluZy9vdmVyZmxvdy4KKworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBF
V1MgdGVzdGluZy4KKworICAgICAgICAqIERPTS9ET01IVE1MLm1tOgorICAgICAgICAoLVtET01I
VE1MRWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRqdXN0Rm9ySU9TQ2Fy
ZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJh
bWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Ny
b2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTExLTE5ICBIb2EgRGlu
aCAgPGR2aEBhcHBsZS5jb20+CiAKICAgICAgICAgQ29kZSBmb3JtYXR0aW5nOiBjaGFuZ2UgaW5z
dGFuY2VzIG9mICJAc3ludGhlc2l6ZSBhPWIiIHRvICJAc3ludGhlc2l6ZSBhID0gYiIuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4uZGE0M2Uz
ZTY0ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtMTExLDEx
ICsxMTEsMTcgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0
OihpbnQpeSBhZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlciku
bGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkK
LSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
LSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBX
ZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zm
c2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICBpZiAo
YWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQpYWJzb2x1dGVQb3Np
dGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2MDgzOTJmLi44ODAx
MGMwYzZjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQpAQCAtNzM3LDEwICs3MzcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6
KERPTVJhbmdlICopcmFuZ2UKICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRl
Rml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzIH0pOwogI2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5v
ZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmIChsYXllcikgewot
ICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXItPnNj
cm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3Np
bmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdl
YkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAg
ICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoZmFsc2UpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
c2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgfQpAQCAtNzU3LDEw
ICs3NTcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICop
cmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAKICAgICBpZiAoc3RhcnROb2RlICYmIHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAg
ICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwor
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnRO
b2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0lu
dFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29y
ZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKIAogICAgICAgICAgICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgICAg
ICAgICAgaWYgKGNvcmVGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDYy
MzZhMTFiZjI5Ni4uZGU4ZTFkMThjYWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMjAtMTEtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9m
IFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFByZXBhcmF0aW9uIGZvciB0aGUgUmVuZGVyTGF5ZXIgYXJjaGl0ZWN0dXJlIGNoYW5nZToK
KyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhhbmRs
aW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJm
YWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBk
byBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAg
ICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBX
ZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIwLTExLTE5ICBG
dWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtUZXh0
dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJlTWFwcGVyIGZyb20gVGV4dHVyZU1hcHBlckxheWVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4uMmZkY2Y5
ZjljYjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYgKzE0Nyw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIwNDksMTAg
QEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAg
ICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQg
aGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxC
eShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZy
YW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJs
ZUFyZWEoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3JvbGxl
ZEFyZWEpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNr
UHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQ
dHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJl
SGFuZGxlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414793</attachid>
            <date>2020-11-22 17:43:15 -0800</date>
            <delta_ts>2020-11-26 01:55:51 -0800</delta_ts>
            <desc>Patch, v5 (squashed for testing)</desc>
            <filename>patch-v5-squashed.diff</filename>
            <type>text/plain</type>
            <size>312147</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzNGEzMzliZDQ2NWIuLjA2NTAyZDI2MGI4YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJhdGlv
biBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAgIFRoZSBn
b2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBv
dXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAg
ICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAg
ICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRj
aCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zh
c3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0xMS0yMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBHTGliIGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZv
aWQtZmxvYXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Js
b2NrL2Zsb2F0L21hcnF1ZWUtc2hyaW5rLXRvLWF2b2lkLWZsb2F0cy1leHBlY3RlZC50eHQKaW5k
ZXggZThhZDNiN2NjMzJmLi5lODM1YWZlMzY5ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9mYXN0L2Jsb2NrL2Zsb2F0L21hcnF1ZWUtc2hyaW5rLXRvLWF2b2lkLWZsb2F0
cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2sv
ZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dApAQCAtMjMs
NSArMjMsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgUmVuZGVyQmxv
Y2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMCwwKSBzaXplIDUweDEwMCBbYmdjb2xvcj0jMDA4MDAw
XQogICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKLWxheWVyIGF0ICg1OCw5
NCkgc2l6ZSA1MHgxMDAgc2Nyb2xsWCAtNTAKK2xheWVyIGF0ICg1OCw5NCkgc2l6ZSA1MHgxMDAK
ICAgUmVuZGVyQmxvY2sge01BUlFVRUV9IGF0ICg1MCwwKSBzaXplIDUweDEwMCBbYmdjb2xvcj0j
MDA4MDAwXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMyM2FiNmI0ZTZjNC4uYjRlMmY2Y2YyYTI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzA1IEBACisyMDIwLTExLTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDxu
emltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2Rl
IG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBQcmVwYXJhdGlvbiBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVyZSBj
aGFuZ2U6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxv
dyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRz
IGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVz
IHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93
LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAg
ICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRv
IGNvbnN0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNj
cm9sbFRvcCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVl
ZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxl
bWVudERpZEJsdXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OnNjcm9sbFRvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpw
YWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9s
bFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNh
bFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNr
eVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpv
dXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0Nv
dmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRP
clVzaW5nQ29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tM
YXllckdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVx
dWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENv
cm5lckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdl
YkNvcmU6OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVj
dENvbXBvc2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZp
eGVkT3JTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21w
b3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZs
b3dOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1
dGVDb29yZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRM
YXllcldpdGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6
cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9y
U2Nyb2xsaW5nUm9sZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9Y
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRo
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVy
bmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJoYW5nQW1vdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmlzaWJsZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRl
bnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENv
cm5lclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRy
b2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJm
bG93VG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
U2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3Zl
cmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6
CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFy
c0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092
ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJl
c2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0
VGVzdE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVs
RXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJs
YXlTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxD
b3JuZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpjbGVhclNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhclN0eWxlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Q
b2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xs
QW5pbWF0b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
cnF1ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
dXRwdXRSZW5kZXJUcmVlTGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
b3V0cHV0UmVuZGVyT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2lj
YWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCisyMDIwLTExLTIwICBOaWtvbGFzIFppbW1l
cm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJlcGFyYXRp
b24gZm9yIHRoZSBSZW5kZXJMYXllciBhcmNoaXRlY3R1cmUgY2hhbmdlOgorICAgICAgICBUaGUg
Z29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cgaGFuZGxpbmcKKyAgICAgICAg
b3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBpbnRlcmZhY2UgYW5kCisgICAg
ICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0aGF0IGRvIG5vdCBuZWVkCisg
ICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4KKworICAgICAgICBBZGQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBza2VsZXRvbiwgd2hpY2ggd2lsbCBiZSB1c2VkCisgICAg
ICAgIHRvIGFic3RyYWN0IHRoZSBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UgZnJvbSBSZW5kZXJM
YXllci4KKworICAgICAgICBGb2xsb3ctdXAgY29tbWl0cyB3aWxsIGxhbmQgdGhlIGFjdHVhbCBp
bXBsZW1lbnRhdGlvbi4KKworICAgICAgICBObyBmdW5jdGlvbmFsIGNoYW5nZSAtIG5vIG5ldyB0
ZXN0cyBuZWVkZWQuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOiBBZGQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS4qIHRvIGJ1aWxkLgorICAgICAgICAqIFNvdXJjZXMudHh0OiBEaXR0by4K
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCiAy
MDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmluZyBJbmxpbmVCb3ggYWNjZXNz
IHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDM3ODlhYTM4Mzk0
MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTE0NjIsNiArMTQ2Miw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisgICAgcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45ODNjNWYzZGM2YzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKIHJlbmRlcmluZy9S
ZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAogcmVuZGVyaW5nL1Jl
bmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3NDUyMjUuLmEwOTRlMTZiZTBm
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtNjAxNSw2ICs2MDE1LDggQEAKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8q
IFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENT
U0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyRmls
dGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTREQ0UzMTg4MTA1MUQw
MDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yOTU4Niw2ICsyOTU4OCw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8q
IFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAv
KiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4
OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTNGQjgzMjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLywKKwkJCQkwRjUz
RkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovLAog
CQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8s
CiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8s
CiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEzYy4uYTYzOGUxZGY4ZjZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRl
ICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcgQEAgU2Nyb2xsYWJsZUFyZWEq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxl
KCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyArMzkxNyw5IEBAIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3JvbGxP
ZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJveC5s
YXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5sYXllcigpKTsK
KyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsK
IH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYxYzdm
Njk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYgKzky
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFj
a2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgpA
QCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBuZXdM
ZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0ICog
cmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8sIHRo
aXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAgICAg
cmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJlbmRl
cmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAg
ICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbFRv
cChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2VyKG5l
d1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpB
dXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAg
ICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAg
IHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigpID8g
cmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAK
aW5kZXggOWI2N2QyOTdlMTkxLi5hZGVmOTY4YTgyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMzkxLDkgKzIzOTEsMTMgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwg
Y29uc3QgU2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVy
TGF5ZXIqIGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9z
aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQp
IHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIp
CisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxp
Z25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpOworCiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1l
bnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNj
cm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRlMmUuLjI2OTE2ZTY1ZjcyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3Niw5IEBAIFJlbmRlck1hcnF1ZWUq
IEhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFy
ZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+bWFycXVl
ZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyLT5tYXJxdWVlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApp
bmRleCAyZGU0M2RhZDVhOWYuLmFlZTE2ZTk5NWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI1Myw5ICsyNTQsMTMg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlu
bmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIGlubmVyTGF5ZXJTY3JvbGxh
YmxlID0gaW5uZXJMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIWlubmVyTGF5ZXJT
Y3JvbGxhYmxlKQorICAgICAgICByZXR1cm47CisKICAgICBib29sIGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KCpyZW5kZXJlciku
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlubmVyTGF5ZXItPnNjcm9sbFdp
ZHRoKCksIDApOwotICAgIGlubmVyTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldCk7
CisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8g
MCA6IGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxXaWR0aCgpLCAwKTsKKyAgICBpbm5lckxh
eWVyU2Nyb2xsYWJsZS0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogI2lmIEVOQUJM
RShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNsb3NlU3VnZ2VzdGlvbnMoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NWViMjA5ZDRkMzcuLjViMWNiYzNjYTNmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODAsNiArODAsNyBAQAogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQxLDcgKzM0Miw3IEBAIHN0YXRp
YyBib29sIGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5vZGUqIHN0
YXJ0Tm9kZSwgY29uc3QgV2hlCiAKICAgICBSZW5kZXJCb3gqIGN1cnJlbnRFbmNsb3NpbmdCb3gg
PSAmaW5pdGlhbEVuY2xvc2luZ0JveDsKICAgICB3aGlsZSAoY3VycmVudEVuY2xvc2luZ0JveCkg
ewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0Jv
eC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9z
aW5nQm94LT5sYXllcigpID8gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1FdmVudCA9IHdo
ZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKICAgICAgICAgICAgIGJvb2wgc2Ny
b2xsaW5nV2FzSGFuZGxlZDsKICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CkBAIC0x
NTYyLDcgKzE1NjMsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vy
c29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICAgICAgaWYg
KGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVy
KS5sYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJ
blJlc2l6ZUNvbnRyb2wocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAg
ICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRo
V2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsYXllci0+cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFz
dFJlc2l6ZUN1cnNvcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE5MTIsOSAr
MTkxMyw5IEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewotICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllcjsKKyAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9
IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAzMDU4ZDkx
ZGU2NWEuLjE1NjJjNmYyYTEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtODEs
NiArODEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxi
YXJQYXJ0LmgiCkBAIC0yNTk1LDcgKzI1OTYsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlmICghbGF5b3V0Q29udGV4dCgpLmlz
TGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewogICAg
ICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKSkgewog
ICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByZW5kZXJW
aWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsK
KworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPmxheWVyKCkpOworICAgICAgICAgICAg
QVNTRVJUKHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICAg
ICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMjEw
LDYgKzMyMTQsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKCkKIAogICAgIExP
R19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiIGFuY2hvciBub2RlIHJlY3QgIiA8
PCByZWN0KTsKIAorICAgIGF1dG8qIGVuY2xvc2luZ0xheWVyID0gYW5jaG9yTm9kZS0+cmVuZGVy
ZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBpZiAoZW5jbG9zaW5nTGF5ZXIgJiYgIWVuY2xv
c2luZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBlbmNsb3NpbmdMYXllci0+ZW5z
dXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gU2Nyb2xsIG5lc3RlZCBsYXllcnMg
YW5kIGZyYW1lcyB0byByZXZlYWwgdGhlIGFuY2hvci4KICAgICAvLyBBbGlnbiB0byB0aGUgdG9w
IGFuZCB0byB0aGUgY2xvc2VzdCBzaWRlICh0aGlzIG1hdGNoZXMgb3RoZXIgYnJvd3NlcnMpLgog
ICAgIGlmIChhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCkBAIC0zODYyLDcgKzM4NzAsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmll
dzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObyk7CisgICAgYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXll
cikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwogfQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAgLTQzMjYsOCArNDMzOCwxMSBA
QCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5w
YXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCBMYXlv
dXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsgfSwgc2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gPyBSZW5k
ZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luIDogUmVuZGVyTGF5
ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2libGVPcmlnaW5Pbmx5LCBldmVu
dFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgIHJvb3RMYXllci0+
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlv
ciwgcmVuZGVyZXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVSb290TGF5ZXIgPSByb290
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVSb290TGF5
ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRl
eHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlUm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxi
YXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAg
fQogCiAgICAgZGlkUGFpbnRDb250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QsIHBhaW50aW5nU3Rh
dGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRleCAz
OGZiNDk3MWQyYTMuLjgwOWJjMTkxMzQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFs
TmF2aWdhdGlvbi5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NSw4IEBAIGJvb2wgc2Nyb2xsSW5EaXJl
Y3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBjb250YWluZXItPnJlbmRl
ckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoZHgs
IGR5KSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBjb250YWluZXItPnJl
bmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KEludFNpemUoZHgsIGR5KSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDczOTMxOTY3
NDg3NS4uNDIxYjMwNzVhZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC05Miw3ICs5Miw3IEBAIGJvb2wg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yT3ZlcmZsb3dMYXll
cihjb25zdCBSZW5kZXJMYXllCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NF
UlQobV9wYWdlKTsKIAotICAgIHJldHVybiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCk7CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVBcmVhKCkgPyBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgOiBmYWxzZTsK
IH0KIAogU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQ29u
dGFpbmVyTm9kZUlEKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBjOGQ4MWVmMjQ4NjYuLmIwZDYwNmE2MDRhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OSw2ICs1OSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUzLDcg
KzU1NCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBibG9ja3NU
b1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKTsKLSAg
ICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworICAg
ICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJsb2NrLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9CkBA
IC01ODQsOCArNTg3LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYg
KGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgp
OworCisgICAgaWYgKCFsYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllcigpLT51
cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQo
KQpAQCAtMTExMyw4ICsxMTIxLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAvLyB6LWlu
ZGV4LiBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28g
dGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5k
L2JvcmRlci4KICAgICBpZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8
fCBwaGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgbGF5ZXIoKQotICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRo
aXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAgbGF5
ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJ
bnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJl
Y3QpKTsKKyAgICAgICAgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBzdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWlu
dFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHko
KSkKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRPdmVyZmxvd0NvbnRy
b2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQpAQCAtMjAwNyw3ICsyMDE1LDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6
OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExh
eW91dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwg
cm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpKSk7CisgICAgQVNTRVJUKGxheWVyKCkpOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5
ZXItPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0
aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAK
IE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNTAzLDggKzI1
MTYsOSBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJh
c2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQg
aW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1
c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmlu
ZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdl
IGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpo
aWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wg
aWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJl
Y3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8
fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVy
KCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkg
IT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKKyAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkgOiBudWxscHRyOworICAgICAgICBib29sIGlnbm9yZUJhc2VsaW5lID0gKHNjcm9sbGFi
bGVMYXllciAmJiAoc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBI
b3Jpem9udGFsTGluZSA/IChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKKyAgICAgICAgICAgIDog
KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDApKSkpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYm
ICFpc1J1YnlSdW4oKSk7CiAgICAgICAgIAogICAgICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5l
UG9zID0gaWdub3JlQmFzZWxpbmUgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2Vs
aW5lKGRpcmVjdGlvbik7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAppbmRleCBiYjIyZjM0ZmQzZjMuLmJkNzBkNjFkNDE3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTM0OCw3ICsz
NDgsOCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0
aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9X
cmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFy
cXVlZSB3aXRoIGlubGluZSBjaGlsZHJlbiBoYXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAg
aWYgKGxheWVyKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+
aXNIb3Jpem9udGFsKCkpCisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkg
PyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5
ZXItPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lk
dGggPSAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRl
eCAzMDdmOWIyYzdmMmYuLjk1MDI2OTFhZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0zMTgsMTEgKzMxOSwxMyBAQCB2b2lk
IFJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZQogCiAgICAgLy8gSWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMg
YW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExlZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0
aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgot
ICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAg
ICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKLSAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRp
b24uc2NhbGUoem9vbVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKKyAgICBpZiAoaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5l
ZmZlY3RpdmVab29tKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICAg
ICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFBvc2l0aW9uKCk7CisgICAgICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHls
ZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAg
ICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUoem9vbVNjYWxlRmFjdG9yKTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE91ciBvcGFxdWVuZXNzIG1pZ2h0IGhhdmUg
Y2hhbmdlZCB3aXRob3V0IHRyaWdnZXJpbmcgbGF5b3V0LgpAQCAtNTcxLDEyICs1NzQsMTQgQEAg
aW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6c2Ny
b2xsTGVmdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
OworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSA/IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOwogfQogCiBpbnQgUmVuZGVy
Qm94OjpzY3JvbGxUb3AoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAm
JiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXll
cikgPyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKIH0KIAogdm9p
ZCBSZW5kZXJCb3g6OnJlc2V0TG9naWNhbEhlaWdodEJlZm9yZUxheW91dElmTmVlZGVkKCkKQEAg
LTU5MCwzMSArNTk1LDM4IEBAIHN0YXRpYyB2b2lkIHNldHVwV2hlZWxFdmVudE1vbml0b3IoUmVu
ZGVyTGF5ZXImIGxheWVyKQogICAgIFBhZ2UmIHBhZ2UgPSBsYXllci5yZW5kZXJlcigpLnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGxheWVyLnNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9y
KHBhZ2Uud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7
CisKKyAgICBhdXRvJiBzY3JvbGxBbmltYXRvciA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQW5p
bWF0b3IoKTsKKyAgICBzY3JvbGxBbmltYXRvci5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFn
ZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3Jv
bGxMZWZ0KGludCBuZXdMZWZ0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
IGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJm
bG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNl
dHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWFBv
c2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFt
cGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKGludCBu
ZXdUb3AsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwg
IWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50
TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9w
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9ZUG9zaXRpb24obmV3VG9wLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9z
aXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNs
YW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJmbG93
Q2xpcCgpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNldHVw
V2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNldFNjcm9sbFBvc2l0
aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9s
bGFibGVMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkg
Y29uc3QKQEAgLTgxNCwyNCArODI2LDMyIEBAIGJvb2wgUmVuZGVyQm94OjpmaXhlZEVsZW1lbnRM
YXlzT3V0UmVsYXRpdmVUb0ZyYW1lKGNvbnN0IEZyYW1lVmlldyYgZnJhbWVWaWV3KSBjCiAKIGJv
b2wgUmVuZGVyQm94OjppbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3Zl
cmxheVNjcm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJs
YXlTY3JvbGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZs
b3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKTsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCkt
Pmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGhh
c092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllciAmJiAhc2Nyb2xsYWJsZUxheWVyLT5o
YXNPdmVybGF5U2Nyb2xsYmFycygpCiAgICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WCgpID09
IE92ZXJmbG93OjpTY3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0
byk7CiB9CiAKIGludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAog
ewotICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAo
IXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1ZGVW
ZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6
ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6
IG51bGxwdHI7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IHNjcm9sbGFibGVM
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJv
eDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzOSwxMyArODU5
LDE2IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNv
bnN0CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSA6IG51bGxwdHI7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0
eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNj
cm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVy
dGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsYWJsZUxheWVy
LCBzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5oYXNW
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKICAgICB9CiAKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0
eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNj
cm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5
ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhh
c0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NTQsOCArODc3LDggQEAgaW50IFJlbmRlckJveDo6
aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6
OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7
Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIg
JiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkg
eworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyKCkgPyBsYXllcigpLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChib3hMYXllclNjcm9s
bGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllcikpIHsKICAgICAgICAgaWYgKHN0b3BFbGVtZW50KQogICAgICAgICAgICAg
KnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOwogCkBAIC04OTIsNyArOTE1LDggQEAgYm9vbCBSZW5k
ZXJCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXQKICAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09IFNjcm9sbEJ5RG9jdW1l
bnQpCiAgICAgICAgICAgICBzY3JvbGxlZCA9IGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwg
bXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbCA/IGwtPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94
TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCiAgICAgICAgICAgICBzY3JvbGxlZCA9IHRy
dWU7CiAgICAgICAgIAogICAgICAgICBpZiAoc2Nyb2xsZWQpIHsKQEAgLTkyMSw2ICs5NDUsMjAg
QEAgYm9vbCBSZW5kZXJCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSBjb25z
dAogICAgIHJldHVybiBjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAor
Ym9vbCBSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAor
eworICAgIGlmIChpc1JlbmRlclZpZXcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoc2Nyb2xsc092ZXJmbG93KCkgfHwgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzVmVy
dGljYWxPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSB8fCBzdHlsZSgpLmhhc1ZpZXdwb3J0Q29uc3RyYWlu
ZWRQb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogLy8gRklYTUU6IFRoaXMgaXMgYmFkbHkgbmFtZWQuIG92ZXJmbG93OmhpZGRlbiBjYW4g
YmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgeWV0IHRoaXMgcmV0dXJucyBmYWxzZSBpbiB0
aGF0IGNhc2UuCiBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgp
IGNvbnN0CiB7CkBAIC05MzgsNyArOTc2LDcgQEAgYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3Jh
bWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6dXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBo
YXNMYXllcigpICYmIGxheWVyKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24pCkBAIC05OTcsOCArMTAzNSw4IEBAIFJlbmRlckJveCogUmVuZGVyQm94OjpmaW5k
QXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogdm9pZCBSZW5kZXJCb3g6
OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQogewotICAgIGlmIChsYXllcigpKQot
ICAgICAgICBsYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6
IG51bGxwdHIpCisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291
cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkgY29u
c3QKQEAgLTEwMjcsNyArMTA2NSwxMSBAQCBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNjcm9s
bFBvc2l0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwogCiAgICAgQVNTRVJU
KGhhc0xheWVyKCkpOwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiB7IDAsIDAgfTsKKworICAgIHJl
dHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIExheW91dFNpemUg
UmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29uc3QKQEAgLTE1NzUsOSAr
MTYxNywxMCBAQCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9i
c2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dyb3Vu
ZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5nTWF5
UmV2ZWFsQmFja2dyb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGluZ01heVJl
dmVhbEJhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAg
cmV0dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwg
YmFja2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKIH0KIApAQCAtMTg5NCwxMCArMTkz
NywxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlv
dXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUoY2xp
cFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBi
b3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQgc2Ny
b2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyKSB7CiAgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0
KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0
Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IDApOworICAgICAgICBjbGlwUmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVjdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAzY2Q4MGJjZDA3MmQuLmRmMGVh
MWMwNzE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTYsNiArNTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRleCgp
IHx8IGhhc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKKyAgICBib29s
IHJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICBib29sIGJhY2tn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0IGZpbmFsOwogICAgIAogICAgIC8vIFJldHVybnMgZmFsc2UgZm9yIHRoZSBib2R5IHJl
bmRlcmVyIGlmIGl0cyBiYWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRl
eCBiOTgyN2M4YTE0ZDIuLmJhNWRjZmE0MDM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtNDg5
LDggKzQ5MCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9z
aXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBGbG9hdFBvaW50
IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0gY29udGFpbmVy
UmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAgICAgICAgICAg
IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdD
bGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdC
b3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAg
ICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAg
ICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xv
c2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdM
YXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXJMb2NhdGlv
blJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgY29udGFpbmVyUmVj
dFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2NhdGlv
blJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRzLnNl
dENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3Rvcik7CkBAIC01MDcsOCArNTEwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAg
aWYgKGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94
LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAg
ICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBw
aW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3gg
IT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2Nr
KSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAg
ICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IHNjcm9s
bGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAvLyBGSVhNRTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5vdCB0
cmFuc2Zvcm1lZC4KICAgICBzdGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iuc2V0
TG9jYXRpb24oc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAt
NTQ3LDExICs1NTIsMTQgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJh
aW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVjdCBj
b25zdHJhaW5pbmdSZWN0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5lclF1
YWQoRmxvYXRSZWN0KGNsaXBSZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAgICAg
ICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlRW5jbG9z
aW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBG
bG9hdFBvaW50KCkgKyBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zm
c2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAgaWYg
KGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3gu
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAg
c2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlmIChl
bmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSAmJiBzY3JvbGxhYmxlRW5j
bG9zaW5nQ2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IHNjcm9s
bGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNldExv
Y2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwgc2Ny
b2xsT2Zmc2V0LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUyNDNlYTFjMWIwNC4uMTll
MjhmZmYzOWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgogICog
UG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBD
b3Jwb3JhdGlvbi4KICAqCkBAIC05Nyw2ICs5OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCkBAIC0zMDQsNDAgKzMwNiwy
NiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVu
ZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUp
CiAgICAgLCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdChmYWxzZSkKICAgICAsIG1faW5SZXNpemVN
b2RlKGZhbHNlKQotICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAsIG1f
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxmUGFp
bnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5j
eShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAgICwg
bV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVlZHNO
b3JtYWxSZXBhaW50KQogICAgICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUpCiAg
ICAgLCBtX2hhc1Zpc2libGVDb250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2VuZGFu
dFN0YXR1c0RpcnR5KGZhbHNlKQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxzZSkK
LSAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0ZpeGVk
SW50ZXJzZWN0aW5nVmlld3BvcnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZhbHNl
KQogICAgICwgbV8zRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCiAgICAg
LCBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3Np
dGluZ0Rlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWRE
ZXNjZW5kYW50cyhmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
KGZhbHNlKQotICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNlKQog
ICAgICwgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9oYXMzRFRyYW5z
Zm9ybWVkQW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3QoZmFs
c2UpCiAgICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9ydENv
bnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICAs
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQotI2Vu
ZGlmCi0gICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNlbmRp
ZgotICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCi0g
ICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1f
bGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM2MSwxNiArMzQ5LDYg
QEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRl
cmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5
ID0gZmFsc2U7CiAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxl
KCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAvLyBX
ZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Ny
b2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgotICAgICAgICBpZiAocmVuZGVyQm94KCkpIHsK
LSAgICAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkK
LSAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVy
U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJl
bmRlckxheWVyKCkKQEAgLTM3OCwyOSArMzU2LDEwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5
ZXIoKQogICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7CiAKLSAgICBBU1NFUlQobV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
Y29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92
ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYK
LSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAg
ICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7
Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ry
b3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
LSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEo
KnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVjdGlv
bigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIoKTsKLQor
ICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7
CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC05MTMsOCArODcy
LDEwIEBAIE9wdGlvblNldDxSZW5kZXJMYXllcjo6VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBS
ZW5kZXJMYXllcjo6ZmxhZ3NGb3JVcGRhdGVMYXllCiAgICAgICAgIGlmIChwYXJlbnQtPmJlaGF2
ZXNBc0ZpeGVkKCkgfHwgKHBhcmVudC0+cmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpICYm
ICFwYXJlbnQtPmhhc1RyYW5zZm9ybWVkQW5jZXN0b3IoKSkpCiAgICAgICAgICAgICBmbGFncy5h
ZGQoU2VlbkZpeGVkTGF5ZXIpOwogCi0gICAgICAgIGlmIChwYXJlbnQtPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpIHx8IHBhcmVudC0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQotICAgICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5
ZXIpOworICAgICAgICBpZiAoYXV0byogcGFyZW50U2Nyb2xsYWJsZUxheWVyID0gcGFyZW50LT5z
Y3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50U2Nyb2xsYWJsZUxheWVy
LT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSB8fCBwYXJlbnRTY3JvbGxhYmxlTGF5
ZXItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICBm
bGFncy5hZGQoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcik7CisgICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gZmxhZ3M7CkBAIC05NDksNyArOTEwLDggQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0
cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxh
Zz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigmZmxhZ3MpOwotICAgIGFwcGx5
UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICBnZW9tZXRy
eU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7CkBAIC05NTcsNyAr
OTE5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVhciBvdXIgY2FjaGVk
IGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAgaWYg
KGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkgewogICAgICAgICBMYXlvdXRT
aXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgICAg
ICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9GbG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFi
c29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAtOTY2LDcgKzkyOCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRy
eU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0
b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgogICAgICAgICAgICAgb2Zmc2V0
RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdCgpKTsKICAgICAgICAgfQotICAgICAg
ICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3Qp
KTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJv
dW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAgICAgfQogCiAgICAgdXBkYXRlRGVzY2Vu
ZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDEzLDcgKzk3NSw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwg
T3B0aW9uU2V0CiAgICAgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yID0gZmxhZ3MuY29udGFpbnMo
U2VlblRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yID0g
ZmxhZ3MuY29udGFpbnMoU2VlbjNEVHJhbnNmb3JtZWRMYXllcik7CiAgICAgbV9iZWhhdmVzQXNG
aXhlZCA9IGZsYWdzLmNvbnRhaW5zKFNlZW5GaXhlZExheWVyKTsKLSAgICBzZXRIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxhZ3MuY29udGFpbnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxp
bmdMYXllcikpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhLT5zZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxhZ3MuY29udGFpbnMo
U2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOwogCiAgICAgLy8gVXBkYXRlIHRoZSByZWZs
ZWN0aW9uJ3MgcG9zaXRpb24gYW5kIHNpemUuCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKQEAgLTEw
MzYsMjAgKzk5OSwxNSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICBmbGFncy5h
ZGQoU2VlbkZpeGVkTGF5ZXIpOwogICAgIH0KIAotICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkpCisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxl
QXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQogICAgICAgICBmbGFncy5h
ZGQoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcik7CiAKICAgICBmb3IgKFJlbmRlckxheWVy
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCiAgICAgICAgIGNoaWxkLT51cGRhdGVMYXllclBvc2l0aW9ucyhnZW9tZXRyeU1hcCwgZmxh
Z3MpOwogCiAgICAgLy8gV2l0aCBhbGwgb3VyIGNoaWxkcmVuIHBvc2l0aW9uZWQsIG5vdyB1cGRh
dGUgb3VyIG1hcnF1ZWUgaWYgd2UgbmVlZCB0by4KLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vz
bid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCi0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAKICAgICBp
ZiAocmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRml4ZWRQb3NpdGlvbkVuYWJsZWQoKSkgewogICAg
ICAgICBib29sIGludGVyc2VjdHNWaWV3cG9ydCA9IGNvbXBvc2l0b3IoKS5maXhlZExheWVySW50
ZXJzZWN0c1ZpZXdwb3J0KCp0aGlzKTsKQEAgLTExMjksMjcgKzEwODcsNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpjbGVhclJlcGFpbnRSZWN0cygpCiAgICAgcmVuZGVyZXIoKS5jbGVhclJlcGFpbnRM
YXlvdXRSZWN0cygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyRG9jdW1lbnRTY3JvbGwoKQotewotICAgIEFTU0VSVCh0aGlzID09IHJlbmRlcmVyKCku
dmlldygpLmxheWVyKCkpOwotCi0gICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKLQotICAgIFJlbmRlckdlb21l
dHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKLXsKLSAgICBSZW5kZXJHZW9t
ZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICBpZiAodGhpcyAhPSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpKQotICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NU
b0FuY2VzdG9yKHBhcmVudCgpLCBudWxscHRyKTsKLQotICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQg
T0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwot
ICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3Ig
YW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Ci0gICAgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIElzT3ZlcmZsb3dTY3JvbGwpOwot
fQotCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGxGbGFnPiBmbGFncykKIHsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGRu
J3QgYmUgbmVlZGVkLCBidXQgdGhlcmUgYXJlIHNvbWUgY29ybmVyIGNhc2VzIHdoZXJlCkBAIC0x
MjAyLDEyICsxMTM5LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAKICAgICAvLyBvZiBhbiBv
YmplY3QsIHRodXMgUmVuZGVyUmVwbGljYSB3aWxsIHN0aWxsIHJlcGFpbnQgaXRzZWxmIHByb3Bl
cmx5IGFzIHRoZSBsYXllciBwb3NpdGlvbiB3YXMKICAgICAvLyB1cGRhdGVkIGFib3ZlLgogCi0g
ICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0
aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHNo
b3VsZFB1c2hBbmRQb3BNYXBwaW5ncykKICAgICAgICAgZ2VvbWV0cnlNYXAtPnBvcE1hcHBpbmdz
VG9BbmNlc3RvcihwYXJlbnQoKSk7CkBAIC0xNjk4LDggKzE2MzEsMTAgQEAgYm9vbCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNG
bGFnPiogZmxhZ3MKICAgICBSZW5kZXJMYXllciogcG9zaXRpb25lZFBhcmVudDsKICAgICBpZiAo
cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocG9zaXRpb25lZFBhcmVudCA9
IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24ocmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9u
KCkpKSkgewogICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBsYXllcnMsIHdlIHN1YnRyYWN0IG91
dCB0aGUgZW5jbG9zaW5nIHBvc2l0aW9uZWQgbGF5ZXIncyBzY3JvbGwgb2Zmc2V0LgotICAgICAg
ICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAg
ICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnQtPnNj
cm9sbFBvc2l0aW9uKCkpOworICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBvc2l0aW9uZWRQ
YXJlbnRTY3JvbGxhYmxlQXJlYSA9IHBvc2l0aW9uZWRQYXJlbnQtPnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBh
cmVudFNjcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaXNJbkZsb3dQb3Np
dGlvbmVkKCkgJiYgaXM8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
KSkgewogICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBkb3duY2FzdDxSZW5kZXJJbmxp
bmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpLm9mZnNldEZvckluRmxvd1Bvc2l0aW9u
ZWRJbmxpbmUoJmRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwpAQCAtMTcwOSwxNCAr
MTY0NCwxNiBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNl
dDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9zaXRp
b25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hTY3Jv
bGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsK
ICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAg
aWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAg
ICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkp
OworICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0gcGFy
ZW50TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAt
PSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXll
ci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAgIH0KIAotICAgIGlmIChoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBt
X3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAg
ICAgICAgaWYgKCFtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlID09IG1fYm94U2Nyb2xsaW5nU2NvcGUpCiAgICAgICAgICAgICBtX2NvbnRlbnRzU2Ny
b2xsaW5nU2NvcGUgPSBuZXh0U2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9IGVsc2UgaWYgKCFtX2Nv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUgfHwgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlICE9IG1fYm94
U2Nyb2xsaW5nU2NvcGUpCkBAIC0xODQyLDkgKzE3NzksOSBAQCBSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhbWVS
ZW5kZXJMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCitSZW5kZXJMYXllciogUmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdAogewotICAgIGF1dG8qIG93
bmVyRWxlbWVudCA9IGxheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsK
KyAgICBhdXRvKiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCk7CiAgICAgaWYgKCFvd25lckVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xODU1LDE1ICsxNzkyLDE1IEBAIHN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgcmV0dXJuIG93bmVy
UmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCk7CiB9CiAKLXN0YXRpYyBSZW5kZXJMYXllciogZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBDcm9z
c0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykKK1JlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8qIGFuY2VzdG9y
ID0gbGF5ZXIuZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkpCisgICAgaWYg
KGF1dG8qIGFuY2VzdG9yID0gZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkp
CiAgICAgICAgIHJldHVybiBhbmNlc3RvcjsKIAogICAgIGlmIChjcm9zc0ZyYW1lQm91bmRhcmll
cyA9PSBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVy
biBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdApAQCAt
MTg3Nyw3ICsxODE0LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwKICAgICBpZiAoaW5jbHVk
ZVNlbGYgPT0gSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYgJiYgaXNDb25zaWRlcmVkU2Ny
b2xsYWJsZSgqdGhpcykpCiAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4o
dGhpcyk7CiAgICAgCi0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllcigqdGhpcywgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCpuZXh0TGF5ZXIsIGNyb3Nz
RnJhbWVCb3VuZGFyaWVzKSkgeworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5n
Q29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NGcmFtZUJvdW5kYXJpZXMpOyBuZXh0TGF5ZXI7IG5l
eHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoY3Jvc3NG
cmFtZUJvdW5kYXJpZXMpKSB7CiAgICAgICAgIGlmIChpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCpu
ZXh0TGF5ZXIpKQogICAgICAgICAgICAgcmV0dXJuIG5leHRMYXllcjsKICAgICB9CkBAIC0xODg1
LDUwICsxODIyLDYgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChi
b29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmFic29s
dXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhl
ZCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25z
dAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJT
Y3JvbGxJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3Jv
bGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9s
bEluUHJvZ3Jlc3MoKTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1
YmJlckJhbmRJblByb2dyZXNzKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVy
Zm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5zZXR0aW5n
cygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGlu
ZygpOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVk
QW5jZXN0b3IoKSBjb25zdAogewogICAgIFJlbmRlckxheWVyKiBjdXJyID0gcGFyZW50KCk7CkBA
IC0yNDU0LDE5ICsyMzQ3LDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFu
Y2VzdG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDb2wKICAgICByZXR1cm4g
dG9MYXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBv
aW50KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5k
ZXJlcigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0lu
c2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVO
QUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dT
Y3JvbGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRP
dmVyZmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
ICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIGJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewpAQCAtMjQ5
NiwyODkgKzIzNzYsNiBAQCB2b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQogfQogI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xh
eWVyKCk7Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFk
ZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAot
ewotICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXll
cigqdGhpcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50
IGJlZ2lubmluZ0RlbHRhKQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmly
ZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9v
bGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0IGludCBzcGVl
ZFJlZHVjZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEg
LyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFkanVzdGVk
RGVsdGEgPCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSAr
IDE7Ci0KLSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRT
aXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCi17Ci0gICAgcmV0
dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRT
Y3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwYW5T
Y3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQotewotICAgIEludFBv
aW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpOwotICAgIAotICAgIC8vIFdlIG5lZWQgdG8g
Y2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5k
b3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMg
aW5jb2hlcmVudAotICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0g
ICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uLnkoKSA8IDApCi0gICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91
c01vdXNlUG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24g
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOwotCi0gICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93
bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsKLQotICAgIGlmIChhYnMoZGVsdGEud2lkdGgo
KSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2Ug
bGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7Ci0g
ICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRp
dXMpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKLQotICAgIHNjcm9sbEJ5UmVjdXJzaXZl
bHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOwotfQotCi0vLyBGSVhNRTogdW5pZnkgd2l0
aCB0aGUgc2Nyb2xsUmVjdFRvVmlzaWJsZSgpIGNvZGUgYmVsb3cuCi12b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJl
YSoqIHNjcm9sbGVkQXJlYSkKLXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Ci0gICAgaWYg
KHJlbmRlcmVyKCkucGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFy
ZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOwotCi0gICAg
aWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFt
cCkgewotICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0
KCkgKyBkZWx0YTsKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLSAg
ICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlz
OwotCi0gICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sg
dGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQotICAgICAgICBJbnRTaXpl
IHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgp
OwotICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJl
cigpLnBhcmVudCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxh
YmxlIGZyYW1lcy4KLSAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpZZXMpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7
Ci0KLSAgICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVB
dXRvc2Nyb2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJl
IHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUg
YW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUg
dGhhdCBjYW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLnNjcm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAg
ICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAg
ICAgICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ug
d2FudCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0K
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlv
bmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbiA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9s
bFBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwot
ICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17
Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwot
ICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQotewotICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBz
Y3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0
aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9P
ZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBz
Y3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxP
ZmZzZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlw
ZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiBy
ZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZp
b3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24p
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZz
ZXQ7Ci0gICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVu
dFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQot
ICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xh
bXBpbmcpOwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpOb3RJbkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Nj
cm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmlt
YXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUg
PSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5
cGUpOwotCi0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNl
dDsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigp
LmNhbmNlbEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNj
cm9sbE9mZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShw
cmV2aW91c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5k
ZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhf
U1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBw
b3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Ny
b2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIiki
KTsKLQotICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYg
KCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGlt
ZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93
OmhpZGRlbiBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0g
ICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRy
eWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0g
ICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94
LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBz
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNj
cm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZz
ZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9m
ZnNldCArPSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9
IGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkg
LSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0
aDsKLQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAg
ICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwot
ICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24g
PT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xs
QmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3Ro
aW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3Np
dGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xs
aW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQg
d2hlbiBhIGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3Jv
bGwoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQ
b3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVy
KCkudmlldygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxh
eWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBi
eSBhIHNjcm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywg
YmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcg
YW5jZXN0b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0lu
UmVuZGVyVHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUg
b2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlz
aGVkLgotICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
LQotICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25z
KCk7Ci0KLSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAg
ICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0
aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBv
c2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9m
IHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2Fz
ZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMu
Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAg
ICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAg
ICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29t
cG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAot
ICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUg
c3RhY2tpbmcgY29udGV4dC4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQg
PSBzdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGlu
ZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygp
OwotICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUo
KSk7Ci0gICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAg
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQg
PSByZW5kZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBz
ZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0g
ICAgICAgIHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3Np
dGVkU2Nyb2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWlu
dCBvZiBvdXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRl
cmVyKCkucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKLQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJn
ZXQoKmVsZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3
LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZp
ZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRl
ckxheWVyRGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxl
bWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVu
dEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewogICAgIC8vIElmIHNjcm9sbGJhcnMgYXJl
bid0IGV4cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgpAQCAtMjgyMyw3ICsy
NDIwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlv
dXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKIAogICAgIExheW91dFJlY3QgbmV3UmVj
dCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAg
YXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOwogCiAgICAgYXV0byBzaG91bGRVc2VBbmltYXRlZFNjcm9sbCA9
IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3JvbGxCZWhhdmlvciBiZWhhdmlvcikKICAgICB7
CkBAIC0yODMzLDYgKzI0MzAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgIH07CiAK
ICAgICBpZiAoYWxsb3dzQ3VycmVudFNjcm9sbCgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgICAgICAvLyBEb24n
dCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBi
eSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgogICAgICAgICAvLyBUaGlzIHdpbGwg
cHJldmVudCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNh
ZmFyaSBSU1MuCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CkBAIC0yODQz
LDI0ICsyNDQyLDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29u
c3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgIC8vIGJvcmRl
ciBlZGdlLiBNYWtlIHRoZSByZWN0YW5nbGUgcmVsYXRpdmUgdG8gdGhlIHNjcm9sbGFibGUgYXJl
YS4KICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeSgtTGF5b3V0UG9pbnQoYm94LT5ib3Jk
ZXJMZWZ0KCksIGJveC0+Ym9yZGVyVG9wKCkpKTsKIAotICAgICAgICBpZiAoc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChib3gtPnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAgICAgICAgLy8g
Rm9yIGRpcmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94LCB0aGUg
c2Nyb2xsIGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0CiAgICAgICAg
ICAgICAvLyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUg
eCBvZiBsb2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24g
dG9vLgotICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3Qu
bW92ZUJ5KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKSwgMCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMoMF9s
dSwgMF9sdSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKICAgICAg
ICAgZXhwYW5kU2Nyb2xsUmVjdFRvVmlzaWJsZVRhcmdldFJlY3RUb0luY2x1ZGVTY3JvbGxQYWRk
aW5nKGJveCwgbGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCk7CiAgICAgICAgIExheW91dFJl
Y3QgcmV2ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxFeHBvc2VS
ZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAg
ICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0
KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxv
Y2F0aW9uKCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zm
c2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgICAgICBhdXRvIGFuaW1hdGVkID0g
c2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwoYm94LT5lbGVtZW50KCksIG9wdGlvbnMuYmVoYXZpb3Ip
OwotICAgICAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0
KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9m
ZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0Owot
ICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2Up
OwotICAgICAgICAgICAgbmV3UmVjdCA9IExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMp
LmJvdW5kaW5nQm94KCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNj
cm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsUG9zaXRpb24ob3B0aW9ucy5iZWhhdmlvciwgcmV2
ZWFsUmVjdCwgbG9jYWxFeHBvc2VSZWN0KSkKKyAgICAgICAgICAgIG5ld1JlY3QgPSByZXN1bHQu
dmFsdWUoKTsKICAgICB9IGVsc2UgaWYgKCFwYXJlbnRMYXllcikgewogICAgICAgICBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25l
ckVsZW1lbnQoKTsKIApAQCAtMjg3NCw3ICsyNDY2LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5z
aWQKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRv
IHByb3RlY3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAg
ICAgICAgICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxv
d2VkU2NvcGU7CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVW
aWV3LnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAg
ICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250
ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAK
ICAgICAgICAgICAgICAgICBhdXRvKiBlbGVtZW50ID0gb3duZXJFbGVtZW50LT5jb250ZW50RG9j
dW1lbnQoKSA/IG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpIDogbnVsbHB0cjsKICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gZWxl
bWVudCA/IGVsZW1lbnQtPnJlbmRlckJveCgpIDogbnVsbHB0cjsKQEAgLTI5NTEsMjMgKzI1NDMs
NiBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xs
UmVjdFRvVmlzaWJsZShuZXdSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAg
IGlmIChjb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAg
ICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxs
IG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25p
bmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYg
KFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVu
Y2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBj
b21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0
aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3Np
dGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5j
ZXN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0
IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0
IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkg
Y29uc3QKIHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwpAQCAtMzExNCw3ICsyNjg5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXpl
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYK
ICAgICBlbGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKICAg
ICAKICAgICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZz
ZXQud2lkdGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3Ip
OwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsK
KyAgICBpZiAocmVuZGVyZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkgewogICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsK
ICAgICAgICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0Lndp
ZHRoKCkpOwogICAgIH0KQEAgLTMxMzQsMTAzOSArMjcwOSwxMTEgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cmVzaXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXpl
JiBvbGRPZmYKICAgICAgICAgTGF5b3V0VW5pdCBiYXNlV2lkdGggPSByZW5kZXJlci0+d2lkdGgo
KSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+aG9yaXpvbnRhbEJvcmRl
ckFuZFBhZGRpbmdFeHRlbnQoKSk7CiAgICAgICAgIGJhc2VXaWR0aCA9IGJhc2VXaWR0aCAvIHpv
b21GYWN0b3I7CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRo
KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBpZiAocmVzaXplICE9IFJl
c2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChp
czxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1h
a2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCBy
ZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3Is
IENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFz
ZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUg
OiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBi
YXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1l
bnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQo
YmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsK
LSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChS
YWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5l
Y2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7
Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29u
c3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0
aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlV2hlZWxF
dmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17
Ci0gICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKHVzZXNBc3lu
Y1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9y
U2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGlu
Zyh3aGVlbEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRS
ZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJh
ckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50
U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYg
c2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxi
YXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNp
emUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCks
IHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRo
KCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhl
aWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkg
Y29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigp
LnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0g
ICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlz
IHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFi
bGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zm
c2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkp
OwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0Lnko
KSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0
cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQo
KSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQot
ICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6
ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Ny
b2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkp
OwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0j
ZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJl
dHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBS
ZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5p
c0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0K
LUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3Qu
bW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXco
JnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVu
ZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5k
ZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17
Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
KCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVy
ZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5k
ZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAg
IHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0lu
dChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRl
bnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Ny
b2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENv
bnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5j
b250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXpl
LndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0
ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwot
Ci0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQot
ewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29u
KTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xs
YmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRG
b3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNM
YXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0g
ICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVy
TGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlv
biB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBk
YXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVu
dDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3du
TW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVy
biByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQo
KTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJv
eC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50
UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAg
ICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdo
dCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZC
YXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYm
ICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhh
dmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9
IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJl
c2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9
IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAg
SW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAg
ICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMg
c3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAg
ICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBp
ZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgp
IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZv
aWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsg
Y29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBi
YXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAg
aWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVm
dCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3Qu
bWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6
ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVj
dDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXpl
KSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAg
ICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsg
Ym90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5o
ZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2
b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3Ju
ZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFy
c0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xs
Q29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tu
ZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAg
ICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3Ms
IHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0g
ICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJl
bmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkp
IHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJl
Y3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJU
KGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwg
dGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxS
ZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9j
YXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAg
ICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5k
ZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewot
ICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAg
ICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAg
bV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBz
Y3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxi
YXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3Jv
bGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1l
bnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jv
b3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdl
bnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxT
Y3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFT
U0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFs
UmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBo
YXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYm
IGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5
bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxl
KQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIp
LmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3Jl
YXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmll
bnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkK
LSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBh
Z2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVs
ZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFy
PiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJh
ciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVT
Y3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVu
ZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3Jv
bGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAg
bV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0g
c2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdG
b3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhv
cml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNl
IHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9
Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBz
Y3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0
aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFy
KSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVs
YXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3Rp
Y2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxl
QXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgot
ICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNl
IG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUg
dGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAg
IG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFy
LT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFi
bGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewot
ICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNl
c3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsg
bmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBw
ZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFu
Y2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJl
eW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxl
bWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJv
eCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gs
IGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxz
T3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9s
bGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9j
a1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25z
dAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVz
c2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5k
ZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93
ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0g
ICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zv
cm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFz
QmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3Mp
OwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAg
ICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRp
b24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8
ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwot
ICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dz
T3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxl
dmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZs
b3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYm
IChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hv
dWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZz
ZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewot
ICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwot
ICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAg
IHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkK
LXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikg
ewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsK
LSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwot
ICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9s
bENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3Jv
bGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRG
cmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lk
dGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Ny
b2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmICht
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+
KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0
ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
LSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXll
cjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6
b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkp
OwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJu
IG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVu
c2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJU
KGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9z
Y3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dM
ZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dC
b3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJm
bG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAg
ICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAg
ICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0g
Ym94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxh
YmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1f
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRh
bE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewot
ICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNP
dmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAg
IHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJu
IHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkp
OwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBv
dmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxi
YXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYm
ICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19
Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZs
b3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29s
IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92
ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAg
ICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBz
byB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNl
KCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpv
bnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBo
YXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAg
Ly8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRv
IGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9s
bGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBt
X2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFy
ICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNj
cm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93
KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxh
eSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29s
IGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhh
c0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFu
Z2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFz
VmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChh
dXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hh
bmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jp
em9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhh
c1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7
Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0
eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICgh
bV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxh
eW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5z
Y3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0
aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRC
bG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91
dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChw
YXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQot
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2Fj
aGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1
cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7
Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgp
KTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0
aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0
aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAg
ICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwot
ICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7
Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
LCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQs
IG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFy
ZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBj
b2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwot
ICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQg
aW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNl
dHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAg
ICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3Np
dGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xs
IG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0g
ICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8v
IEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9u
bHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAv
LyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNl
cnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAg
ICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5k
cy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAg
ICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAg
ICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAg
ICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7
Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQo
KSkpOworICAgIH0KIAotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBzZXROZWVk
c0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpv
bnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQg
bWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFy
Z2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5C
b3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBl
OjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJl
bmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+
dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAgICAgICBiYXNlSGVpZ2h0ID0g
YmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCAr
IGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAg
ICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICBzZXROZWVkc1Bvc3RM
YXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwog
Ci0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1
NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRv
IGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxh
eWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwogCi0g
ICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigp
KSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0
byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVy
Qm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwogCi0gICAgaWYgKHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gcmVuZGVy
Qm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKKyAgICBib29s
IGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKIAotICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Cisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBi
b3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4
WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3Ju
ZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNv
cm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNv
cm5lclNpemUgfTsKKyAgICB9OwogCi0gICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsK
KyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJS
ZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgfQog
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0CitTdHJpbmcgUmVuZGVyTGF5ZXI6
OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4K
LSAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLSNlbmRpZgorICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgi
X3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcg
Jywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIHJldHVybiB0
cnVlOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBo
YXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRy
b2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KQotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0g
ICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIi
X3MpOwogCi0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBh
aW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkg
d2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMg
dGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8v
IHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRo
YXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBw
YWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVy
IHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVu
LiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBz
ZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0
IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092
ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQg
PSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhl
IHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAg
ICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJh
ciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9j
YWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dD
b250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMg
YmxlbmQgbW9kZSJfcyk7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVu
Y2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0g
ICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworICAg
IGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0
ZXMgYmxlbmRpbmciX3MpOwogCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0
U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICAgICAg
c3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJl
YW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRv
IGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KLSAgICBpZiAocGFp
bnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNl
dDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi0gICAgICAgIGFkanVzdGVkUGFp
bnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7Ci0KLSAgICAvLyBNb3Zl
IHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFu
ZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lk
Z2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVu
IHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRp
b25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShh
ZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBz
Y3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1f
aEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFn
ZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBo
YXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCi0g
ICAgLy8gZWRnZSBvZiB0aGUgYm94LgotICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotICAgIAotICAgIC8vIFBhaW50IG91ciBy
ZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgot
ICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0
KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVy
OjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK0ludFNpemUgUmVu
ZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOwot
ICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIWFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNvbnRleHQuaW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikg
ewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9m
ZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBz
aW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICgh
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCku
cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7CisgICAgYXV0byByZXNpemVyUmVj
dCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7CisgICAgYXV0byByZXNpemVDb3Ju
ZXIgPSByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNv
cm5lcigpOworICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVzaXplQ29ybmVyOwogfQogCi12b2lk
IFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK2ludCBSZW5kZXJM
YXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29y
bmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVm
KCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7
Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsK
LSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1Jl
cygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxl
YWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VM
b1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6
ZSgpOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1f
c2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFdpZHRoKCk7CiAKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgIGNvbnRleHQuc2F2ZSgpOwot
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJS
ZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVy
UmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKLSAgICAgICAgY29u
dGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAgICAgIGlmIChyZXNpemVDb3Ju
ZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFn
ZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKLSAgICAgICAg
Y29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEZsb2F0UmVjdCBpbWFn
ZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJl
Y3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6
ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICBjb250
ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7CisgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICBMYXlvdXRSZWN0
IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICByZXR1cm4gcm91
bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WCgpIC0gb3ZlcmZsb3dSZWN0LngoKSk7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCkKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgTGF5
b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Ci0gICAgcmVzaXplckFic1Jl
Y3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFs
aWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAg
ICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVy
QWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNp
emVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAK
LSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBp
ZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxs
IGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBp
ZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAg
ICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJn
ZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUo
TGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWln
aHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50
OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2Vy
Q29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAg
QVNTRVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFkoKSAt
IG92ZXJmbG93UmVjdC55KCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNp
emVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CkBAIC00MTc3LDQyICsyODI0LDYg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2Nh
bFBvaW50KSBjb25zdAogICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVy
LmNvbnRhaW5zKGxvY2FsUG9pbnQpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3Zl
cmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2Nh
bFBvaW50KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwotICAgIGlmIChyZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7Ci0gICAgICAgIGlmIChy
ZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3Jv
bGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCi0gICAgaWYgKG1f
dkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX2hCYXIgJiYgbV9o
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAg
ICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQotewotICAgIHJldHVybiBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwot
fQotCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91dFNpemUmIHN1YnBpeGVsT2Zm
c2V0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3Ms
IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4
dCogZXZlbnRSZWdpb25Db250ZXh0KQogewogICAgIE92ZXJsYXBUZXN0UmVxdWVzdE1hcCBvdmVy
bGFwVGVzdFJlcXVlc3RzOwpAQCAtNDIyOCwxNyArMjgzOSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJlc3VsdChmYWxzZSk7CiB9CiAK
LXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRC
ZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQot
ewotICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbyh0aGlzLCBlbmNsb3Np
bmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRy
ZWVQYWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBQYWlu
dExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7Ci0KLSAgICBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpj
bGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Is
IGNvbnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVzQ2xpcHBpbmdSdWxlIHJ1bGUp
CiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyNjEsNyArMjg2MSw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92ZXJmbG93LiBUaGUgY29uZGl0
aW9uIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBzIGlzIHRoYXQgdGhlIG92ZXJm
bG93IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFpbmluZyBibG9jayBjaGFpbiBz
byB3ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVuZGVyTGF5ZXIqIGxheWVyID0g
cnVsZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRoaXMgOiBwYXJlbnQoKTsgbGF5
ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAocGFpbnRCZWhh
dmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250
ZW50KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIGJv
b2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKSA/IGxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIDogZmFsc2U7
CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpD
b21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGF5
ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJlbmRlcmVyKCkuc3R5
bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNvbnRhaW5pbmdCbG9j
a0NoYWluKCpsYXllcikpIHsKQEAgLTQ0NjMsNyArMzA2NCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Ym9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkaXNhYmxlIHN1YnBp
eGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMgb3Igc3ViZnJhbWVzIG9uY2Ugd2Ug
c2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFkLgotICAg
IGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8IChyZW5kZXJlcigpLmZyYW1l
KCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBz
Y3JvbGxhYmxlQXJlYSgpID8gc2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSA6IGZhbHNlOworICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB8fCAo
cmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAgICBib29sIGlzWm9vbWluZyA9
ICFwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yKCk7CiAg
ICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcg
fHwgaXNab29taW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9udHMgPSBjb250ZXh0LnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cygpOwpAQCAtNDc2Niw4ICszMzY4LDEwIEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBwYWludExpc3QocG9zaXRpdmVaT3JkZXJMYXll
cnMoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3Mp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAm
JiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JG
cmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
byk7CisgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBpZiAoaXNQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Njcm9sbGJh
cnMoKSkKKyAgICAgICAgICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMo
bGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbyk7CisgICAg
ICAgIH0KIAogICAgICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAgICAgICAgICAgLy8gV2hl
biB3ZSBjYWxsZWQgY29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwgcGFpbnREaXJ0eVJlY3Qg
d2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4KQEAgLTUyMzcsMTEgKzM4
NDEsMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZENsaXBwaW5nTWFza0ZvckZyYWdt
ZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXIKIAogdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgbG9jYWxQYWludGluZ0luZm8pCiB7CisgICAgQVNTRVJUKG1fc2Nyb2xsYWJsZUFyZWEp
OworCiAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVyRnJhZ21lbnRzKSB7CiAg
ICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5m
bywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAgIHBhaW50T3ZlcmZsb3dD
b250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5s
YXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRp
bmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBhaW50
T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQb2ludChm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24oKSArIGxv
Y2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCiAgICAgICAgICAgICBzbmFwcGVkSW50
UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVlKTsKICAgICAgICAgcmVz
dG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0KTsKICAgICB9CkBAIC01MjgwLDcgKzM4ODYsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRU
ZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
CiAgICAgICAgICAgICAgICAgYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3Quc2NhbGUoc2NhbGVG
YWN0b3IpOwogICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KGFic29sdXRlTGF5b3V0
Vmlld3BvcnRSZWN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBoaXRUZXN0QXJlYS5p
bnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKKyAgICAgICAgICAgIGhpdFRlc3RBcmVh
LmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJl
Y3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKICAgICB9
CiAKICAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0TGF5ZXIodGhpcywgbnVs
bHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVzdExvY2F0aW9uLCBmYWxz
ZSk7CkBAIC01NTExLDcgKzQxMTcsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udAogICAgICAg
ICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAKICAgICBMYXlvdXRQb2ludCBsb2Nh
bFBvaW50OwotICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CisgICAgaWYg
KGNhblJlc2l6ZSgpICYmIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBs
b2NhbFBvaW50KSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVz
dWx0LCBsb2NhbFBvaW50KTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNTU4Niwz
NSArNDE5Miw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAg
aWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0o
Y29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0
KSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkpIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJC
b3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOwot
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5l
cigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVp
Z2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIH0KLSAgICAgICAgSW50U2l6
ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgICAgICByZXR1cm4gSW50UmVjdCB7
IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQg
LSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgIH07Ci0KLSAg
ICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5h
dChpKTsKLSAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5G
cmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6
ZXIpOwotICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRU
ZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9j
YXRpb24ucm91bmRlZFBvaW50KCkpKSB7Ci0gICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0
b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3Vu
ZHMubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0
UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJsZSogek9mZnNldCkKIHsK
QEAgLTYwNzUsOSArNDY1MiwxMiBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxl
Y3Rpb25HYXBzKCkKICAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxh
YmxlQXJlYSgpOworCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNC
b3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOwotICAgIGlmIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQor
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpICYmICghc2Nyb2xsYWJsZUxheWVyIHx8ICFzY3JvbGxhYmxlTGF5ZXItPnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpKQogICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0
cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KICAgICBpZiAocmVuZGVy
ZXIoKS5oYXNDbGlwKCkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhN
RTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KQEAgLTYzNzQsMjEgKzQ5NTQsNiBAQCBib29s
IFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFj
a2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1HcmFwaGljc0xheWVyKiBS
ZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNr
aW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGlj
c0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBu
dWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNmb3JtKE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogewogICAgIGJvb2wgcGFp
bnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygpLT5wYWludHNJbnRvV2lu
ZG93KCk7CkBAIC02NDE5LDExICs0OTg0LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQXBw
bHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgT3AKICAg
ICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxhZzo6UGFpbnRpbmdDb21w
b3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxpbmdN
YXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93
KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6
YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2Fs
UmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2Vs
ZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NTQ3LDkgKzUxMDcsMTAgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0CiAgICAgaWYgKCFp
c05vcm1hbEZsb3dPbmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuIGhh
c092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgfHwgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpCi0gICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJsZVJvdygpCisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEgJiYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgfHwgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1RhYmxl
Um93KCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0NhbnZhcygpCiAgICAgICAgIHx8IHJlbmRl
cmVyKCkuaXNWaWRlbygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNFbWJlZGRlZE9iamVjdCgp
CkBAIC02NjY0LDcgKzUyMjUsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnMoKSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFj
a2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJs
ZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9z
Y3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJM
YXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkg
Y29uc3QKQEAgLTY2NzQsNyArNTIzNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlO
b25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFo
YXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2Vk
KCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5k
ZXJSZXBsYWNlZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhh
c092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2OTksMzggKzUyNjAsNiBAQCBib29sIFJlbmRlckxheWVy
Ojppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25z
dAogICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25j
ZXB0LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAg
IE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8v
IFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0
LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5
IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092
ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5l
c0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8
fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJh
cikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dD
bGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRp
Y1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8g
V2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2
aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5v
dGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0g
ICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYg
b2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9
IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQot
ICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBv
bGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0g
T3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0g
ICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJs
ZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5n
ZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
ICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02
NzUxLDYgKzUyODAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiAgICAgfQog
CisgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXll
ciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxp
dHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQg
YWxvbmcgd2l0aCB0aGUgcmVzdC4KICAgICBpZiAob2xkU3R5bGUpIHsKQEAgLTY3NjIsMTggKzUy
OTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8v
IFZpc2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAg
ICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQg
JiYgbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAgfQogCi0gICAgaWYgKHJl
bmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVo
YXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7
Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVu
aXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJx
dWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKLSAgICAgICAgbV9tYXJxdWVl
ID0gbnVsbHB0cjsKLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0
eWxlKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLT5jcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICB9CiAgICAg
Ly8gT3ZlcmxheSBzY3JvbGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIgc2VsZi1wYWludGluZyBz
byB3ZSBuZWVkCiAgICAgLy8gdG8gcmVjb21wdXRlIHRoZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhh
dmUgYmVlbiB1cGRhdGVkLgogICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CkBAIC02Nzg4
LDEzICs1MzE1LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgfQogICAgIAogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNj
cm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hC
YXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxiYXJTdHlsZUNoYW5nZWQoKTsKKyAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgfQogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1
LDk4ICs1MzQwLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQot
ewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRv
SGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJh
bWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVz
dCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zp
c2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAot
ICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewot
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBh
ZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlm
IChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZv
ciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAg
ICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50
IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJM
RShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCog
YWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAg
ICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNj
cm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVs
bHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkg
OiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDIxLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
TGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVu
aXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNj
cm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0
aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIo
KTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkp
IHsKQEAgLTcwMDQsNiArNTQ1NywzMSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJz
QWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmls
dGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJl
YSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgIGNs
ZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICBpZiAoIWJv
eC5yZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgY2xlYXJMYXll
clNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVM
YXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5jb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNy
ZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVTZWxmUGFpbnRpbmdM
YXllcigpOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsYmFyU3R5bGVDaGFuZ2VkKCk7
CisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICBt
X3Njcm9sbGFibGVBcmVhLT51cGRhdGVSZXNpemVyU3R5bGUoKTsKK30KKwogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5
ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUg
bW9kZSwKQEAgLTcwMzgsNyArNTUxNiw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5
ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFy
ZW50ID0gbGF5ZXIucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1
cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFu
c3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdApAQCAtNzA2MCw2ICs1NTM4LDEx
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNpbXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xl
UGFpbnRGcmVxdWVuY3lUcmFja2luZyB7IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCku
bGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2
ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHJlYXNvbikKIHsKQEAgLTcyNjIsOSArNTc0NSwx
MCBAQCBzdGF0aWMgdm9pZCBvdXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZShUZXh0U3RyZWFt
JiBzdHJlYW0sIGNvbnN0IFdlYkNvcmU6OlJlbgogICAgICAgICByZXR1cm4gIi0iOwogICAgIH07
CiAKKyAgICBib29sIGxheWVySGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSA/IGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpIDogZmFsc2U7CiAgICAgc3RyZWFtIDw8IGNvbXBvc2l0ZWRQYWlu
dGluZ0Rlc3RpbmF0aW9uU3RyaW5nKCk7CiAgICAgc3RyZWFtIDw8IChsYXllci5oYXNDb21wb3Np
dGluZ0Rlc2NlbmRhbnQoKSA/ICJjIiA6ICItIik7Ci0gICAgc3RyZWFtIDw8IChsYXllci5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSA/ICJzIiA6ICItIik7CisgICAgc3RyZWFtIDw8
IChsYXllckhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA/ICJzIiA6ICItIik7CiAgICAg
c3RyZWFtIDw8IChsYXllci5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkgPyAidCIgOiAiLSIpOwog
CiAgICAgc3RyZWFtIDw8ICIgIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgK
aW5kZXggYTE1ZDUxYmZmZjVjLi4yNjg4YzBkMWZjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJp
Z2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAg
LTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQ
dHIuaCIKICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFJlbmRlckdlb21l
dHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOwogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOworY2xhc3MgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTsKIGNsYXNzIFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwog
Y2xhc3MgUmVuZGVyU2Nyb2xsYmFyUGFydDsKQEAgLTE0MywxNyArMTQ0LDIxIEBAIHN0cnVjdCBT
Y3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyB7CiB1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2
NF90OwogCiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
cik7Ci1jbGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7Citj
bGFzcyBSZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxh
eWVyKTsKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
ckJhY2tpbmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBm
cmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIAogICAgIGV4cGxpY2l0IFJl
bmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJM
YXllcigpOwogCisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEo
KSBjb25zdDsKKyAgICBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBlbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCk7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIENhbGxlZCBi
ZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51bGxlZCBvdXQu
CiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyMjgsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFnKSB7IG1fbGF5
ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGRlc3Ryb3koKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9wYWdh
dGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21wb3Np
dGluZyB7CkBAIC00MDEsNiArNDA5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCByZXBhaW50SW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKIAorICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsK
KwogICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIGxheWVyIGNvbnRlbnRzIG5lZWQgdG8gYmUgcmVw
YWludGVkLiBPbmx5IGhhcyBhbiBlZmZlY3QKICAgICAvLyBpZiBsYXllciBjb21wb3NpdGluZyBp
cyBiZWluZyB1c2VkLgogICAgIHZvaWQgc2V0QmFja2luZ05lZWRzUmVwYWludChHcmFwaGljc0xh
eWVyOjpTaG91bGRDbGlwVG9MYXllciA9IEdyYXBoaWNzTGF5ZXI6OkNsaXBUb0xheWVyKTsKQEAg
LTQxMSw4ICs0MjEsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURp
ZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJx
dWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBi
b29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5n
TGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMs
MTA3ICs0NDEsMjkgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZp
c2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25z
dCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3Qg
ZmluYWw7Ci0KICAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgc2Nyb2xsSGVp
Z2h0KCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2lu
dCYpOwotCi0gICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3Jv
bGwgdGhlaXIgb3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IElu
dFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwot
Ci0gICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRp
b24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNj
cm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNv
bnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwogCiAgICAgdm9pZCBz
Y3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OwogICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0
ZWRTY3JvbGw6Ok5vKTsKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwogCiAgICAgLy8gVGhl
c2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGlu
dCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkp
LCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9
Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xs
T2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNj
cm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgdm9pZCBzY3JvbGxUb1hPZmZz
ZXQoaW50IHgpOworICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KTsKIAogICAgIC8vIFJl
dHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJsZS4KICAg
ICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIgd2hlbiBj
YWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFibGVBcmVhLgog
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OwogCi0gICAgdm9pZCBhdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7Ci0KICAgICAv
LyAiYWJzb2x1dGVSZWN0IiBpcyBpbiBzY2FsZWQgZG9jdW1lbnQgY29vcmRpbmF0ZXMuCiAgICAg
dm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwg
Ym9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMmKTsKIAot
ICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0
dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIoYm9vbCk7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKLQotICAg
IFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0g
ICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLQotICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3Jv
bGxiYXIoKTsgfQotICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9Ci0KLSAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB2ZXJ0aWNhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVhIG92ZXJy
aWRlcwotICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQotCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQo
KTsgfQotICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5h
bDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQgdXBkYXRlU25hcE9mZnNl
dHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9Ci0K
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5h
bDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKLSAgICB2
b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmlu
YWw7Ci0jZW5kaWYKLQotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXllciBjb3VsZCBk
byB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hldGhlciB0aGVyZSBpcyBh
Y3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgotICAgIGJvb2wgY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0OwotICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZXJlIGlzIGFjdHVh
bGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0byBiZSB1cC10by1kYXRl
KS4KLSAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0KLQotICAgIGludCB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVD
b3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwogCi0gICAgdm9pZCBwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFs
c2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVz
aXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QpOwotCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CkBAIC01NTYsOSArNDg2LDYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91
dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5
ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVk
ZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC02
MzgsNiArNTY1LDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3Rv
ckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
cykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBj
b25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0
cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5n
Um9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTksNyArNjI4LDYgQEAgcHVibGljOgogICAg
ICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8
UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVs
bHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xp
cFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5
cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNo
b3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92
ZXJmbG93Q2xpcCkKQEAgLTc4NSwxMSArNzEzLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3Rh
dGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBv
c2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5
b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAg
ICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5z
Zm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNm
b3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OSwxNiArNzgyLDYg
QEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAg
IHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29s
IGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0gICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3I7IH0KLQogICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFy
ZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5
bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdT
Y29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KICAgICBPcHRpb25h
bDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQpAQCAtODg2LDExICs3OTksNiBAQCBwdWJsaWM6
CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAg
ICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29u
c3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRD
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAg
IGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExh
eWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOSw4ICs4MjcsNiBAQCBwdWJsaWM6
CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNv
bnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2ltdWxh
dGVGcmVxdWVudFBhaW50KCk7CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsgfQog
CkBAIC05MzEsNyArODM3LDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdpb25J
bnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5vbkNv
bXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVn
aW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAogcHJp
dmF0ZToKIApAQCAtMTAxMSw5ICs5MTcsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxh
ZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAw
LAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwgMSwK
QEAgLTEwMzksOCArOTQyLDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwogCi0gICAgU2Nyb2xsT2Zm
c2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAg
ICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0
aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDU0LDYgKzk1NSw4IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllckZpbHRlcnMoKTsKICAgICB2b2lkIGNsZWFyTGF5ZXJGaWx0ZXJz
KCk7CiAKKyAgICB2b2lkIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgUmVuZGVy
TGF5ZXJGaWx0ZXJzKiBmaWx0ZXJzRm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9u
U2V0PFBhaW50TGF5ZXJGbGFnPikgY29uc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzZXR1cEZp
bHRlcnMoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIExheWVyUGFpbnRpbmdJ
bmZvJiwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0
RnJvbVJvb3QsIE9wdGlvbmFsPExheW91dFJlY3Q+JiByb290UmVsYXRpdmVCb3VuZHMpOwogICAg
IHZvaWQgYXBwbHlGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgY29uc3QgTGF5
ZXJGcmFnbWVudHMmKTsKQEAgLTExMDAsNjQgKzEwMDMsMTMgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBib29sIGhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmLCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiwgSGl0VGVzdEZpbHRlcikgY29uc3Q7CiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyLCBib29sJiBp
bnNpZGVDbGlwUmVjdCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRz
KGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9p
bnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RUcmFu
c2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5
ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LAogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJs
ZSogek9mZnNldCA9IG51bGxwdHIpOwogCiAgICAgYm9vbCBsaXN0QmFja2dyb3VuZElzS25vd25U
b0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheWVyTGlzdCYsIGNvbnN0IExheW91dFJlY3QmKSBjb25z
dDsKIAotICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB2b2lkIGNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci0KLSAgICBib29sIGhhc0hvcml6
b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNv
bnN0OwotCi0gICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKLQogICAgIGJv
b2wgc2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsYWJs
ZUFyZWEgaW50ZXJmYWNlCi0gICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
JiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5l
clJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOwotICAg
IEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgSW50
UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9s
bGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOwotCi0gICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJl
Y3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVD
b250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1v
dW50KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbklu
VmlldygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25z
dCBmaW5hbDsKLSAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5z
aWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzVXNlclNjcm9sbElu
UHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NS
T0xMX1NOQVApCi0gICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7
Ci0jZW5kaWYKLSAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29u
c3QgZmluYWw7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICB2b2lkIHVucmVnaXN0
ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICAvLyBO
T1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3Jv
bGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7Ci0KLSAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBj
b25zdDsKLSAgICAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3Zl
cmZsb3cpOwotICAgIAogICAgIGJvb2wgYWxsb3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0OwogCiAg
ICAgdm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwpAQCAt
MTE5NywxNCArMTA0OSw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFi
c29sdXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBh
Y2NvdW50CiAgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBv
aW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQg
Y2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7
Ci0KICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9z
aXRpbmdEZXNjZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBi
OyB9CkBAIC0xMjEzLDExICsxMDU3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEluZGlyZWN0
Q29tcG9zaXRpbmdSZWFzb24oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiByZWFzb24pIHsgbV9p
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlYXNvbik7
IH0KICAgICBib29sIG11c3RDb21wb3NpdGVGb3JJbmRpcmVjdFJlYXNvbnMoKSBjb25zdCB7IHJl
dHVybiBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb247IH0KIAotICAgIExheW91dFVuaXQgb3Zl
cmZsb3dUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7
Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92
ZXJmbG93UmlnaHQoKSBjb25zdDsKLQogICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7
CiAgICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICAgICAgSW50UmVjdCB2
ZXJ0aWNhbFNjcm9sbGJhcjsKQEAgLTEyMzAsOCArMTA2OSw2IEBAIHByaXZhdGU6CiAgICAgfTsK
ICAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsK
IAotICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYg
bG9jYWxSZWN0KSBjb25zdDsKLQogICAgIE9wdGlvblNldDxDb21wb3NpdGluZz4gbV9jb21wb3Np
dGluZ0RpcnR5Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7
CkBAIC0xMjQ4LDcgKzEwODUsNiBAQCBwcml2YXRlOgogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdo
ZXRoZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVz
ZSByZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KICAgICBib29sIG1faW5SZXNpemVNb2RlIDog
MTsKIAotICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9p
c1NlbGZQYWludGluZ0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGlu
ZyBkZXNjZW5kYW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcg
cGFpbnRpbmcuIFRoaXMgY2FuIGxlYWQgdG8KQEAgLTEyNjAsMTQgKzEwOTYsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50
aW5nIHRoaXMgbGF5ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1f
cGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlm
IHdlIGFyZSBwYWludGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93
UmVsYXlvdXQgOiAxOwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFp
bnRTdGF0dXMKIAogICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAg
ICBib29sIG1faGFzVmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2Vu
ZGFudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAx
OwotICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9p
c0ZpeGVkSW50ZXJzZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhl
ZCA6IDE7CiAKQEAgLTEyNzcsOCArMTExMSw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc0Nv
bXBvc2l0aW5nRGVzY2VuZGFudCA6IDE7IC8vIEluIHRoZSB6LW9yZGVyIHRyZWUuCiAKICAgICBi
b29sIG1faGFzQ29tcG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzIDogMTsKLSAgICBib29s
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yIDogMTsgLy8gSW4gdGhlIGxheWVyLW9y
ZGVyIHRyZWUuCi0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgOiAx
OwogCiAgICAgYm9vbCBtX2hhc1RyYW5zZm9ybWVkQW5jZXN0b3IgOiAxOwogICAgIGJvb2wgbV9o
YXMzRFRyYW5zZm9ybWVkQW5jZXN0b3IgOiAxOwpAQCAtMTI4OCwxNyArMTEyMCw2IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5l
ZE5vdENvbXBvc2l0ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9z
aXRlZFJlYXNvbgogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKLSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgOiAxOwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzIDogMTsKLSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAj
aWYgQVNTRVJUX0VOQUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDog
MTsKICNlbmRpZgpAQCAtMTMzOSwyNSArMTE2MCwxMSBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBs
YXllcidzIHdpZHRoL2hlaWdodAogICAgIEludFNpemUgbV9sYXllclNpemU7CiAKLSAgICBTY3Jv
bGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOwotICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9u
PiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKLQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQg
b2Ygb3VyIHNjcm9sbGVkIGFyZWEuCi0gICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAv
LyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMu
Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1f
dkJhcjsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDbGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHND
YWNoZTsKLSAgICAKLSAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7
CiAKICAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxT
Y3JvbGxpbmdTY29wZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CiAgICAgTWFya2FibGU8U2Ny
b2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFy
cXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2Fj
aGVkIG5vcm1hbCBmbG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3
aXRoIHN0YXRpYyBsZWZ0L3RvcCB2YWx1ZXMuCiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGlu
ZVBvc2l0aW9uOwogICAgIExheW91dFVuaXQgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2
NywxMCArMTE3NCw2IEBAIHByaXZhdGU6CiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5k
ZWQgdG8gbWFueSByZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJl
bmRlclB0cjxSZW5kZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMg
dG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVy
UHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBl
bmNsb3NpbmcgUmVuZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBp
cyAwIGlmIHdlIGFyZSBub3QgcGFnaW5hdGVkLgogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1f
ZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyOwogCkBAIC0xMzc4LDYgKzExODEsNyBAQCBwcml2YXRl
OgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyRmlsdGVycz4gbV9maWx0ZXJzOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2luZzsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4gbV9zY3JvbGxhYmxlQXJl
YTsKICAgICAKICAgICBQYWludEZyZXF1ZW5jeVRyYWNrZXIgbV9wYWludEZyZXF1ZW5jeVRyYWNr
ZXI7CiB9OwpAQCAtMTQ1MCw2ICsxMjU0LDMgQEAgdm9pZCBzaG93UGFpbnRPcmRlclRyZWUoY29u
c3QgV2ViQ29yZTo6UmVuZGVyTGF5ZXIqKTsKIHZvaWQgc2hvd0xheWVyVHJlZShjb25zdCBXZWJD
b3JlOjpSZW5kZXJPYmplY3QqKTsKICNlbmRpZgogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OlJlbmRlckxheWVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSYgYXJlYSkgeyByZXR1cm4gYXJlYS5pc1JlbmRlckxheWVy
KCk7IH0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMTZjYWRlODA1YWE5Li40NTkx
NzNlZmVjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySUZyYW1lLmgiCiAj
aW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRW1iZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZGVvLmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5n
OjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3Qg
UmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVk
QmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxl
c0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1
c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2Ug
fD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7Cisg
ICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9
IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisg
ICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JW
ZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVy
YWdlOwogfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1
c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpCiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRp
bGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwogICAgIH0KIAotICAgIGlmIChtX293bmluZ0xheWVy
Lmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNM
YXllcikgeworICAgIGlmIChtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHRpbGVk
QmFja2luZyA9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT50aWxlZEJhY2tpbmcoKSkgewogICAg
ICAgICAgICAgYXV0byB0aWxlQ292ZXJhZ2UgPSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdD
b3ZlcmFnZShtX293bmluZ0xheWVyKTsKICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VGls
ZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7CkBAIC03NzUsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKQogc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21w
b3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBmb3IgKGF1dG8qIGN1
cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAo
Y3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQorICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgKGN1cnItPnNjcm9s
bGFibGVBcmVhKCkgJiYgY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
OTcyLDcgKzk3NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0
aW9uKGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzCiAgICAgICAgIGxheWVyQ29u
ZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc2NlbmRhbnRzQ2xpcHBp
bmdMYXllciA9IGZhbHNlOwotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293
bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICBib29sIHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpICYm
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpOwogCiAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CiAgICAgICAg
IC8vIElmIGl0J3Mgc2Nyb2xsYWJsZSwgaXQgaGFzIHRvIGJlIGEgYm94LgpAQCAtMTIyNywxMCAr
MTIzMCwxMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdy
YXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBwYXJlbnRHcmFwaGlj
c0xheWVyUmVjdCA9IHNuYXBwZWRHcmFwaGljc0xheWVyKGNsaXBwaW5nQm94T2Zmc2V0LCBjbGlw
cGluZ0JveC5zaXplKCksIGRldmljZVNjYWxlRmFjdG9yKCkpLm1fc25hcHBlZFJlY3Q7CiAgICAg
fQogCi0gICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpKSB7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEo
KSAmJiBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9z
aXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAg
ICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94
KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9
IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICAgICAgU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVk
QW5jZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxP
ZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChz
Y3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBv
c2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNj
cm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2Nyw3ICsxMzczLDExIEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXll
ciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5z
ZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFy
ZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxh
eWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94
LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3Jv
bGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAg
ICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJl
YSgpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChz
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5
MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5k
ZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9m
ZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNp
emUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdo
dCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAg
ICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBw
YWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUwMiwxNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xs
T2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5
ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byog
c2Nyb2xsYWJsZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNT
RVJUKHNjcm9sbGFibGVBcmVhKTsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+Y3VycmVudFNj
cm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGlu
ZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5
ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAg
ICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRS
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9s
bGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29u
dGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIg
dGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNj
cm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9u
OjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VS
VChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5
LDcgKzE5MjQsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFj
a0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlw
cGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAg
ICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXll
ciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xs
T2Zmc2V0KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5n
TGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRC
b3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0
Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjgsMTYgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250
YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JT
Y3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisg
ICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+
aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAog
ewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVy
dGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9s
bENvcm5lckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDUsMTYgQEAgYm9vbCBSZW5kZXJM
YXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICgh
aXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFz
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVy
UmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29y
bmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5n
TGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2Fs
U2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxT
Y3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3Jv
bGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJh
cik7CiB9CiAKQEAgLTIwNjUsMTAgKzIwOTAsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwK
ICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3Jv
bGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7
CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Ny
b2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNj
cm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpv
bnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdl
ZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxl
QXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxi
YXIpOworICAgICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAg
ICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJh
ckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIx
MDMsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNM
YXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmlu
Z0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVy
LT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91
bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiArMjEyOSwxNSBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAg
ICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hS
ZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0
cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVy
LT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChz
Y3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250
ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXll
ciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxh
eWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYm
ICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0Nv
bnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNl
c0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJG
b3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTE2LDEwIEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3Qm
IHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBsYXll
ckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJE
aXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJl
cigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJw
aXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNj
cm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9s
bGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUoc2Ny
b2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Nj
cm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0
LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjUsOCBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhp
Y3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAg
ICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZv
LCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAg
aWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAg
bGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFy
cyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZl
Y3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBAIC0zNDIwLDE3ICszNDU0
LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3Zl
cmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNz
TGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRT
Y3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRp
cnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAg
ICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFy
KCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09
IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhciht
X293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7Cisg
ICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRT
Y3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBk
aXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9s
bENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVy
UmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29y
bmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0
LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91
dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5s
b2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAg
ICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNm
b3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihj
b250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwg
dHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCku
cGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBjZmM0YWIxNTI4ODYuLjUyMzU0
NTYxMzlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCkBAIC0xMzk3LDcgKzEzOTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3Rvcgog
ICAgICAgICBpZiAobGF5ZXJCYWNraW5nLT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXJzKCkgJiYg
bGF5ZXJCYWNraW5nLT5hbmNlc3RvckNsaXBwaW5nU3RhY2soKS0+aGFzQW55U2Nyb2xsaW5nTGF5
ZXJzKCkpCiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sYXllcnNDbGlwcGVkQnlTY3JvbGxl
cnMtPmFwcGVuZCgmbGF5ZXIpOwogCi0gICAgICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYm
IGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkKICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm92ZXJmbG93U2Nyb2xsTGF5ZXJzLT5hcHBl
bmQoJmxheWVyKTsKIAogICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFu
dHMoKTsKQEAgLTIwMDEsNyArMjAwMiw3IEBAIHN0YXRpYyBBbmNlc3RvclRyYXZlcnNhbCB0cmF2
ZXJzZUFuY2VzdG9yTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgRnVuY3RpCiAKIHN0
YXRpYyBib29sIGNyZWF0ZXNDbGlwcGluZ1Njb3BlKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikK
IHsKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwor
ICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVh
KCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKIH0KIAogc3RhdGljIFZlY3Rv
cjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGluZ1Njb3Bl
cyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIp
CkBAIC0yMDA5LDcgKzIwMTAsNyBAQCBzdGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5
ZXJBbmRCb3VuZHM+IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGNvbnN0IFJlbgogICAgIFZlY3Rv
cjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBjbGlwcGluZ1Njb3BlczsKICAgICBj
bGlwcGluZ1Njb3Blcy5hcHBlbmQoeyBjb25zdF9jYXN0PFJlbmRlckxheWVyJj4ocm9vdExheWVy
KSwgeyB9IH0pOwogCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFi
bGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1
cm4gY2xpcHBpbmdTY29wZXM7CiAKICAgICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGxheWVyLCBb
Jl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaW5Db250YWluaW5nQmxv
Y2tDaGFpbiwgYm9vbCkgewpAQCAtMjA0MSw3ICsyMDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcChMYXllck92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNv
bnN0IFIKICAgICBhdXRvIGNsaXBwaW5nU2NvcGVzID0gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMo
bGF5ZXIsIHJvb3RSZW5kZXJMYXllcigpKTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3Q7Ci0g
ICAgaWYgKGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYg
KGxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAgLy8gQ29tcHV0ZSBhIGNsaXAg
dXAgdG8gdGhlIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nIGFuY2VzdG9yLCB0aGVuIGNvbnZlcnQgaXQg
dG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIGF1dG8mIHNjcm9sbGluZ1Njb3BlID0g
Y2xpcHBpbmdTY29wZXMubGFzdCgpOwogICAgICAgICBhdXRvJiBzY29wZUxheWVyID0gc2Nyb2xs
aW5nU2NvcGUubGF5ZXI7CkBAIC0yODg5LDcgKzI4OTAsNyBAQCBWZWN0b3I8Q29tcG9zaXRlZENs
aXBEYXRhPiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBwaW5nU3Rh
Y2soYwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYg
YW5jZXN0b3JMYXllci5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYg
YW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaGF2ZU5vblNjcm9sbGFibGVDbGlwcGlu
Z0ludGVybWVkaWF0ZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2hOb25TY3JvbGxh
YmxlQ2xpcCgqY3VycmVudENsaXBwZWRMYXllciwgYW5jZXN0b3JMYXllcik7CiAgICAgICAgICAg
ICAgICAgICAgIGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllciA9IGZh
bHNlOwpAQCAtMjkzMyw3ICsyOTM0LDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmQKIAogICAg
IFNjcm9sbGluZ05vZGVJRCBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIHRyYXZl
cnNlQW5jZXN0b3JMYXllcnMoKmVuY2xvc2luZ0xheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXIm
IGFuY2VzdG9yTGF5ZXIsIGJvb2wgaXNDb250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCAvKmlzUGFp
bnRPcmRlckFuY2VzdG9yKi8pIHsKLSAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4g
JiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAg
ICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxh
YmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBjb250YWluZXJTY3JvbGxpbmdO
b2RlSUQgPSBsYXllclNjcm9sbGluZ05vZGVJRChhbmNlc3RvckxheWVyKTsKICAgICAgICAgICAg
IHJldHVybiBBbmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAgICAgfQpAQCAtMzI0Myw3ICsz
MjQ0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdG
b3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5k
ZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0
CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYg
KCFsYXllci5zY3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5jYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0z
MjUxLDcgKzMyNTIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21w
b3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRlcgogICAgICAgICByZXR1cm4g
bGF5ZXIuaXNDb21wb3NpdGVkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogfQogCiBJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBib29sIGhhc0NvbXBvc2l0
ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIGJvb2wgcGFp
bnRzSW50b1Byb3ZpZGVkQmFja2luZykgY29uc3QKQEAgLTMyNzMsNyArMzI3NCw3IEBAIEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJl
Y3RDb21wb3NpdGluZ1JlYXNvCiAgICAgfQogCiAgICAgLy8gSWYgdGhpcyBsYXllciBzY3JvbGxz
IGluZGVwZW5kZW50bHkgZnJvbSB0aGUgbGF5ZXIgdGhhdCBpdCB3b3VsZCBwYWludCBpbnRvLCBp
dCBuZWVkcyB0byBnZXQgY29tcG9zaXRlZC4KLSAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJh
Y2tpbmcgJiYgbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKKyAgICBp
ZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAm
JiBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Io
KSkgewogICAgICAgICBhdXRvKiBwYWludERlc3RpbmF0aW9uID0gbGF5ZXIucGFpbnRPcmRlclBh
cmVudCgpOwogICAgICAgICBpZiAocGFpbnREZXN0aW5hdGlvbiAmJiBsYXllclNjcm9sbEJlaGFo
YXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGxheWVyLCAqcGFpbnREZXN0aW5hdGlv
bikgIT0gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVy
biBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpPdmVyZmxvd1Njcm9sbFBvc2l0aW9uaW5nOwpA
QCAtMzMxMCw3ICszMzExLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNT
Y3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWUKIAogICAgIGF1dG8q
IGVuY2xvc2luZ092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXll
cihFeGNsdWRlU2VsZik7CiAKLSAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNs
b3NpbmdPdmVyZmxvd0xheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsK
KyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVy
LT5zY3JvbGxhYmxlQXJlYSgpICYmIGVuY2xvc2luZ092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVB
cmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAo
ZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQogICAgICAgICAgICAgKmVuY2xvc2lu
Z0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtMzM0Miw3ICszMzQzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBS
ZW5kZXIKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNmb3Jt
LCB3aGljaCBzaG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KICAgICBmb3IgKGF1dG8qIGFuY2Vz
dG9yID0gbGF5ZXIucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJl
bnQoKSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKSkKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2Vz
dG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1N0YWNr
aW5nQ29udGV4dCgpICYmIGFuY2VzdG9yLT5pc0NvbXBvc2l0ZWQoKSAmJiBhbmNlc3Rvci0+cmVu
ZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzM5Myw4ICszMzk0LDEwIEBAIHN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9z
aXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYg
KGFuY2VzdG9yTGF5ZXIgPT0gJmludGVybWVkaWF0ZUxheWVyKQogICAgICAgICAgICAgc2F3SW50
ZXJtZWRpYXRlTGF5ZXIgPSB0cnVlOwogCi0gICAgICAgIGlmIChhbmNlc3RvckxheWVyLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KGFuY2VzdG9yTGF5ZXIpOworICAgICAgICBpZiAoYXV0byogYW5j
ZXN0b3JMYXllclNjcm9sbGFibGVBcmVhID0gYW5jZXN0b3JMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYS0+aGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25z
dF9jYXN0PFJlbmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7CisgICAgICAgIH0KIAogICAgICAg
ICBhbmNlc3RvckxheWVyID0gYW5jZXN0b3JMYXllci0+cGFyZW50KCk7CiAgICAgfQpAQCAtMzQw
NCw3ICszNDA3LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Ny
b2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLAogCiBTY3JvbGxQb3NpdGlvbmlu
Z0JlaGF2aW9yIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVs
YXRpdmVUb0NvbXBvc2l0ZWRBbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0
IFJlbmRlckxheWVyJiBjb21wb3NpdGVkQW5jZXN0b3IpCiB7Ci0gICAgaWYgKCFsYXllci5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVB
cmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9u
ZTsKIAogICAgIGJvb2wgY29tcG9zaXRlZEFuY2VzdG9ySXNJbnNpZGVTY3JvbGxlciA9IGZhbHNl
OwpAQCAtMzQ0Myw3ICszNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdFN0YXRpb25hcnlMYXll
clJlbGF0ZWRPdmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAg
aWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgaXNQYWludE9yZGVyQW5jZXN0b3IpCiAgICAg
ICAgICAgICByZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0b3A7CiAKLSAgICAgICAgaWYgKHNl
ZW5QYWludE9yZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0
b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChz
ZWVuUGFpbnRPcmRlckFuY2VzdG9yICYmICFpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2Vz
dG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVh
KCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIGFwcGVu
ZE92ZXJmbG93TGF5ZXJOb2RlSUQoYW5jZXN0b3JMYXllcik7CiAKICAgICAgICAgcmV0dXJuIEFu
Y2VzdG9yVHJhdmVyc2FsOjpDb250aW51ZTsKQEAgLTM0NTgsNyArMzQ2MSw3IEBAIFNjcm9sbFBv
c2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29vcmRpbmF0
ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9u
ZWQoKSkKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAg
ICAgCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAg
ICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xs
UG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKQEAgLTQ0NDAsNyArNDQ0Myw4IEBA
IFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05v
ZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBTCiAgICAgICAgIG1fY2xpcExheWVyLT5zZXRTY3JvbGxp
bmdOb2RlSUQobm9kZUlEKTsKICNlbmRpZgogCi0gICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1h
cC5hZGQobm9kZUlELCBtYWtlV2Vha1B0cihsYXllcikpOworICAgIEFTU0VSVChsYXllci5zY3Jv
bGxhYmxlQXJlYSgpKTsKKyAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQs
IG1ha2VXZWFrUHRyKCpsYXllci5zY3JvbGxhYmxlQXJlYSgpKSk7CiAKICAgICByZXR1cm4gbm9k
ZUlEOwogfQpAQCAtNDQ3NSw4ICs0NDc5LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmRldGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXJXaXRoUm9sZShSZW5kZXJMYXllciYgbGEKICAg
ICBhdXRvIHVucmVnaXN0ZXJOb2RlID0gWyZdKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsKICAg
ICAgICAgYXV0byBjaGlsZE5vZGVzID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3IuY2hpbGRyZW5PZk5v
ZGUobm9kZUlEKTsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkTm9kZUlEIDogY2hpbGROb2Rlcykg
ewotICAgICAgICAgICAgaWYgKGF1dG8gd2Vha0xheWVyID0gbV9zY3JvbGxpbmdOb2RlVG9MYXll
ck1hcC5nZXQoY2hpbGROb2RlSUQpKQotICAgICAgICAgICAgICAgIHdlYWtMYXllci0+c2V0TmVl
ZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAoYXV0byB3ZWFrU2Nyb2xs
YWJsZUFyZWEgPSBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCisg
ICAgICAgICAgICAgICAgd2Vha1Njcm9sbGFibGVBcmVhLT5sYXllcigpLnNldE5lZWRzU2Nyb2xs
aW5nVHJlZVVwZGF0ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9M
YXllck1hcC5yZW1vdmUobm9kZUlEKTsKQEAgLTQ2NTcsOCArNDY2MSwxMSBAQCBTY3JvbGxpbmdO
b2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3Bv
cnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJl
bGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5k
ZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JM
YXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZl
cmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0
b3JMYXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0s
IExheW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAg
IH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJv
eD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0Njg1LDE0IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xp
cExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEg
PSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEp
OworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBo
aWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwg
YmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51
bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxh
YmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0KIH0KIApAQCAt
NDcyMCw4ICs0NzMwLDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChj
aGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVw
ZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKTsKIAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFn
czo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21l
dHJ5KG5ld05vZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05v
ZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7
CisgICAgICAgICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2Vv
bWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGMxNTFlMjNkMGVmNi4uMmNkNzFjYjhm
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclVwZGF0ZXIu
aCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogCkBAIC02
MzUsNyArNjM2LDcgQEAgcHJpdmF0ZToKICAgICBDb2xvciBtX3ZpZXdCYWNrZ3JvdW5kQ29sb3I7
CiAgICAgQ29sb3IgbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7CiAKLSAgICBIYXNoTWFw
PFNjcm9sbGluZ05vZGVJRCwgV2Vha1B0cjxSZW5kZXJMYXllcj4+IG1fc2Nyb2xsaW5nTm9kZVRv
TGF5ZXJNYXA7CisgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYT4+IG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXA7CiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5V2ViS2l0U2Nyb2xsaW5n
TGF5ZXJDb29yZGluYXRvcj4gbV9sZWdhY3lTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45
OTE5MzdkNzEyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTAsMCArMSwxODQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBB
bHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVy
IHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNp
b24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1Q
TCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZv
dW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BM
IiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFy
ZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8g
YWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhl
IHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBH
UEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVs
ZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BM
LCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlz
aW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVyKQorICAgIDogbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNl
KQorICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCisgICAgLCBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkK
KyAgICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAgICwgbV9sYXll
cihsYXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlci52
aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBp
ZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5m
cmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVt
ZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJh
cik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Ny
b2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVh
clJlc2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNj
cm9sbFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5yZW5kZXJlcigp
LmVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUg
b25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNh
bGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVy
U2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygp
KQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBv
c2l0aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1U
b3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQg
c2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0
LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVu
dCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8
fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigq
cmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVs
ZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcp
CisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hF
dmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1
c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
IChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNj
cm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9s
bEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
bGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBk
YXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Ny
b2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0Zvckxh
eWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24p
Cit7CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uU2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBwb3NpdGlvbi52YWx1ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9s
bFBvc2l0aW9uU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pKTsKKyAgICBt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgbV9wb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7
CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwor
ICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBv
c2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1w
aW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3Np
dGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9z
aXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRp
b24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1w
aW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5p
bWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsK
KyAgICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlv
bihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29u
c3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCBtX2xheWVyIDw8ICIg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOworCisgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7
CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQs
IFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAg
aWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxB
bmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNs
YW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9
PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2
aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3Jv
bGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxU
eXBlLCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihj
bGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1cnJl
bnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9m
ZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1w
aW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUo
KTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9m
ZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRT
Y3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2
ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7
CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxP
ZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJl
bmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lU
SF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8
PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5
cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBv
c2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8g
YmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0
IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0
aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkg
LSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZz
ZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAg
ICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAg
IGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAo
c2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxY
T2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Ny
b2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhP
ZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fc2Ny
b2xsUG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8v
IEZJWE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVu
Y2hhbmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAv
LyBUaGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUg
bWFpbiB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBtX2xheWVyLnNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVu
ZGVyZXIudmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxk
IGxheWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3Rl
ZCBieSBhIHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVy
cywgYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRp
bmcgYW5jZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5p
c0luUmVuZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRk
bGUgb2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZp
bmlzaGVkLgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwo
KTsKKworICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRp
b25zKCk7CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAg
ICAgICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBv
biB0aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8v
IHBvc2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxr
IG9mIHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMg
Y2FzZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBj
b21wb3NpdGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0
ZXMuCisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAg
ICAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisK
KyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRp
b24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4g
ei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2Fs
ayBmcm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBw
YWludFBhcmVudCA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAg
ICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFy
Y2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0
ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIg
cmVnaW9uLgorICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdE
ZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQo
cmVuZGVyZXIuZnJhbWUoKSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIu
ZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0g
cmVuZGVyZXIuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5l
ZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JS
ZXBhaW50ID0gcmVuZGVyZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlci5yZXBh
aW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIuY2xpcHBlZE92ZXJmbG93
UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYg
KHJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBy
ZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2
ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVx
dWlyZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkg
eworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwor
ICAgICAgICBtX2xheWVyLnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJj
aHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gbV9sYXllci5iYWNraW5n
KCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1
c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWly
ZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWlu
dENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9s
bCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVu
dCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQ
ZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVy
ZmxvdygpKQorICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgp
OworCisgICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAg
IGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5ZXIpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJT
Y3JvbGwoKQoreworICAgIGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9z
aXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1
YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQK
KyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBm
cm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3Ig
PSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkp
IHsKKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAg
ICAgICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBv
c2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBi
ZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVk
IGJ5IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXRE
ZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAg
ICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMo
Q29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVu
ZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6
ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3Jv
bGxXaWR0aDsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdo
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmICht
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNv
bHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWlnaHQ7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKCkKK3sKKyAg
ICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHdvdWxk
IGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZp
ZWxkcy4KKyAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbjsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAg
ICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIG1fdXBkYXRpbmdNYXJx
dWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNI
VE1MTWFycXVlZSgpICYmIHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFy
cXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFt
X21hcnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1
ZWU+KCZtX2xheWVyKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsK
KyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3coKSBj
b25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3JvbGxzT3ZlcmZsb3coKTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNldHRpbmdzKCkuYXN5bmNP
dmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdf
VE9VQ0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVu
ZGVyZXIuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIuc2V0
dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAg
c2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxp
bmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xl
KFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCisgICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05v
ZGVJRCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9s
bGluZ05vZGVJRCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKK30KKworSW50UmVj
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBW
aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJh
clNwYWNlOworICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNs
dXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Ny
b2xsYmFySW50cnVzaW9uKCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJs
ZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZp
c2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwg
dmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50KCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJh
bmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4
aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4K
KyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAg
ICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFj
aGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3Jv
bGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkp
KTsKKworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRX
aWR0aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRo
KCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVX
aWR0aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJl
dGNoOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJlY3QpOworfQorCitJ
bnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRSZWN0KTsK
KyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4g
cmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQ
b2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0Nv
bnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5t
b3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplKCkgY29uc3QK
K3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFi
b3gpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShyb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVp
Z2h0KCkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJs
ZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9
IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250
ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRI
ZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdo
dCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXpl
Q2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246
OlNjcm9sbGJhcnNDaGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91
bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRz
TGF5b3V0KCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1l
VmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNj
cm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRP
dmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRp
ZEVuZFNjcm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
RW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpkaWRVcGRhdGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hl
biB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQu
CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNs
aWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9s
UmVjdHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkg
Y29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBB
U1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lk
ZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1Jl
Y3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3Jv
bGxiYXIoKSk7CisKKyAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIg
PyBtX2hCYXItPmhlaWdodCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
PSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07
CisKKyAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3Zl
cmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAg
IGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVy
ZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJz
QXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVO
b25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxi
YXIpKTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0
aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAg
ICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
OiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5z
aGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsK
KyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5z
aGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0
aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFy
UmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0
aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFy
UmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFy
UmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQu
dmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVj
dCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVm
dENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAg
fTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3Jv
bGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVy
KSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUs
IHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Cisg
ICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWlu
dFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Cisg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29y
bmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAg
IG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Ny
b2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4g
c2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxT
Y3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1l
bnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2Rl
KCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcik7CisgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRl
ckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVy
ZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAg
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBh
Z2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRk
Q2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNj
cm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBt
X3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
c2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xs
YmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAg
ICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3Jv
bGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNj
cm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVD
aGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3Jv
bGxiYXIpIHsKKyAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xs
YmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVy
ID0gbV9sYXllci5yZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNp
dHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRp
bmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRv
bWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNl
dFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxz
ZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisK
KyAgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Ny
b2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBv
c2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXIt
PnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVD
aGFuZ2VkKCk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCku
ZnJhbWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVCb3goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRM
YXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3Np
bmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAg
ICAgICBpZiAobmV4dExheWVyLT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAor
eworICAgIGlmICghbV92QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQor
ICAgICAgICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFy
LT53aWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250
cm9scygpCisgICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxl
dmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFy
dGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBtX2hCYXItPmhlaWdodCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92
QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6
ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3Qp
Cit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisK
KyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUo
b2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0
aWNhbFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hC
YXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJl
Y3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1f
cmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxv
d1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGlu
Z01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKwor
TGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNv
bnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExh
eW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJv
eC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93
UmVjdC5tYXhZKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmZsb3dMZWZ0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVu
ZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7Cisg
ICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xs
V2lkdGggPSByb3VuZFRvSW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAg
ICBtX3Njcm9sbEhlaWdodCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93
VG9wKCkpOworCisgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92
ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3Zl
cmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9w
T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsK
KyAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1z
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAo
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dY
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZl
cnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgJiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4g
c2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lk
dGgoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxP
dmVyZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7
CisKKyAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVy
Qm94KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4
aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0
aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVy
Zmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNj
cm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJz
KCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93
U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0
aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUu
b3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJm
bG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
OjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xs
YmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxv
d1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0g
bV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94
IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90
aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94
UGFydCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cg
PSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxv
dyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRp
c2FibGUuCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYg
KG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6
b250YWxTY3JvbGxiYXIpKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRh
bE92ZXJmbG93KTsKKyAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVu
ZGVyZXIuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0
byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFk
ZGVkIG9yIHJlbW92ZWQuCisgICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
PSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJX
aXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGlj
YWxPdmVyZmxvdyk7CisKKyAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJv
eC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBt
X2xheWVyLnVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVw
YWludCgpOworCisgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92
ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6
OkF1dG8pIHsKKyAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAg
ICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAg
ICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9s
bEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAg
ICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAg
bV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAg
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNC
b3goKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5j
bGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0K
KworICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAg
ICBpZiAobV9oQmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94
LT5jbGllbnRXaWR0aCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdl
U3RlcChjbGllbnRXaWR0aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIp
IHsKKyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWln
aHQoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50
SGVpZ2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dEhlaWdodCwgbV9zY3JvbGxIZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVB
cmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpKTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQg
Y29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxP
ZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXll
cigpOworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJl
IHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0
eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICgh
Ym94LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMg
dG8gYmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVk
CisgICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAo
b3IgcHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBl
ZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4g
VGhlIGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyBy
ZWxhdGVkIGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBm
aXggYW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBi
ZSBkcmF3biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hv
c2UgY29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1
Nzk3OTc+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNl
dCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRT
Y3JvbGxPZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAg
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xs
T2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlz
Q29tcG9zaXRlZCgpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3Vy
YXRpb25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKQorICAgICAgICBtX2xheWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRl
KCk7CisKKyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRS
ZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworCisgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0
cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0
aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMo
KSBjb25zdAoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUg
c2Nyb2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorewor
ICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNP
dmVyZmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93
Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJz
IHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRo
ZXkgd2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMg
aXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAg
IC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVy
IHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBi
ZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxh
eWVyIHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0
aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8v
IHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBn
ZXQgaXQgcmlnaHQuCisgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dCA9IHBhaW50T2Zmc2V0OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0
aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAg
ICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92
QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBs
b2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxv
d0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9z
aW5nQ29tcG9zaXRpbmdMYXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAg
ICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVh
KCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMg
Y2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJz
IHR3aWNlLgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNj
cm9sbGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWlu
dE9mZnNldCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykK
KyAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9m
ZnNldDsKKworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4g
IFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBz
b21ldGltZXMKKyAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3Vycmlu
ZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBj
b250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0
aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFp
bnQgdGhlbS4KKyAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAo
bV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+
cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5l
ciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwg
dGhlIHdheSB1cCB0byB0aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3Jv
bGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisKKyAg
ICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUg
c2Nyb2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9m
ZnNldCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVj
dCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50
T2Zmc2V0KTsKKyAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkp
IHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5l
ci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVy
IGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8g
c2VlIHdoYXQgaXMgYmVoaW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkK
KyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4
dCwgYWJzUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1Bs
YXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBG
bG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNv
dXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNp
emVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVz
aXplclNpemUuc2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAg
IHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29y
bmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAg
IGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAg
ICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3Ju
ZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0
LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVp
Z2h0KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAg
ICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNp
emVyU2l6ZSkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0
KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwg
Y29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgPT0gUmVz
aXplOjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMu
cmVzaXplcjsKKyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlm
ICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAg
ICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
KworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgorICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xh
eWVyLmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xS
ZWN0OworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChy
ZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgeworICAgICAgICBpZiAo
cmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Ny
b2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgorICAgIGlmICht
X3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAg
ICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewor
ICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oQmFyICYmIG1f
aEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAg
ICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQorewor
ICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0
aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5wYWdlKCkuZm9jdXNDb250cm9sbGVy
KCkuaXNBY3RpdmUoKTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIucmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbklu
VmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxpbmdX
aGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlU25hcE9mZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlv
bmQgSFRNTEVsZW1lbnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG1fbGF5ZXIuZW5jbG9z
aW5nRWxlbWVudCgpKSB8fCAhbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIuZW5jbG9z
aW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9s
bGFibGVBcmVhKCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJlY3Qo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9s
YXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3Zl
cmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVu
ZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyOjpM
YXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8oJm1fbGF5ZXIsIGVuY2xvc2luZ0ludFJlY3Qo
ZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9v
dCk7CisgICAgbV9sYXllci5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUmVuZGVy
TGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAg
IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBM
YXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0
VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAg
IGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGF1dG8gYm9yZGVy
Qm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLmJv
cmRlckJveFJlY3QoKSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OworCisgICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBm
cmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAg
ICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1
cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9t
Qm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVy
UmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0
b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMu
bWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNp
emUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBs
YXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBM
YXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBh
dXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlm
IChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYg
cmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9p
bnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjps
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkgOiBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3Zl
cmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29u
Y2VwdC4KKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYg
KCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0
aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAg
ICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93
WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsK
KworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdh
cyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBi
b3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxl
RGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxi
YXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNj
cm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3Zl
cmZsb3dDbGlwKCkgJiYgKCh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9t
YXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7CisgICAg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOworICAg
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOworCisgICAg
Ly8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5
cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8g
YW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSku
CisgICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUg
JiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dY
ICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsK
KworICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAm
JiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kg
IT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwor
CisgICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3JiBmcmFt
ZVZpZXcgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJs
ZVRvSGl0VGVzdCA9IHJlbmRlcmVyLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVu
dCgpKQorICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYg
b3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNT
Y3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wg
YWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAg
ICBpZiAoaXNTY3JvbGxhYmxlKSB7CisgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEpIHsKKyAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9s
bGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
PSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSkgeworICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxz
ZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBpZiAoYWRkZWRP
clJlbW92ZWQpIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVl
ZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5n
LCBzbyBpZiB3ZSBiZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1vdmUgb3Vy
c2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAgICAgICAgICB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyNl
bHNlCisgICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKKyNlbmRpZgorfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJF
bGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsK
KyAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVu
ZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVy
IH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3Ju
ZXIpIHsKKyAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgp
LCBXVEZNb3ZlKCpjb3JuZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxk
IGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudCgmcmVuZGVyZXIpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxl
KCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3Zl
KCpjb3JuZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNj
cm9sbENvcm5lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJu
OworICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxD
b3JuZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVJlc2l6ZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNj
cm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIuaGFzT3ZlcmZs
b3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVk
b0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisg
ICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwg
V1RGTW92ZSgqcmVzaXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQg
YmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgm
cmVuZGVyZXIpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0g
ZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIoKQoreworICAg
IGlmICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQobnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJTdHlsZUNoYW5nZWQoKQoreworICAgIGlmICht
X2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikK
KyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3
ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxl
ZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFy
ZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRk
VG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyOworICAg
IGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1l
bnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQor
I2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCisvLyBGSVhNRTogdGhpcyBpcyBv
bmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXllci5iYWNraW5nKCktPmhhc1Njcm9sbGlu
Z0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50
IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmly
ZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9v
bGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVl
ZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEg
LyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVk
RGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSAr
IDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRT
aXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0
dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRT
Y3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQp
Cit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVy
ZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKwor
ICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24g
aXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93
LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91
c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8
fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAgICAgIGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgZWxzZQorICAgICAgICBwcmV2
aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOworCisgICAgSW50U2l6
ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsKKworICAgIGlm
IChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8v
IGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KKyAgICAgICAgZGVs
dGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKworICAg
IHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOworfQorCitP
cHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3Jv
bGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciBiZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2
ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KQoreworICAgIEFTU0VS
VChtX2xheWVyLmFsbG93c0N1cnJlbnRTY3JvbGwoKSk7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9
IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBhdXRvIHNob3Vs
ZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2
aW9yIGJlaGF2aW9yKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9
ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Q
cm9ncmVzcygpCisgICAgICAgICAgICAmJiBlbGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhi
ZWhhdmlvciwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiB1c2VBbmltYXRlZFNjcm9sbGluZyA/
IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CisgICAgfTsKKworICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRp
b24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRl
ZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgYmVoYXZpb3IpOworICAgICAgICBzZXRTY3JvbGxQb3Np
dGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsK
KyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKKworICAgICAgICBhdXRvIGxvY2FsRXhwb3NlUmVjdFNj
cm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0OworICAgICAgICBsb2NhbEV4cG9zZVJlY3RTY3JvbGxl
ZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBv
c2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7CisgICAgfQor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxh
YmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVy
LnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIu
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBT
Y3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAg
ICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9s
bGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8v
IElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIg
dXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9s
bE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAo
IXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlci5wYXJlbnQoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCisgICAg
ICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Ny
b2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdl
IGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dy
YW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3Zl
cmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBj
YW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3Jv
bGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Ny
b2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBG
SVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRy
eSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3Vt
ZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKwor
ICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1f
bGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAo
VXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihtX2xheWVyLnBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQg
T0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwor
ICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3Ig
YW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6
OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVs
OjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjU0MTY0
MTYxNTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVh
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTWFycXVlZTsKKworY2xh
c3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJl
YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYpOworICAgIHZpcnR1YWwgflJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIFJlbmRlckxheWVyJiBsYXllcigpIHsg
cmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7
IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWVQb3NpdGlv
bigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworCisgICAgdm9pZCBzY3Jv
bGxiYXJTdHlsZUNoYW5nZWQoKTsKKworICAgIHZvaWQgc3RvcmVTY3JvbGxQb3NpdGlvbigpOwor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFw
cGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIGludCBzY3JvbGxX
aWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQg
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcg
bWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2
b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVB
cmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9u
KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0
aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOworCisgICAgdm9p
ZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6
Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5p
bWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworCisgICAgLy8g
VGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0
KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55
KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQp
OyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Ny
b2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIGJvb2wgc2Nyb2xsc092ZXJm
bG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Owor
ICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3JvbGxi
YXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9v
bCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7CisgICAgdm9p
ZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKworICAgIFJlZjxTY3JvbGxiYXI+IGNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1f
cmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlh
dGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRv
dWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVh
bGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkg
c2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgor
ICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorCisgICAgaW50IHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAg
ICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQm
IHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9s
cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBw
YWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7
CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyAgICB2b2lkIHVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworCitwdWJsaWM6Cisg
ICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIG92ZXJyaWRlIFNjcm9sbGFibGVhQXJl
YSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQo
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIGhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIFNjcm9sbFBvc2l0aW9u
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsg
fQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVh
KiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFs
OworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJv
b2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Cisj
ZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5l
cigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisK
KyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25z
dCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRS
ZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRS
ZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFs
OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdO
b2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50
ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVu
dFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXco
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFs
OworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZp
eGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2Vu
ZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZp
bmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAg
IEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgYm9v
bCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQorICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1f
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yOyB9CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9p
ZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMp
IHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0K
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwor
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xs
Q29ybmVyKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICB2b2lkIGNsZWFy
UmVzaXplcigpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5
b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0
b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExh
eW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJm
bG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9v
bCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBO
T1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3Jv
bGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zm
c2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihT
Y3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0
UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKworcHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRp
bmcgb24geDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91
dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9v
bCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1v
cmRlciB0cmVlLgorICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDog
MTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
IDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24gOiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAx
OworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0
IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBt
X3Njcm9sbEhlaWdodDsKKworICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBv
c2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhh
dmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOwor
ICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3Zl
cmxheVNjcm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0
b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xs
YmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBh
cnQ+IG1fcmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21h
cnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlm
MzgzMmQzNmUuLjUyMjAyNTliZWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5o
IgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
QEAgLTg4Miw3ICs4ODMsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXll
ci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0
Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94
OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4g
ZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVu
Y2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVBbmNlc3RvcigpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0
IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQw
OTk2Li45YTQ4MWE5N2FmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAgUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShS
ZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigq
dGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNj
cm9sbGFibGVBcmVhKCkpOworICAgIGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJh
aW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5S
ZW5kZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpAQCAtMTczLDkgKzE3NCw5IEBAIHZvaWQgUmVuZGVy
TWFycXVlZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7
CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNj
cm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zm
c2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Ny
b2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IG1fc3VzcGVuZGVkID0gZmFsc2U7CiAgICAgICAgIG1fc3RvcHBlZCA9IGZhbHNlOwpAQCAtMjQ0
LDEyICsyNDUsMTUgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICBpZiAo
bV9sYXllci0+cmVuZGVyZXIoKS52aWV3KCkubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkg
ewogICAgICAgICBtX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkK
LSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI3Miw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlck1h
cnF1ZWU6OnRpbWVyRmlyZWQoKQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwog
ICAgICAgICBpbnQgY2xpZW50U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9s
YXllci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5y
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFi
cyhpbnRWYWx1ZUZvckxlbmd0aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUlu
Y3JlbWVudCgpLCBjbGllbnRTaXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9y
aXpvbnRhbCgpID8gbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xs
T2Zmc2V0KCkueSgpKTsKKyAgICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkg
PyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsT2Zmc2V0KCkueSgpKTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRk
SW5jcmVtZW50ID8gaW5jcmVtZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2
ZSkKICAgICAgICAgICAgIG5ld1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAt
Mjg5LDkgKzI5Myw5IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQog
ICAgIAogICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9Y
T2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0
KG5ld1Bvcyk7CiAgICAgZWxzZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3
UG9zKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBA
IE9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVj
dEluQ29udGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVn
ZW5kKFRleHRTdHJlYW0mIHN0cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBz
dHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmko
WCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFu
b24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0
eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxp
bmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5
LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwg
aGFzKEwpYXllciwgaGFzTGF5ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURp
cnR5IHN0eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQog
CkBAIC0xMTE1LDEwICsxMTE1LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJP
YmplY3QoVGV4dFN0cmVhbSYgc3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNl
CiAgICAgICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAo
aGFzTGF5ZXIoKSkgewogICAgICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAg
c3RyZWFtIDw8ICItIjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KCp0aGlzKS5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFt
IDw8ICJTIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9
IGVsc2UKKyAgICAgICAgc3RyZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkp
CiAgICAgICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKaW5kZXggYjkxNTkyMmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJP
YmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxS
ZW5kZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8v
IEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2Rl
LCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBh
bm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgx
ZjU2NWMuLjI1N2FmYmUxOTA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9w
LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5k
ZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQp
CiB7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAg
aWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcikpCisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkg
PyByZW5kZXJlci0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cjsKKyAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJz
b2x1dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dp
Y2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50
KQogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVy
ZXIoKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9Q
aHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5
bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKQorICAgIGF1dG8qIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5s
YXllcigpOworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Ny
b2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChk
aXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3
YzAxZjAyMGZlODIuLmY1ODhlODY5ZTA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC02MDAsMTQgKzYwMSwxNiBAQCBzdGF0
aWMgdm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IExheW91dFJlYwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkp
Ci0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54
KCk7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0
cyA8PCAiIHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlm
IChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGll
bnRXaWR0aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBz
Y3JvbGxXaWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5y
ZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQo
KSkgIT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhl
aWdodCAiIDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAg
ICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAg
ICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zm
c2V0KCkueSgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsV2lkdGgoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJl
bmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgp
KSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsK
KyAgICAgICAgfQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNj
cm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgICAgIGlmICghc2Ny
b2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IGIxMDMz
ZGEwNzkzMC4uNWJiNGU0ZmQ0MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKQEAgLTMzMiw4ICszMzMsMTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qo
c2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAot
ICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKQotICAgICAgICBsYXll
cigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFk
anVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgaWYgKGxheWVyKCkgJiYg
bGF5ZXIoKS0+Y2FuUmVzaXplKCkpIHsKKyAgICAgICAgQVNTRVJUKGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpOworICAgICAgICBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludFJlc2l6
ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZz
ZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0
T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggYWQ2MzdmZjQ0Zjk2Li5mZTVjZTQwNTk2MTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xODMzLDcgKzE4
MzQsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1do
ZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNj
cm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJv
eC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94LmxheWVyKCkpOworICAgICAgICBzY3JvbGxh
YmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgIH0KICAgICAKICAg
ICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg1NCw4ICsyODU2LDEwIEBAIEV4Y2VwdGlvbk9y
PFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSog
bm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkK
ICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJl
bmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVu
ZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlbmRl
ckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94Lmxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZwppbmRleCA1YzQ5OTNiYWUwMjguLjE4NDU1ZjIxNzY4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTExLTIyICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRl
IHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJhdGlvbiBmb3IgdGhlIFJlbmRlckxheWVy
IGFyY2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNj
cm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRv
IHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUg
Zm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Ny
b2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0
ZXN0aW5nLgorCisgICAgICAgICogRE9NL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxF
bGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpd
KToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBf
c2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxE
T01SYW5nZVRvVmlzaWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMTEtMjEgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIEV4cGVyaW1lbnRh
bCBGZWF0dXJlcyBmb3Igd2hlZWwgZXZlbnQgZ2VzdHVyZXMgYmVjb21pbmcgbm9uLWJsb2NraW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4u
ZGE0M2UzZTY0ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAt
MTExLDExICsxMTEsMTcgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZ
T2Zmc2V0OihpbnQpeSBhZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5k
ZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFz
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhZGp1c3RGb3JJT1ND
YXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0
cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgs
IHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9sbENs
YW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAg
ICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQpYWJzb2x1
dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2MDgzOTJm
Li44ODAxMGMwYzZjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQpAQCAtNzM3LDEwICs3MzcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6KERPTVJhbmdlICopcmFuZ2UKICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwg
aW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9z
c09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogI2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBz
dGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmIChsYXll
cikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
Zyh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5
ZXItPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAg
ICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjpl
bmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVj
dGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVk
ZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAg
ICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2Up
OworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgfQpAQCAt
NzU3LDEwICs3NTcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJh
bmdlICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAKICAgICBpZiAoc3RhcnROb2Rl
ICYmIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0
Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKSB7
Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRy
dWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+
c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAg
c3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xv
c2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9u
UmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
V2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKIAogICAgICAgICAgICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwog
ICAgICAgICAgICAgaWYgKGNvcmVGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmlu
ZGV4IDYyMzZhMTFiZjI5Ni4uZGU4ZTFkMThjYWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMTEtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPG56
aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUg
b3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFByZXBhcmF0aW9uIGZvciB0aGUgUmVuZGVyTGF5ZXIgYXJjaGl0ZWN0dXJlIGNo
YW5nZToKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93
IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMg
aW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMg
dGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cu
CisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisKKyAgICAg
ICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIwLTEx
LTE5ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAg
IFtUZXh0dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJlTWFwcGVyIGZyb20gVGV4dHVyZU1hcHBl
ckxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4u
MmZkY2Y5ZjljYjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYg
KzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVl
QXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIw
NDksMTAgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdp
dGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5z
Y3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0g
Y29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVk
QXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZz
Y3JvbGxlZEFyZWEpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0Zl
ZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVl
ZGJhY2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShn
ZXN0dXJlSGFuZGxlKTsK
</data>
<flag name="commit-queue"
          id="431789"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414887</attachid>
            <date>2020-11-26 01:55:51 -0800</date>
            <delta_ts>2020-11-26 03:48:17 -0800</delta_ts>
            <desc>Patch, v6 (squashed for testing)</desc>
            <filename>patch-v6.diff</filename>
            <type>text/plain</type>
            <size>311118</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjVlNThkYzA4M2M2YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJhdGlv
biBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAgIFRoZSBn
b2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBv
dXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAg
ICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAg
ICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRj
aCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zh
c3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0xMS0yMiAgRGllZ28gUGlubyBHYXJjaWEgIDxkcGlub0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHTElCXVtHVEtdIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcuIFVwZGF0ZWQg
ZXhwZWN0YXRpb25zIGFuZCBiYXNlbGluZXMgYWZ0ZXIgMjcwMTY0LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0
L2Jsb2NrL2Zsb2F0L21hcnF1ZWUtc2hyaW5rLXRvLWF2b2lkLWZsb2F0cy1leHBlY3RlZC50eHQK
aW5kZXggZThhZDNiN2NjMzJmLi5lODM1YWZlMzY5ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9mYXN0L2Jsb2NrL2Zsb2F0L21hcnF1ZWUtc2hyaW5rLXRvLWF2b2lkLWZs
b2F0cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxv
Y2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dApAQCAt
MjMsNSArMjMsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgICAgICAgUmVuZGVy
QmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMCwwKSBzaXplIDUweDEwMCBbYmdjb2xvcj0jMDA4
MDAwXQogICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKICAg
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKLWxheWVyIGF0ICg1
OCw5NCkgc2l6ZSA1MHgxMDAgc2Nyb2xsWCAtNTAKK2xheWVyIGF0ICg1OCw5NCkgc2l6ZSA1MHgx
MDAKICAgUmVuZGVyQmxvY2sge01BUlFVRUV9IGF0ICg1MCwwKSBzaXplIDUweDEwMCBbYmdjb2xv
cj0jMDA4MDAwXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMyM2FiNmI0ZTZjNC4uZmUyZjE3YzIxODliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYyIEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4g
IDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBj
b2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQcmVwYXJhdGlvbiBmb3IgdGhlIFJlbmRlckxheWVyIGFyY2hpdGVjdHVy
ZSBjaGFuZ2U6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVy
ZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUg
aXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5
cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJm
bG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9s
bFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNl
dFNjcm9sbFRvcCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAg
KiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFy
cXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6
ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lv
cy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBv
c2l0aW9uQ2hhbmdlZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAg
KiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxv
d0xheWVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVy
Zmxvd0NvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9z
aXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNh
bFdpZHRocyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZl
bnRNb25pdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Ny
b2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
c2Nyb2xsTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxh
YmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25U
b0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBS
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5n
UmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJv
bHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJv
bVJlc2l6ZUNvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpvdXRwdXRQYWludE9yZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
bmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzY3JvbGxUb09mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVs
RXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlz
aWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3Jv
bGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZp
c2libGVTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb250ZW50c1NpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpkaWRTdGFydFNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9y
U2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVh
dGVTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRl
c3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xl
ZnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJm
bG93UmlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxv
dyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xs
YmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Nj
cm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21l
bnRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoK
KyAgICAgICAgKGlzVHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJh
Y2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFk
anVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNl
c3RvcklzVHJhbnNmb3JtZWRPclVzaW5nQ29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXll
clJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZVNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Ny
b2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xh
eWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRz
TmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nQW5kSGllcmFyY2h5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Nj
b3BlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2Vz
dG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJsZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxv
d1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmll
d3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjplbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRv
Q29tcG9zaXRlZEFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5
TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OmNvbXB1dGVDb29yZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxp
bmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNo
U2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldpdGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05v
ZGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRh
dGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVl
TGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2Jq
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFp
bnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjogY29uc3QpOgorCiAyMDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmlu
ZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDM3ODlhYTM4Mzk0MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE0NjIsNiArMTQ2Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45
ODNjNWYzZGM2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3
NDUyMjUuLmEwOTRlMTZiZTBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjAxNSw2ICs2MDE1LDggQEAKIAkJMEY0Q0RFQUEy
M0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cm9sbFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3
Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ckxheWVyRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIx
M0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlckxheWVyRmlsdGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU4Niw2ICsyOTU4OCw4IEBACiAJCQkJMEY1M0ZCODky
MTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkz
QzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAor
CQkJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcCAqLywKKwkJCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJM
YXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRl
ckxheW91dFN0YXRlLmggKi8sCiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRl
ckxpbmVCb3hMaXN0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEz
Yy4uYTYzOGUxZGY4ZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcg
QEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFi
bGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5k
SGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyAr
MzkxNyw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
aXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92
ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNT
RVJUKGJveC5sYXllcigpKTsKKyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5s
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggZDYxYzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTkyLDYgKzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRv
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUcmVlVXBkYXRlci5oIgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRT
Y3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRv
SW50ZWdlcihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xs
QmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Ny
b2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVk
KTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkp
Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVk
U3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJl
ci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRj
aGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVs
ZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9
IGNsYW1wVG9JbnRlZ2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5n
KFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmlt
YXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRv
cCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5p
bWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5
ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxh
dGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJl
bmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVh
ckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggOWI2N2QyOTdlMTkxLi5hZGVmOTY4YTgyZDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMzkxLDkgKzIzOTEs
MTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVh
bE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+
cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9s
bGluZ1N1cHByZXNzQ291bnQpIHsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgICAgIGlm
IChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAg
IGxheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1v
ZGUsIGFsaWdubWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5n
OjpZZXMgfSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikK
KyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOworCiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRl
MmUuLjI2OTE2ZTY1ZjcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFy
cXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVt
ZW50LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVl
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3Niw5
IEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgpIGNv
bnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmplY3Qo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBy
ZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVhOWYuLmFlZTE2ZTk5NWM0NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDksNiArNDksNyBA
QAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
QEAgLTI1Myw5ICsyNTQsMTMgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRC
bHVyKCkKICAgICBpZiAoIWlubmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8q
IGlubmVyTGF5ZXJTY3JvbGxhYmxlID0gaW5uZXJMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBpZiAoIWlubmVyTGF5ZXJTY3JvbGxhYmxlKQorICAgICAgICByZXR1cm47CisKICAgICBib29s
IGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU+KCpyZW5kZXJlcikuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlu
bmVyTGF5ZXItPnNjcm9sbFdpZHRoKCksIDApOwotICAgIGlubmVyTGF5ZXItPnNjcm9sbFRvT2Zm
c2V0KHNjcm9sbE9mZnNldCk7CisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxXaWR0aCgp
LCAwKTsKKyAgICBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zm
c2V0KTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNsb3NlU3VnZ2VzdGlv
bnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NWViMjA5ZDRkMzcu
LjViMWNiYzNjYTNmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODAs
NiArODAsNyBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQx
LDcgKzM0Miw3IEBAIHN0YXRpYyBib29sIGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5j
bG9zaW5nQm94KE5vZGUqIHN0YXJ0Tm9kZSwgY29uc3QgV2hlCiAKICAgICBSZW5kZXJCb3gqIGN1
cnJlbnRFbmNsb3NpbmdCb3ggPSAmaW5pdGlhbEVuY2xvc2luZ0JveDsKICAgICB3aGlsZSAoY3Vy
cmVudEVuY2xvc2luZ0JveCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0g
Y3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogYm94TGF5
ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpID8gY3VycmVudEVuY2xvc2luZ0JveC0+
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGF1dG8g
cGxhdGZvcm1FdmVudCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKICAg
ICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKICAgICAgICAgICAgIGlmIChwbGF0
Zm9ybUV2ZW50KSB7CkBAIC0xNTYyLDcgKzE1NjMsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBz
aAogICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW5SZXNpemVy
ID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wocm91bmRlZEludFBvaW50KHJlc3VsdC5s
b2NhbFBvaW50KCkpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vy
c29yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+cmVuZGVyZXIoKS5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVD
dXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKQEAgLTE5MTIsOSArMTkxMyw5IEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghbGF5ZXIp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewotICAgICAgICAg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAg
ICAgICAgICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXll
cigpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbGFibGVBcmVhKCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAppbmRleCAzMDU4ZDkxZGU2NWEuLjE1NjJjNmYyYTEzOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcApAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNs
dWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTk1LDcgKzI1OTYsMTAgQEAgdm9pZCBG
cmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlmICgh
bGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJhaW5l
ZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMt
PnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0g
ICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKTsKKworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPmxheWVy
KCkpOworICAgICAgICAgICAgQVNTRVJUKHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMjEwLDYgKzMyMTQsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRv
QW5jaG9yKCkKIAogICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiIGFu
Y2hvciBub2RlIHJlY3QgIiA8PCByZWN0KTsKIAorICAgIGF1dG8qIGVuY2xvc2luZ0xheWVyID0g
YW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBpZiAoZW5jbG9z
aW5nTGF5ZXIgJiYgIWVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBl
bmNsb3NpbmdMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gU2Ny
b2xsIG5lc3RlZCBsYXllcnMgYW5kIGZyYW1lcyB0byByZXZlYWwgdGhlIGFuY2hvci4KICAgICAv
LyBBbGlnbiB0byB0aGUgdG9wIGFuZCB0byB0aGUgY2xvc2VzdCBzaWRlICh0aGlzIG1hdGNoZXMg
b3RoZXIgYnJvd3NlcnMpLgogICAgIGlmIChhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC0zODYyLDcgKzM4NzAsMTEgQEAgU2Nyb2xs
YWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAg
IGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVy
LT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBpZiAoIWVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwogfQogCiBJbnRS
ZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAg
LTQzMjYsOCArNDMzOCwxMSBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5k
ZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4
dCwgZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsg
fSwgc2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55
T3JpZ2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2li
bGVPcmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0g
ICAgICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJl
Y3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVSb290TGF5ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGFibGVSb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlUm9vdExheWVyLT5w
YWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9y
LCByZW5kZXJlcik7CisgICAgfQogCiAgICAgZGlkUGFpbnRDb250ZW50cyhjb250ZXh0LCBkaXJ0
eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmNwcAppbmRleCAzOGZiNDk3MWQyYTMuLjgwOWJjMTkxMzQ3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NSw4IEBA
IGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAg
ICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vy
c2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KEludFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCAzMmQzMmU1OWIyNDIuLjZlMGYxOTBiYTNkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTgxOSwxNCArODE5LDE1IEBAIHZv
aWQgRnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZShjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24sIE5vZGUqCiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmhh
c0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckxheWVyJiBsYXllciA9ICpk
b3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpOworICAgIGF1
dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5
ZXIoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIuY3VycmVudFNj
cm9sbFR5cGUoKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKLSAgICBsYXll
ci5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwotICAgIGxheWVyLnNl
dEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAgIGF1dG8gb2xkU2Nyb2xsVHlw
ZSA9IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVz
ZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKKyAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOwogCi0gICAgbGF5ZXIuZGlk
RW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KKyAgICBz
Y3JvbGxhYmxlTGF5ZXItPmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5
cyBjYWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25QZXJtaXNz
aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCBh
ZmQ3NmQyNTZlZDAuLmUwM2Q0ZTM3ZTc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbQpAQCAtNzg0LDcgKzc4NCwxMiBAQCBzdGF0aWMgU2Nyb2xsYWJsZUFy
ZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRlckJveCYgYm94KQogICAgIGlmIChpczxSZW5k
ZXJMaXN0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4o
JmJveCk7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7CisgICAgaWYgKGJveC5sYXllcigpKSB7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBib3gubGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIHdyaXR0
ZW4gaW4gdGVybXMgb2YgU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAKaW5kZXggNzM5MzE5Njc0ODc1Li40MjFiMzA3NWFmMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5j
cHAKQEAgLTkyLDcgKzkyLDcgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyKGNvbnN0IFJlbmRlckxheWUKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwogCi0gICAgcmV0dXJuIGxheWVy
Lmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKSA/IGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSA6IGZhbHNlOwogfQogCiBTY3JvbGxpbmdOb2RlSUQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNjcm9sbGFibGVDb250YWluZXJOb2RlSUQoY29uc3QgUmVuZGVyT2JqZWN0
JikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGM4
ZDgxZWYyNDg2Ni4uYjBkNjA2YTYwNGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJl
bmRlck1lbnVMaXN0LmgiCkBAIC01NTMsNyArNTU0LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZW5k
QW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24oKQogCiAgICAg
Zm9yIChhdXRvKiBibG9jayA6IGJsb2Nrc1RvVXBkYXRlKSB7CiAgICAgICAgIEFTU0VSVChibG9j
ay0+aGFzT3ZlcmZsb3dDbGlwKCkpOwotICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTGF5b3V0KCk7CisgICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gYmxvY2st
PmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogICAgICAgICBibG9jay0+Y2xlYXJMYXlv
dXRPdmVyZmxvdygpOwogICAgIH0KIH0KQEAgLTU4NCw4ICs1ODcsMTMgQEAgdm9pZCBSZW5kZXJC
bG9jazo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+dXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAoIWxheWVyKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiB9CiAK
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCkBAIC0xMTEzLDggKzExMjEsOCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogICAgIC8vIHotaW5kZXguIFdlIHBhaW50IGFmdGVyIHdlIHBhaW50ZWQg
dGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3JvbGxiYXJzIHdpbGwKICAgICAv
LyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAgIGlmICgocGhhc2UgPT0gUGFp
bnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBhaW50UGhhc2U6OkNoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpCi0gICAgICAgICYm
IHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZv
LnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNr
Z3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFp
bnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBz
bmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAgICAmJiBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2li
bGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50SW5m
by5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgICAgICBsYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRl
ZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8u
cmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbnRlbnRzKFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0yMDA3LDcgKzIw
MTUsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+aGl0VGVz
dE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRh
aW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKKyAgICBBU1NFUlQobGF5
ZXIoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVz
dWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShh
Y2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRU
ZXN0KCkgY29uc3QKQEAgLTI1MDMsOCArMjUxNiw5IEBAIGludCBSZW5kZXJCbG9jazo6YmFzZWxp
bmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGlu
CiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBUaGlzIG1hdGNo
ZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCiAgICAgICAg
IC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBhIHZl
cnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAgIC8vIHZlcnRp
Y2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Nyb2xs
VG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChs
YXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSAh
PSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxh
eWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3Qo
KSAmJiAhaXNSdWJ5UnVuKCkpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgIGJvb2wg
aWdub3JlQmFzZWxpbmUgPSAoc2Nyb2xsYWJsZUxheWVyICYmIChzY3JvbGxhYmxlTGF5ZXItPm1h
cnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lID8gKHNjcm9sbGFibGVMYXll
ci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgp
LnkoKSAhPSAwKQorICAgICAgICAgICAgOiAoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Ny
b2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkg
fHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKICAgICAgICAgCiAgICAg
ICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFs
PGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKICAgICAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRm
ZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpj
b21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgs
CiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAg
ICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBu
byBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVl
KCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+
bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkK
ICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDMwN2Y5YjJjN2YyZi4uOTUwMjY5MWFlZDUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIK
QEAgLTMxOCwxMSArMzE5LDEzIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJ
ZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVm
dC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcg
em9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxh
eWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHls
ZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRp
b24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBmbG9hdCB6b29tU2NhbGVG
YWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9v
bSgpOwotICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAg
ICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24p
OworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlv
biA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0
IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2Nh
bGVGYWN0b3IpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
T3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlv
dXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBj
b25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCku
eCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigp
LngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3Np
dGlvbigpLnkoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9z
aXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0
QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQg
c2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFn
ZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdX
aGVlbEV2ZW50cygpKQogICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmltYXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0K
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAg
IHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7
Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9u
KG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigp
LT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9s
bFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0g
ICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5k
ZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODE0LDI0ICs4MjYsMzIgQEAgYm9v
bCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJh
bWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNj
cm9sbGJhclNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpICYmICFsYXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYg
IXNjcm9sbGFibGVMYXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZ
KCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6
b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxh
eWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKICAgICAgICAg
JiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92
ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvKTsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNj
cm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkgOiBudWxscHRyOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xs
YWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVy
Qm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5j
bHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVM
YXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Ny
b2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lk
dGgoKSBjb25zdApAQCAtODM5LDEzICs4NTksMTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2lj
U2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgp
KQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQo
bGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFT
U0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICBy
ZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQo
bGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAg
QVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAg
ICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4
ICs4NzcsOCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgo
KSBjb25zdAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIs
IEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBs
YXllcigpOwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxl
ID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxw
dHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAo
c3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAg
LTg5Miw3ICs5MTUsOCBAQCBib29sIFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dp
Y2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdAogICAgICAgICBpZiAoZ3Jh
bnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKICAgICAgICAgICAgIHNjcm9sbGVkID0gbC0+
c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdN
b2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKICNlbmRpZgotICAgICAgICBp
ZiAobC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpKQorICAgICAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBs
ID8gbC0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICAgICAgaWYg
KGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2Fs
VG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
ICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3Jv
bGxlZCkgewpAQCAtOTIxLDYgKzk0NSwyMCBAQCBib29sIFJlbmRlckJveDo6aXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0CiAgICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWRBbmRI
YXNTY3JvbGxhYmxlQXJlYSgpOwogfQogCitib29sIFJlbmRlckJveDo6cmVxdWlyZXNMYXllcldp
dGhTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGlzUmVuZGVyVmlldygpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSB8fCBoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSB8fCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgaWYgKHN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lIHx8IHN0
eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5lZFBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBGSVhNRTogVGhpcyBpcyBiYWRseSBu
YW1lZC4gb3ZlcmZsb3c6aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCB5
ZXQgdGhpcyByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZS4KIGJvb2wgUmVuZGVyQm94OjpjYW5C
ZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIHsKQEAgLTkzOCw3ICs5NzYsNyBAQCBi
b29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpIGNvbnN0CiAKIGJv
b2wgUmVuZGVyQm94Ojp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKTsKKyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5
ZXIoKSAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojph
dXRvc2Nyb2xsKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKQEAgLTk5Nyw4ICsxMDM1LDggQEAg
UmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3Vy
Y2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Q
b2ludChzb3VyY2UpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEtPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2Fu
VXNlT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdApAQCAtMTAyNyw3ICsxMDY1LDExIEBAIFNjcm9s
bFBvc2l0aW9uIFJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogICAgICAgICByZXR1
cm4geyAwLCAwIH07CiAKICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxheWVy
KCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAg
cmV0dXJuIHsgMCwgMCB9OworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9z
aXRpb24oKTsKIH0KIAogTGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxv
d0NsaXAoKSBjb25zdApAQCAtMTU3NSw5ICsxNjE3LDEwIEBAIGJvb2wgUmVuZGVyQm94Ojpjb21w
dXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2ZmCiAgICAgaWYgKCFnZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVudChwYWludE9mZnNldCwgYmFj
a2dyb3VuZFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaGFzTGF5ZXIo
KSAmJiBsYXllcigpLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQorICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KICAgICByZXR1cm4gZm9yZWdyb3VuZElzS25vd25Ub0JlT3Bh
cXVlSW5SZWN0KGJhY2tncm91bmRSZWN0LCBiYWNrZ3JvdW5kT2JzY3VyYXRpb25UZXN0TWF4RGVw
dGgpOwogfQogCkBAIC0xODk0LDEwICsxOTM3LDEwIEBAIExheW91dFJlY3QgUmVuZGVyQm94Ojpv
dmVyZmxvd0NsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21l
CiAgICAgY2xpcFJlY3Quc2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRTaXplKGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsK
IAogICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KLSAgICBp
ZiAobGF5ZXIoKSkgeworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgaWYgKHNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIGNsaXBS
ZWN0Lm1vdmUobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsK
LSAgICAgICAgY2xpcFJlY3QuY29udHJhY3QobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5j
eSkpOworICAgICAgICAgICAgY2xpcFJlY3QubW92ZShzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0
KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3Jv
bGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5o
CmluZGV4IDNjZDgwYmNkMDcyZC4uZGYwZWExYzA3MTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCkBAIC01Niw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHx8ICFz
dHlsZSgpLmhhc0F1dG9Vc2VkWkluZGV4KCkgfHwgaGFzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0
aW9ucygpOwogICAgIH0KIAorICAgIGJvb2wgcmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJl
YSgpIGNvbnN0OwogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNv
bnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QgZmluYWw7CiAgICAgCiAgICAgLy8gUmV0
dXJucyBmYWxzZSBmb3IgdGhlIGJvZHkgcmVuZGVyZXIgaWYgaXRzIGJhY2tncm91bmQgaXMgcHJv
cGFnYXRlZCB0byB0aGUgcm9vdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGI5ODI3YzhhMTRkMi4uYmE1ZGNmYTQwMzU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlUm93LmgiCkBAIC00ODksOCArNDkwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9u
Vmlld3BvCiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9y
LmxvY2F0aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94
LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAg
ICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBw
aW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3gg
IT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zm
c2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Js
b2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5n
TGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9
IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgfQogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yLnNl
dExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsK
ICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmluZ0Jsb2NrUmVjdChjb250YWluZXJS
ZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTUwNyw4ICs1MTAsMTAgQEAgdm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMo
U3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdMYXllcikgewog
ICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciAtPSBGbG9h
dFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJv
cmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAg
ICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdD
bGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlw
cGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93LCBh
c3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90IHRyYW5zZm9ybWVkLgogICAgIHN0aWNreUJveFJlbGF0
aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5zZXRMb2NhdGlvbihzdGlja3lMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01NDcsMTEgKzU1MiwxNCBAQCBGbG9hdFJlY3QgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmluZ1JlY3RGb3JTdGlja3lQb3NpdGlvbigpIGNv
bnN0CiAKICAgICAgICAgRmxvYXRSZWN0IGNvbnN0cmFpbmluZ1JlY3QgPSBlbmNsb3NpbmdDbGlw
cGluZ0JveC5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QoY2xpcFJlY3QpLCAmdmlldygp
KS5ib3VuZGluZ0JveCgpOwogCi0gICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0ID0gRmxv
YXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxP
ZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllcikKKyAg
ICAgICAgICAgIHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIHNjcm9sbGFibGVFbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICBmbG9hdCBzY3JvbGxi
YXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIo
KSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBlbmNsb3NpbmdDbGlw
cGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkg
JiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpICYmIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAg
ICAgc2Nyb2xsYmFyT2Zmc2V0ID0gc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwogCiAgICAg
ICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChzY3JvbGxPZmZzZXQu
eCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQueSgpKSk7CiAgICAgICAgIHJldHVy
biBjb25zdHJhaW5pbmdSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAKaW5kZXggNTI0M2VhMWMxYjA0Li4xZmI5MGUxY2E4ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4
IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTk3LDYgKzk4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5o
IgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclJl
cGxpY2EuaCIKQEAgLTMwNCw0MCArMzA2LDI2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBt
X25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0
KGZhbHNlKQogICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQo
ZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5KGZhbHNl
KQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lk
ZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAg
ICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAgLCBtX3Zpc2libGVD
b250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNvbnRlbnQoZmFsc2Up
CiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2UpCiAgICAgLCBtX2hh
c1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydChmYWxzZSkKICAg
ICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5k
YW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnQo
ZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzQ29tcG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzKGZhbHNlKQotICAgICwgbV9oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2hhc1RyYW5zZm9ybWVkQW5jZXN0b3Io
ZmFsc2UpCiAgICAgLCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aW5zaWRlU1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6
Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5v
Tm90Q29tcG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkK
ICNlbmRpZgpAQCAtMzYxLDE2ICszNDksNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICAgICBt
X3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9oYXNWaXNpYmxl
Q29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCku
ZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Ny
b2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0g
ICAgICAgIGlmIChyZW5kZXJCb3goKSkgewotICAgICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9
IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKCFt
X3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9y
KCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotICAgICAgICB9Ci0gICAg
ICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAg
ICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQpAQCAtMzc4LDI5ICszNTYsMTAg
QEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgaWYgKGluUmVzaXplTW9kZSgpKQog
ICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0
cm95ZWQoKTsKIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsK
LQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9yZWZsZWN0aW9u
KQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9sbENvcm5lcigp
OwotICAgIGNsZWFyUmVzaXplcigpOwotCisgICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7
CiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRvUHJvdmlkZWRC
YWNraW5nKCkpIHsKQEAgLTkxMyw4ICs4NzIsMTAgQEAgT3B0aW9uU2V0PFJlbmRlckxheWVyOjpV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IFJlbmRlckxheWVyOjpmbGFnc0ZvclVwZGF0ZUxheWUK
ICAgICAgICAgaWYgKHBhcmVudC0+YmVoYXZlc0FzRml4ZWQoKSB8fCAocGFyZW50LT5yZW5kZXJl
cigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgIXBhcmVudC0+aGFzVHJhbnNmb3JtZWRBbmNlc3Rv
cigpKSkKICAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuRml4ZWRMYXllcik7CiAKLSAgICAgICAg
aWYgKHBhcmVudC0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50LT5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAgICBmbGFncy5hZGQo
U2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcik7CisgICAgICAgIGlmIChhdXRvKiBwYXJlbnRT
Y3JvbGxhYmxlTGF5ZXIgPSBwYXJlbnQtPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAg
IGlmIChwYXJlbnRTY3JvbGxhYmxlTGF5ZXItPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
cigpIHx8IHBhcmVudFNjcm9sbGFibGVMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQorICAgICAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNjcm9sbGlu
Z0xheWVyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmbGFnczsKQEAgLTk0OSw3
ICs5MTAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5
b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25T
ZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsKICAgICB1cGRhdGVMYXllclBv
c2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZCgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CiAKICAgICBpZiAoZ2Vv
bWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRo
aXMsIHBhcmVudCgpKTsKQEAgLTk1Nyw3ICs5MTksNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNl
dAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9uLgogICAgIGNs
ZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250
cm9scygpKSB7CiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlm
IChnZW9tZXRyeU1hcCkKICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0
b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBA
IC05NjYsNyArOTI4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8v
IGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3Ig
bGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihy
b290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3Vu
ZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5w
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsK
ICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEwMTMs
NyArOTc1LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICBtX2hhc1RyYW5zZm9ybWVk
QW5jZXN0b3IgPSBmbGFncy5jb250YWlucyhTZWVuVHJhbnNmb3JtZWRMYXllcik7CiAgICAgbV9o
YXMzRFRyYW5zZm9ybWVkQW5jZXN0b3IgPSBmbGFncy5jb250YWlucyhTZWVuM0RUcmFuc2Zvcm1l
ZExheWVyKTsKICAgICBtX2JlaGF2ZXNBc0ZpeGVkID0gZmxhZ3MuY29udGFpbnMoU2VlbkZpeGVk
TGF5ZXIpOwotICAgIHNldEhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmbGFncy5jb250
YWlucyhTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKSk7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldEhhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmbGFncy5jb250YWlucyhTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKSk7
CiAKICAgICAvLyBVcGRhdGUgdGhlIHJlZmxlY3Rpb24ncyBwb3NpdGlvbiBhbmQgc2l6ZS4KICAg
ICBpZiAobV9yZWZsZWN0aW9uKQpAQCAtMTAzNiwyMCArOTk5LDE1IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwg
T3B0aW9uU2V0CiAgICAgICAgIGZsYWdzLmFkZChTZWVuRml4ZWRMYXllcik7CiAgICAgfQogCi0g
ICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpCiAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVy
KTsKIAogICAgIGZvciAoUmVuZGVyTGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVy
UG9zaXRpb25zKGdlb21ldHJ5TWFwLCBmbGFncyk7CiAKICAgICAvLyBXaXRoIGFsbCBvdXIgY2hp
bGRyZW4gcG9zaXRpb25lZCwgbm93IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgot
ICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNl
IFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAg
ICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAg
ICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVN
YXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVk
KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhl
ZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAgICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0g
Y29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJbnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTEy
OSwyNyArMTA4Nyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAg
ICByZW5kZXJlcigpLmNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAg
QVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Ny
b2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNj
cm9sbCIpOwotCi0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jt
cyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dT
Y3JvbGwoKQotewotICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9y
bXMpOwotICAgIGlmICh0aGlzICE9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAg
IGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwot
Ci0gICAgLy8gRklYTUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBv
ZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCi0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZp
ZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93
Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRy
eU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBP
cHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29t
ZSBjb3JuZXIgY2FzZXMgd2hlcmUKQEAgLTEyMDIsMTIgKzExMzksOCBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcAogICAgIC8vIG9mIGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwg
c3RpbGwgcmVwYWludCBpdHNlbGYgcHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwog
ICAgIC8vIHVwZGF0ZWQgYWJvdmUuCiAKLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJv
b2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
OwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlTWFycXVl
ZVBvc2l0aW9uKCk7CiAKICAgICBpZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQogICAgICAg
ICBnZW9tZXRyeU1hcC0+cG9wTWFwcGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKQEAgLTE2OTgs
OCArMTYzMSwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgIFJlbmRlckxheWVyKiBw
b3NpdGlvbmVkUGFyZW50OwogICAgIGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpICYmIChwb3NpdGlvbmVkUGFyZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihy
ZW5kZXJlcigpLnN0eWxlKCkucG9zaXRpb24oKSkpKSB7CiAgICAgICAgIC8vIEZvciBwb3NpdGlv
bmVkIGxheWVycywgd2Ugc3VidHJhY3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXll
cidzIHNjcm9sbCBvZmZzZXQuCi0gICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91
dFNpemUocG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChw
b3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byogcG9zaXRpb25lZFBhcmVudFNjcm9sbGFibGVBcmVhID0gcG9zaXRpb25l
ZFBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09
IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0
aW9uKCkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVu
dC0+cmVuZGVyZXIoKS5pc0luRmxvd1Bvc2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBv
c2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBMYXlvdXRTaXplIG9m
ZnNldCA9IGRvd25jYXN0PFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIo
KSkub2Zmc2V0Rm9ySW5GbG93UG9zaXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94Pihy
ZW5kZXJlcigpKSk7CkBAIC0xNzA5LDE0ICsxNjQ0LDE2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZs
YWdzCiAgICAgICAgIEFTU0VSVChwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Nj
b3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcG9zaXRpb25lZFBhcmVudC0+
Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwogICAgIH0gZWxzZSBpZiAoYXV0byogcGFyZW50TGF5
ZXIgPSBwYXJlbnQoKSkgewotICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShw
YXJlbnQoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHBhcmVu
dExheWVyU2Nyb2xsYWJsZUFyZWEgPSBwYXJlbnRMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAg
ICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwYXJlbnRMYXllclNjcm9s
bGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgfQogCiAgICAgICAgIEFTU0VS
VChwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAg
ICAgfQogCi0gICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdT
Y29wZSB8fCBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGUgPT0gbV9ib3hTY3JvbGxpbmdTY29wZSkK
ICAgICAgICAgICAgIG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9IG5leHRTY3JvbGxpbmdTY29w
ZSgpOwogICAgIH0gZWxzZSBpZiAoIW1fY29udGVudHNTY3JvbGxpbmdTY29wZSB8fCBtX2NvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUgIT0gbV9ib3hTY3JvbGxpbmdTY29wZSkKQEAgLTE4NDIsOSArMTc3
OSw5IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5p
bmdCbG9ja09yZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllcikKK1JlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cigpIGNvbnN0CiB7Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpOworICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTE4NTUsMTUgKzE3OTIsMTUgQEAgc3RhdGlj
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllcikKICAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKIH0K
IAotc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3Vu
ZGFyaWVzKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QK
IHsKLSAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFp
bmluZ0Jsb2NrT3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXll
ckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAg
ICAgaWYgKGNyb3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5k
ZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsK
IH0KIAogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NG
cmFtZUJvdW5kYXJpZXMpIGNvbnN0CkBAIC0xODc3LDcgKzE4MTQsNyBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGlu
Y2x1ZGVTZWxmLAogICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNs
dWRlU2VsZiAmJiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKICAgICAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKICAgICAKLSAgICBmb3IgKGF1dG8qIG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKm5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgZm9yIChh
dXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1l
Qm91bmRhcmllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKICAgICAgICAgaWYg
KGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCiAgICAgICAgICAgICByZXR1cm4g
bmV4dExheWVyOwogICAgIH0KQEAgLTE4ODUsNTAgKzE4MjIsNiBAQCBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1
ZGVTZWxmLAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNm
b3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlE
KCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Ny
b2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygp
IGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChh
dXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICBy
ZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNj
cm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAg
IHJldHVybiByZW5kZXJlcigpLnNldHRpbmdzKCkuZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CiB7CiAgICAgUmVuZGVy
TGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAgLTI0NTQsMTkgKzIzNDcsNiBAQCBMYXlvdXRTaXpl
IFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29y
ZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQog
Ci1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsK
LSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5j
T3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYg
c2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkK
LSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigp
LnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQog
Ym9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDk2LDI4OSArMjM3Niw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCiB9CiAjZW5k
aWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkg
dmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRlZCgpICYm
IGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRoaXMgaXMg
b25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVz
ZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VD
b29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBp
bnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0gICAgLy8gVGhp
cyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDovL214ci5tb3pp
bGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnht
bCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAgaW50IGFkanVz
dGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBpZiAoYWRqdXN0
ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFk
anVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAt
IDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBhZGp1c3RlZERl
bHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxk
b3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1c3RlZERlbHRh
OwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJ
bnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRh
KGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYg
c291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJl
bmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7
Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBw
b3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRo
ZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50
IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54
KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtu
b3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAg
ICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAg
ICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50Owot
Ci0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJh
ZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAg
ICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBT
Y3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDAp
OwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7
Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29k
ZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50
U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChk
ZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlM
aW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAg
cmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGlu
ZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdT
Y3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09m
ZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAg
ICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBj
YW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3Jv
bGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Ny
b2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xs
T2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Nj
cm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVk
IG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0
IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0
aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBp
ZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNj
cm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFt
ZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQot
ewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewot
ICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9u
KGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBB
bmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4
LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQ
b3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0U2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVkID09IEFuaW1h
dGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3Jv
bGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0g
ICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
cG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNldCBSZW5k
ZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZz
ZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4o
SW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsK
LSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxp
bmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8
IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZz
ZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0g
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQo
c2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNl
dCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBw
cmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3Jv
bGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQotICAgIHNldEN1
cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAg
ICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0
Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgbmV3U2Ny
b2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNj
cm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZp
b3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24p
Ci0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotICAgIGlmIChu
ZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKLQot
ICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKLXsK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJl
bmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xs
UG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9
PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9z
aXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhl
eSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAgICAgIGlmICht
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3Qg
Y2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFz
b25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3Jv
bGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICAgICAg
U2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3Np
dGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7Ci0g
ICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsK
LSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAgICAgICAg
ICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICAg
ICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZz
ZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAg
c2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0
WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICAK
LSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxU
bygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1
cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0
byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAgICAgICBp
ZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAgICAgICAgICAg
IHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAgICAgdXBkYXRl
Q29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICBS
ZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhl
IHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBs
YXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBkb24ndCB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVw
ZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZpZXcuZnJhbWVW
aWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAgICAgICAg
Ly8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxh
eWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2No
ZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0
aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGlu
ZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlv
bnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAot
ICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBv
c2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgotICAgICAgICAg
ICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFm
ZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBi
ZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBh
IGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgotICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IHN0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAg
ICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRh
dGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0
aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVS
ZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpk
aWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBGcmFtZSYgZnJhbWUg
PSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwotICAgIC8vIFRo
ZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwotICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0gICAgCi0gICAg
TGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJl
Y3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiBy
ZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIp
OwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQo
cmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQotICAgICAgICBxdWFk
Rm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRl
UXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5ldmVudEhhbmRsZXIo
KS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1v
dmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Ci0gICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdB
bmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2lu
ZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBK
dXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAgaWYgKHJlcXVp
cmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVw
YWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2NoZWR1bGUgdGhlIHNj
cm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgp
LmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAgICBpZiAoc2Nyb2xs
c092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zm
c2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7
Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOwotfQotCiBz
dGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJh
bWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7
CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3JiaWRkZW4sIHBlcm1p
dCBzY3JvbGxpbmcuCkBAIC0yODIzLDcgKzI0MjAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNp
ZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVSZWN0OwogICAgIEZyYW1lVmll
dyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAgYXV0byog
cGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0Nv
bnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiAKICAgICBhdXRv
IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9s
bEJlaGF2aW9yIGJlaGF2aW9yKQogICAgIHsKQEAgLTI4MzMsNiArMjQzMCw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVS
ZWN0LCBib29sIGluc2lkCiAgICAgfTsKIAogICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkp
IHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOworCiAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cg
bGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVy
dHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQg
aGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KICAgICAgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKQEAgLTI4NDMsMjQgKzI0NDIsMTcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJv
b2wgaW5zaWQKICAgICAgICAgLy8gYm9yZGVyIGVkZ2UuIE1ha2UgdGhlIHJlY3RhbmdsZSByZWxh
dGl2ZSB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhLgogICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92
ZUJ5KC1MYXlvdXRQb2ludChib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJUb3AoKSkpOwog
Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKKyAgICAgICAgaWYgKGJveC0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBGb3IgZGlyZWN0aW9uOiBydGw7IHdyaXRpbmctbW9k
ZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwgYmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUu
IFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAgICAgIC8vIHN0YXJ0cyBmcm9tIHRoZSByaWdodCBz
aWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxvY2FsRXhwb3NlUmVjdCBzaG91bGQgc3Rh
cnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0gICAgICAgICAgICBsb2NhbEV4cG9zZVJl
Y3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKKyAg
ICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXNjcm9sbGFibGVM
YXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CiAgICAgICAgIH0KICAgICAgICAg
TGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJv
eC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBleHBhbmRTY3JvbGxSZWN0VG9WaXNpYmxlVGFy
Z2V0UmVjdFRvSW5jbHVkZVNjcm9sbFBhZGRpbmcoYm94LCBsYXllckJvdW5kcywgbG9jYWxFeHBv
c2VSZWN0KTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3Nl
KGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWdu
WCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91
bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBl
ZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLSAg
ICAgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVs
ZW1lbnQoKSwgb3B0aW9ucy5iZWhhdmlvcik7Ci0gICAgICAgICAgICBzZXRTY3JvbGxQb3NpdGlv
bihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAg
ICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxP
ZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0gICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92
ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7Ci0gICAgICAgICAgICBuZXdSZWN0ID0gTGF5b3V0
UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4
cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxQb3Np
dGlvbihvcHRpb25zLmJlaGF2aW9yLCByZXZlYWxSZWN0LCBsb2NhbEV4cG9zZVJlY3QpKQorICAg
ICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIXBhcmVu
dExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0g
cmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCkBAIC0yODc0LDcgKzI0NjYs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
YXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20g
YmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6
SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExh
eW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1Jl
Y3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJ
T1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIGVsZW1lbnQg
PSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3duZXJFbGVtZW50LT5jb250ZW50
RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgICAgICAgICAgICAg
IFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVudC0+cmVuZGVyQm94KCkgOiBu
dWxscHRyOwpAQCAtMjk1MSwyMyArMjU0Myw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAg
ICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZp
eGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29t
cG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlz
IGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5l
ZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVy
cyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0
b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0g
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAg
ICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVU
eXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25s
eSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5n
LgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVl
ZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBj
b21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
OjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShj
b25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVj
dCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0
IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVW
aWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBAIC0zMTE0LDcgKzI2ODksNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQs
IGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9y
UmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRP
ZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zm
c2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5kZXJlci0+c2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgIG5ld09mZnNldC5zZXRX
aWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRX
aWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAgfQpAQCAtMzEzNiwxMDM3ICsy
NzExLDEwOSBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFz
ZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAg
fQogCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5jZS5o
ZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1l
bnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhl
bWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3Rv
ciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFy
Z2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAg
fQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAo
aXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFj
dG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgp
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5
b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1
dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIg
dGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9z
aXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2Rl
SURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQo
KSkgewotICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGlu
YXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdO
b2RlSUQoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCk7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdElu
Y2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJl
aGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7Ci0gICAgaWYgKHNo
b3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Ny
b2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsK
LSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKLSAgICBy
ZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRo
KCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVp
Z2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQot
ICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9m
ZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KLSAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhl
aWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgp
IC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIGlm
IChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xs
T2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQotICAg
ICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBzdHJldGNoOwotI2Vsc2UK
LSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
QWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlz
QWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBj
b25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0dXJuICFzY3JvbGxDb3Ju
ZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0g
c2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
UmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAot
ewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsK
LSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4g
cmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFy
UG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJU
b0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0g
ICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBw
b2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUoKSBjb25zdAotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOwotfQotCi1J
bnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEludFNp
emUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBpZiAoIWhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldFdp
ZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkp
KTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAgICAgICAg
Y29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZp
c2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250ZW50c1NpemU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVhc29uID09IEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOwotICAg
ICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW5kZXJMYXll
cjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRT
dGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xs
KCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwoKQotewotICAg
IC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMg
aG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0jZW5kaWYKLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxheWVyOjpPdmVyZmxvd0Nv
bnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgcmVuZGVy
Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAgICAvLyBTY3JvbGxiYXJz
IHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5j
bHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0byB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKLQotICAgIGF1dG8gaXNO
b25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIg
PSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICBib29sIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdl
dCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAgYm9vbCBoYXZlUmVzaXpl
ciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci0gICAgYm9v
bCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAm
JiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVy
dGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6ZTsKLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBp
cyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAgY29ybmVyU2l6ZSA9IElu
dFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAotICAgICAgICAgICAgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgT3ZlcmZsb3dDb250
cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBhdXRvIGJhclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBiYXJSZWN0LnNo
aWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwot
ICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgICAgICBpZiAocGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgICAgICBiYXJSZWN0LnNo
aWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRo
KCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIg
PSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgaWYgKHBsYWNl
VmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRo
KHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgp
OwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICBiYXJS
ZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHJlc3VsdC52
ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgYXV0byBjb3JuZXJSZWN0
ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0g
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0
Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKLSAgICB9
OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgcmVzdWx0LnNjcm9s
bENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBpZiAoaGF2ZVJlc2l6ZXIp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIHJlc3Vs
dC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNj
cm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJS
ZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
OjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9o
QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElmIHdlIGFyZSBub3QgeWV0
IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KLSAg
ICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJh
ci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgTGF5b3V0UmVjdCByZXBh
aW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9k
ZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRS
ZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotICAg
IGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0
KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNj
cm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5C
eVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSho
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFp
bmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9
PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzaGFk
b3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxT
Y3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFy
KHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5k
ZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRl
cmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwotICAgIGlm
IChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xs
YmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxS
ZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAgIGVsc2UgewotICAgICAg
ICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAgICAgICAgZGlkQWRkU2Ny
b2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAgICBpZiAocGFnZSgpLmlz
TW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwot
ICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0
KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJh
cigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50
YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xs
YmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9s
bEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCku
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGlj
aXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGlu
ZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4g
IFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBp
ZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlm
IChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYg
cmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9u
c0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5
Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxF
bGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8gRGVzdHJveWluZyBvciBj
cmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFu
ZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4K
LSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGFi
bGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewot
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZvciAoYXV0byogbmV4dExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Ci0gICAg
ICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQotewotICAgIC8v
IEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRzLgotICAgIGlmICghaXM8
SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+
cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCogYm94ID0gZW5j
bG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNj
cm9sbGFibGVBcmVhKCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJl
Y3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQot
Ym9vbCBSZW5kZXJMYXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVi
dWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6
OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4
Jywgc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNC
YWNrZHJvcEZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBm
aWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAg
aWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVp
bGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsK
LSAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICgh
bV92QmFyCi0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAo
bV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFy
Ci0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQot
SW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Nj
cm9sbENvcm5lciB8fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewot
ICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIp
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1p
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
Qm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGgg
YWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVh
ZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVp
Z2h0KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QK
LXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19
Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25z
RGlydHkgPSBmYWxzZTsKLQotICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92
ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhl
aWdodChyb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAg
ICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkg
LSBib3gtPmJvcmRlckxlZnQoKSk7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJv
dW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9s
bE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BP
dmVyZmxvdykpOwotICAgIAotICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkKLXsKLSAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cg
PSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3Jv
bGxzT3ZlcmZsb3dYKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygp
ICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5
ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9J
bnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVu
ZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5
bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBz
Y3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlm
IChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250
YWxPdmVyZmxvdygpOwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1Zl
cnRpY2FsT3ZlcmZsb3coKTsKLQotICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xs
YmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9o
QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRl
cmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0
byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFk
ZGVkIG9yIHJlbW92ZWQuCi0gICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
PSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJX
aXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJv
eC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgp
OwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpB
dXRvKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAg
ICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAg
ICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigp
LnBhcmVudCgpOwotICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgp
ICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhp
YmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgp
KTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUg
c3RlcCkuCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9s
bGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9
Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0lu
dChib3gtPmNsaWVudEhlaWdodCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFy
OjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNl
dFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0K
LQotICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhp
cyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25z
KS4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9s
bE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwot
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQg
b2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNo
YW5nZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTk2NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5p
c0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICBpZiAocmVzaXpl
ICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7CisgICAgICAg
IGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKKyAgICAgICAgICAg
IC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCisgICAgICAgICAg
ICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2lu
VG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NT
X1BYKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21G
YWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9CisgICAgICAgIExheW91dFVu
aXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/
IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOworICAg
ICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7CisgICAgICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5k
VG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NT
X1BYKTsKICAgICB9CiAKLSAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAg
ICAgICBzZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworICAgIGRvY3VtZW50
LnVwZGF0ZUxheW91dCgpOwogCi0gICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgLy8g
RklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5k
b3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmll
dy4KIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3Qo
Y29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewot
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwogCi0gICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJz
ZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoaXM8UmVu
ZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVu
ZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJv
cmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25h
cHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkp
OwogCi0gICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFy
T25UaGVMZWZ0ID0gcmVuZGVyQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6
ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKIAotICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJz
ZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBPdmVyZmxvd0NvbnRy
b2xSZWN0cyByZXN1bHQ7CisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVy
U2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgewor
ICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0
aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3Qg
eyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNp
emUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
SW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIo
KSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OwogCi0gICAgaWYgKHJlY3RzLnJl
c2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3Jv
bGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgcmVzdWx0
LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlj
a25lc3MgfSk7CisgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0CitT
dHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAogewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFkZSBp
biB0aGUgVUkgcHJvY2Vzcy4KLSAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKLSNlbmRpZgorICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVu
ZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhp
cyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgp
KTsKIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIGlmICh0cmFuc2Zvcm0oKSkKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKIAotdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwogCi0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwogCi0gICAgLy8gT3Zl
cmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIg
dHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5n
IGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJs
YXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxs
IHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8v
IHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNz
IHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0
aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0
aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhl
IFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFy
cygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJs
YXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBu
ZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGlu
dG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdl
UmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAg
ICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIq
IHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYg
KCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZp
ZXcoKS5sYXllcigpOworICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwogCi0gICAgICAgIHBhaW50aW5nUm9v
dC0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1
cm47CisgICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIg
U3RyaW5nQnVpbGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFt
IHN0cmVhbTsKKyAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICAvLyBUaGlzIGNo
ZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0
d2ljZS4KLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRP
ZmZzZXQgPSBwYWludE9mZnNldDsKLSAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi0g
ICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZz
ZXQ7Ci0KLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBX
ZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29t
ZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcg
KG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29u
dGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7Ci0KLSAgICAvLyBOb3cgdGhh
dCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50
IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
Ci0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0gICAgaWYgKG1f
dkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICBtX3ZCYXItPnBh
aW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIg
d2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRo
ZSB3YXkgdXAgdG8gdGhlCi0gICAgLy8gZWRnZSBvZiB0aGUgYm94LgotICAgIHBhaW50U2Nyb2xs
Q29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOwotICAgIAot
ICAgIC8vIFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRo
ZSBzY3JvbGwgY29ybmVyLgotICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50
T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCkKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3Qg
SW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBhYnNSZWN0ID0gc2Ny
b2xsQ29ybmVyUmVjdCgpOwotICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBp
ZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVj
dChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUgb3Zl
cmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8gdG8gc2VlIHdoYXQgaXMgYmVo
aW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7Cisg
ICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Cisg
ICAgYXV0byByZXNpemVDb3JuZXIgPSByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiByZXNp
emVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVzaXpl
Q29ybmVyOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVy
UmVjdCkKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAogewotICAgIFJlZlB0
cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7Ci0gICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJT
aXplOwotICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+
PSAyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5l
ckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVD
b3JuZXJAMngiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6
ZUNvcm5lckltYWdlSGlSZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29y
bmVySW1hZ2UtPnNpemUoKTsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2NhbGUoMC41Zik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVz
aXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJl
YVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VMb1JlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkK
KyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFdpZHRoKCk7CiAKLSAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAg
IGNvbnRleHQuc2F2ZSgpOwotICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVy
UmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55
KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdo
dCgpKTsKLSAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Ci0gICAg
ICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdl
KCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXpl
clNpemUpKTsKLSAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIEZsb2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJl
Y3QocmVzaXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXpl
LCBjb3JuZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpKTsKLSAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdl
UmVjdCk7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgp
KTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WCgpIC0gb3ZlcmZsb3dS
ZWN0LngoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCkKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29u
c3QKIHsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9u
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOwotCi0gICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7
Ci0gICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKLSAgICBpZiAoIXJlc2l6
ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbEhlaWdodCgpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
KCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXItPnBhaW50
SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCBy
ZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVy
ICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAg
ICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2Yg
dGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8
fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAg
ICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFy
Z2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUs
IGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25h
cHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9JbnQob3Zl
cmZsb3dSZWN0Lm1heFkoKSAtIG92ZXJmbG93UmVjdC55KCkpOwogfQogCiBib29sIFJlbmRlckxh
eWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CkBA
IC00MTc3LDQyICsyODI0LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29u
dHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAogICAgIHJldHVybiBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIg
JiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xS
ZWN0OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
KSB7Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
aXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSBy
ZXN1bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRU
ZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5z
KGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5n
ZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9p
bnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQot
ewotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIGNvbnN0IExheW91
dFNpemUmIHN1YnBpeGVsT2Zmc2V0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhh
dmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290LCBPcHRpb25TZXQ8UGFpbnRMYXll
ckZsYWc+IHBhaW50RmxhZ3MsIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgcGFpbnRQb2xpY3ks
IEV2ZW50UmVnaW9uQ29udGV4dCogZXZlbnRSZWdpb25Db250ZXh0KQogewogICAgIE92ZXJsYXBU
ZXN0UmVxdWVzdE1hcCBvdmVybGFwVGVzdFJlcXVlc3RzOwpAQCAtNDIyOCwxNyArMjgzOSw2IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICAgICAgd2lkZ2V0LT5zZXRPdmVybGFwVGVzdFJl
c3VsdChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290KQotewotICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheWVyUGFpbnRpbmdJbmZvIHBhaW50aW5n
SW5mbyh0aGlzLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBM
YXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOwotICAgIHBhaW50TGF5ZXIoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7
Ci0KLSAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCiB2
b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mIHBhaW50aW5nSW5mbywgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIGNvbnN0IENsaXBSZWN0JiBjbGlwUmVjdCwgQm9yZGVyUmFkaXVz
Q2xpcHBpbmdSdWxlIHJ1bGUpCiB7CiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTQyNjEsNyArMjg2MSw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYKICAgICAgICAgLy8gYW55IGxheWVycyB3aXRoIG92
ZXJmbG93LiBUaGUgY29uZGl0aW9uIGZvciBiZWluZyBhYmxlIHRvIGFwcGx5IHRoZXNlIGNsaXBz
IGlzIHRoYXQgdGhlIG92ZXJmbG93IG9iamVjdCBiZSBpbiBvdXIKICAgICAgICAgLy8gY29udGFp
bmluZyBibG9jayBjaGFpbiBzbyB3ZSBjaGVjayB0aGF0IGFsc28uCiAgICAgICAgIGZvciAoUmVu
ZGVyTGF5ZXIqIGxheWVyID0gcnVsZSA9PSBJbmNsdWRlU2VsZkZvckJvcmRlclJhZGl1cyA/IHRo
aXMgOiBwYXJlbnQoKTsgbGF5ZXI7IGxheWVyID0gbGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAg
ICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVk
T3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiBsYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKKyAgICAgICAgICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBsYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSA/IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpIDogZmFsc2U7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlu
cyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVy
SXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ0NjMsNyArMzA2NCw4IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OnNldHVwRm9udFN1YnBpeGVsUXVhbnRpemF0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgYm9vbCYKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2
ZSB0byBkaXNhYmxlIHN1YnBpeGVsIHF1YW50aXphdGlvbiBmb3Igb3ZlcmZsb3cgY2xpcHMgb3Ig
c3ViZnJhbWVzIG9uY2Ugd2Ugc2Nyb2xsIHRob3NlCiAgICAgLy8gdGhpbmdzIG9uIHRoZSBzY3Jv
bGxpbmcgdGhyZWFkLgotICAgIGJvb2wgY29udGVudHNTY3JvbGxCeVBhaW50aW5nID0gKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHx8
IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOworICAgIGJvb2wgdXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcgPSBzY3JvbGxhYmxlQXJlYSgpID8gc2Nyb2xsYWJsZUFyZWEoKS0+dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSA6IGZhbHNlOworICAgIGJvb2wgY29udGVudHNTY3JvbGxC
eVBhaW50aW5nID0gKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKSB8fCAocmVuZGVyZXIoKS5mcmFtZSgpLm93bmVyRWxlbWVudCgpKTsKICAg
ICBib29sIGlzWm9vbWluZyA9ICFwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuaGFzU3RhYmxlUGFn
ZVNjYWxlRmFjdG9yKCk7CiAgICAgaWYgKHNjcm9sbGluZ09uTWFpblRocmVhZCB8fCBjb250ZW50
c1Njcm9sbEJ5UGFpbnRpbmcgfHwgaXNab29taW5nKSB7CiAgICAgICAgIGRpZFF1YW50aXplRm9u
dHMgPSBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpOwpAQCAtNDc2Niw4ICsz
MzY4LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBwYWludExpc3Qo
cG9zaXRpdmVaT3JkZXJMYXllcnMoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZv
LCBsb2NhbFBhaW50RmxhZ3MpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdP
dmVybGF5U2Nyb2xsYmFycyAmJiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbyk7CisgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7Cisg
ICAgICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fc2Nyb2xsYWJs
ZUFyZWEtPmhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgICAgICAgICBwYWludE92ZXJmbG93Q29u
dHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBh
aW50aW5nSW5mbyk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewog
ICAgICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGlt
ZSwgcGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5k
cy4KQEAgLTUyMzcsMTEgKzM4NDEsMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZENs
aXBwaW5nTWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXIKIAogdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCiB7CisgICAgQVNTRVJU
KG1fc2Nyb2xsYWJsZUFyZWEpOworCiAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxh
eWVyRnJhZ21lbnRzKSB7CiAgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAg
ICAgIHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlv
dXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRp
b24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9p
bnQodG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVy
Qm94TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCiAgICAg
ICAgICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0
cnVlKTsKICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZy
YWdtZW50LmJhY2tncm91bmRSZWN0KTsKICAgICB9CkBAIC01MjgwLDcgKzM4ODYsNyBAQCBib29s
IFJlbmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mCiAgICAgICAgICAgICAgICAgYWJzb2x1dGVMYXlvdXRWaWV3cG9y
dFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJz
ZWN0KGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
dmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKKyAgICAg
ICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50Vmlz
aWJsZVJlY3QpKTsKICAgICB9CiAKICAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRU
ZXN0TGF5ZXIodGhpcywgbnVsbHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0
VGVzdExvY2F0aW9uLCBmYWxzZSk7CkBAIC01NTExLDcgKzQxMTcsNyBAQCBSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAKICAg
ICBMYXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0
UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2Fs
UG9pbnQpKSB7CisgICAgaWYgKGNhblJlc2l6ZSgpICYmIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9z
Y3JvbGxhYmxlQXJlYS0+aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
aGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0
ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgfQpAQCAtNTU4NiwzNSArNDE5Miw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplcklu
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21l
bnQpIGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3Qo
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGF1
dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGF1dG8gY29ybmVyUmVj
dEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IElu
dFJlY3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJv
dHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJv
dW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsg
MCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgICAg
IH0KLSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0
Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgICAg
ICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZz
ZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUo
KSB9OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQg
PSBsYXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21l
bnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJv
dW5kcyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJl
Y3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5j
b250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7Ci0gICAgICAgICAgICBw
b2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0g
ZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICBjb25zdCBM
YXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9j
YXRpb24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRv
dWJsZSogek9mZnNldCkKIHsKQEAgLTYwNzUsOSArNDY1MiwxMiBAQCB2b2lkIFJlbmRlckxheWVy
OjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICBpZiAobV9ibG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBzY3JvbGxhYmxlQXJlYSgpOworCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9i
bG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9u
KCkpOwotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpKQorICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJlY3Qu
bW92ZUJ5KC1zY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpOworICAgIGlmIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICghc2Nyb2xsYWJsZUxheWVyIHx8ICFzY3JvbGxh
YmxlTGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpKQogICAgICAgICByZWN0LmludGVy
c2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5
b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZv
ci4KICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0
KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuY2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwg
bnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KQEAgLTYzNzQs
MjEgKzQ5NTQsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0
CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQog
Ci1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxs
cHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNX
aXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25z
dAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2lu
ZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02NDE5LDExICs0OTg0LDYgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFp
bnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVy
RmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQog
Ym9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0
IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5n
TGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NTQ3LDkg
KzUxMDcsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigp
IGNvbnN0CiAgICAgaWYgKCFpc05vcm1hbEZsb3dPbmx5KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgcmV0dXJuIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkKLSAgICAgICAgfHwgaGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi0gICAgICAgIHx8IHJlbmRlcmVyKCkuaXNUYWJs
ZVJvdygpCisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgKG1fc2Nyb2xsYWJsZUFyZWEtPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkgfHwgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
cmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0NhbnZhcygp
CiAgICAgICAgIHx8IHJlbmRlcmVyKCkuaXNWaWRlbygpCiAgICAgICAgIHx8IHJlbmRlcmVyKCku
aXNFbWJlZGRlZE9iamVjdCgpCkBAIC02NjY0LDcgKzUyMjUsNyBAQCBib29sIFJlbmRlckxheWVy
OjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNv
bnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVC
b3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAg
ICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Ny
b2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsK
IH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50
UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzQsNyArNTIzNSw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3Qp
IGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxl
KCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIo
KS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYg
KHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFy
ZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2OTksMzggKzUyNjAsNiBA
QCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1
ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJz
KCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJm
bG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRz
IGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0
byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgp
Lm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVy
Zmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJh
ciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6
b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwg
SG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9
IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Ny
b2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxT
Y3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3Jv
bGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9s
bGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hl
biBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAo
c2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxi
YXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0
RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJh
ciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRF
bmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAg
ICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFs
Rmxvd09ubHkoKSk7CkBAIC02NzUxLDYgKzUyODAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHls
ZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8v
IEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRo
cm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8v
IGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KICAgICBpZiAob2xkU3R5bGUp
IHsKQEAgLTY3NjIsMTggKzUyOTMsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAg
ICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAo
dmlzaWJpbGl0eUNoYW5nZWQgJiYgbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAg
ICAgfQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCku
c3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVu
ZGVyZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAgICAgICAgICAg
bV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAgICAgICAgbV9t
YXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkK
LSAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRl
clN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT5jcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0
eWxlKTsKKyAgICB9CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5
ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8gdG8gcmVjb21wdXRlIHRoZSBiaXQg
b25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgogICAgIHVwZGF0ZVNlbGZQYWludGlu
Z0xheWVyKCk7CkBAIC02Nzg4LDEzICs1MzE1LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVD
aGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUK
ICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1
c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2UgdmVyc2EpLgotICAgIGlmIChtX2hC
YXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAKLSAgICB1cGRhdGVTY3JvbGxDb3Ju
ZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVBbGxTY3JvbGxiYXJSZWxh
dGVkU3R5bGUoKTsKIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAg
IHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjgxNSw5OCArNTMzNyw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUq
IG9sZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYWJs
ZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgYm9vbCBpc1Zpc2libGVUb0hp
dFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLSAgICBpZiAoSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgp
KQotICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3du
ZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLQotICAgIGJvb2wgaXNTY3Jv
bGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OwotICAgIGJvb2wgYWRk
ZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotICAg
IAotICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRk
U2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNj
cm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9
IGZhbHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGlmIChh
ZGRlZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugb25s
eSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3Jv
bGxpbmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92
ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KLSAgICAgICAgICAgIHVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICB9Ci0gICAg
fQotI2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOwotI2VuZGlmCi19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKLXsKLSAgICBS
ZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRl
cmVyKCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/
IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9s
bGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAg
IGlmICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Ny
b2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIo
KS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVu
ZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5p
bml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNl
dFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclNj
cm9sbENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9zY3JvbGxD
b3JuZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5
bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsg
UHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7
Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xlYXJSZXNpemVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3Vt
ZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIg
c2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9yZXNpemVyLT5zZXRQ
YXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6
ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXNpemVyKCkKLXsKLSAgICBpZiAo
IW1fcmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51
bGxwdHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWZsZWN0
aW9uID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0cjsKQEAgLTY5ODgsNiArNTQxOCwy
NiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyRmlsdGVycygpCiAgICAgbV9maWx0ZXJz
ID0gbnVsbHB0cjsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6
OmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYWJsZUFy
ZWEgPSBzY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYSA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YT4oKnRoaXMpOworCisgICAgaWYgKCFoYWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+c3RvcmVTY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBtX3Njcm9sbGFi
bGVBcmVhLmdldCgpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyU2Nyb2xsYWJs
ZUFyZWEoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPmNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PmNsZWFyUmVzaXplcigpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbnVsbHB0cjsKKyAg
ICB9Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlcnNBZnRlclN0eWxlQ2hhbmdl
KCkKIHsKICAgICBpZiAoIWhhc0ZpbHRlcigpKSB7CkBAIC03MDA0LDYgKzU0NTQsMjkgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogICAgICAgICBt
X2ZpbHRlcnMtPnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKTsKIH0KIAordm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcigpKSkgeworICAgICAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIoKSk7CisgICAgaWYgKCFib3gucmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxl
QXJlYSgpKSB7CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCisgICAg
bV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5jcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisgICAg
bV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UobnVsbHB0
cik7CisgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworfQorCiB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKIHsKICAgICAvLyBSZW5kZXJMYXll
ckZpbHRlcnMgaXMgb25seSB1c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVycyBpbiBzb2Z0d2FyZSBt
b2RlLApAQCAtNzAzOCw3ICs1NTExLDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXll
ckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBwYXJl
bnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJldHVy
biBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIuZW5j
bG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5z
cGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MDYwLDYgKzU1MzMsMTEg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c2ltdWxhdGVGcmVxdWVudFBhaW50KCkKICAgICBTaW5nbGVQ
YWludEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIsIHBhZ2UoKS5s
YXN0UmVuZGVyaW5nVXBkYXRlVGltZXN0YW1wKCkgfTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS5nZXQoKTsKK30KKwogI2lmICFMT0dfRElTQUJMRUQKIHN0YXRp
YyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllcjo6RXZl
bnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24gcmVhc29uKQogewpAQCAtNzI2Miw5ICs1NzQwLDEw
IEBAIHN0YXRpYyB2b2lkIG91dHB1dFBhaW50T3JkZXJUcmVlUmVjdXJzaXZlKFRleHRTdHJlYW0m
IHN0cmVhbSwgY29uc3QgV2ViQ29yZTo6UmVuCiAgICAgICAgIHJldHVybiAiLSI7CiAgICAgfTsK
IAorICAgIGJvb2wgbGF5ZXJIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpID8gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yKCkgOiBmYWxzZTsKICAgICBzdHJlYW0gPDwgY29tcG9zaXRlZFBhaW50
aW5nRGVzdGluYXRpb25TdHJpbmcoKTsKICAgICBzdHJlYW0gPDwgKGxheWVyLmhhc0NvbXBvc2l0
aW5nRGVzY2VuZGFudCgpID8gImMiIDogIi0iKTsKLSAgICBzdHJlYW0gPDwgKGxheWVyLmhhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpID8gInMiIDogIi0iKTsKKyAgICBzdHJlYW0gPDwg
KGxheWVySGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID8gInMiIDogIi0iKTsKICAgICBz
dHJlYW0gPDwgKGxheWVyLmhhc1RyYW5zZm9ybWVkQW5jZXN0b3IoKSA/ICJ0IiA6ICItIik7CiAK
ICAgICBzdHJlYW0gPDwgIiAiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApp
bmRleCBhMTVkNTFiZmZmNWMuLmJlNjE5NzVhMTBjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmln
aHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAt
NTEsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0
ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgUmVuZGVyR2VvbWV0
cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBSZW5kZXJMYXllckNvbXBv
c2l0b3I7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFzcyBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBj
bGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsxNDQsMjEgQEAgc3RydWN0IFNj
cm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0
X3Q7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVy
KTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2Ns
YXNzIFJlbmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5
ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVy
QmFja2luZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogCiAgICAgZXhwbGljaXQgUmVu
ZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxh
eWVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIGVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJl
ZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAtMjIzLDYgKzIy
OCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29s
IGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAor
cHJvdGVjdGVkOgorICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNl
IGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVt
IGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQwMSw2ICs0MDksOCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHJlcGFpbnRJbmNsdWRpbmdEZXNjZW5kYW50cygpOwogCisgICAgdm9pZCB1cGRhdGVTY3Jv
bGxhYmxlQXJlYSgpOworCiAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgbGF5ZXIgY29udGVudHMg
bmVlZCB0byBiZSByZXBhaW50ZWQuIE9ubHkgaGFzIGFuIGVmZmVjdAogICAgIC8vIGlmIGxheWVy
IGNvbXBvc2l0aW5nIGlzIGJlaW5nIHVzZWQuCiAgICAgdm9pZCBzZXRCYWNraW5nTmVlZHNSZXBh
aW50KEdyYXBoaWNzTGF5ZXI6OlNob3VsZENsaXBUb0xheWVyID0gR3JhcGhpY3NMYXllcjo6Q2xp
cFRvTGF5ZXIpOwpAQCAtNDExLDggKzQyMSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVD
aGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAot
ICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0
KCk7IH0KLQogICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTZWxmUGFpbnRpbmdMYXllcjsgfQogCiAgICAgYm9vbCBjYW5ub3RCbGl0VG9XaW5kb3coKSBj
b25zdDsKQEAgLTQzMywxMDcgKzQ0MSwyOSBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uKCksIHNpemUoKSk7IH0KIAot
ICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIGNvbnRl
bnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50
c1NpemUoKSBjb25zdCBmaW5hbDsKLQogICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwogICAg
IGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKIAotICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50
KGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJz
IHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KLSAgICB2b2lkIHNjcm9sbEJ5UmVjdXJz
aXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVh
ID0gbnVsbHB0cik7Ci0KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25z
dCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKLQogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlw
ZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdp
dGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7
CiAKICAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1h
dGVkU2Nyb2xsOjpObyk7CiAgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRT
Y3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24o
Y29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7
CiAKICAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCi0gICAgdm9pZCBzY3Jv
bGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9s
bE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6
OlVuY2xhbXBlZCk7IH0KLSAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxU
b09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotCi0gICAgdm9pZCBz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKLSAg
ICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKyAgICB2b2lk
IHNjcm9sbFRvWE9mZnNldChpbnQgeCk7CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkp
OwogCiAgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBz
Y3JvbGxhYmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcn
cyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Ny
b2xsYWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lk
IGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBm
aW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29y
ZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYg
YWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxl
T3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29s
IGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJz
KCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
aG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xs
YWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7
IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3Jv
bGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSgpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1
cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBib29sIHJlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkg
eyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25j
aWxpYXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91
Y2hFdmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkaWRTdGFydFNjcm9sbCgp
IGZpbmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhl
IGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0
aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCi0gICAgYm9vbCBjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0cnVlIHdoZW4g
dGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRv
IGJlIHVwLXRvLWRhdGUpLgotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQot
Ci0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25v
cmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0KLSAgICBib29sIGhhc092ZXJmbG93Q29u
dHJvbHMoKSBjb25zdDsKICAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQg
bG9jYWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUgb2Zm
c2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7CiAK
LSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5
Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwotICAg
IHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpOwotCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwogICAgIHZvaWQgYXV0b3Njcm9s
bChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKQEAgLTU1
Niw5ICs0ODYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQo
Ym9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhh
c0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAg
ZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9k
ZSkgY29uc3QKQEAgLTYzOCw2ICs1NjUsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24oUG9zaXRpb25UeXBlKSBjb25zdDsKICAgICAKICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29u
c3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3Nz
RnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhbWVS
ZW5kZXJMYXllcigpIGNvbnN0OwogCiAgICAgLy8gVGhlIGxheWVyIHJlbGF0aXZlIHRvIHdoaWNo
IGNsaXBwaW5nIHJlY3RzIGZvciB0aGlzIGxheWVyIGFyZSBjb21wdXRlZC4KICAgICBSZW5kZXJM
YXllciogY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKSBjb25zdDsKQEAgLTY5OSw3ICs2MjgsNiBA
QCBwdWJsaWM6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxw
dHIsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gPSB7IH0sIFNlY3VyaXR5T3JpZ2luUGFpbnRQ
b2xpY3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4sIEV2ZW50UmVnaW9u
Q29udGV4dCogPSBudWxscHRyKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwotICAgIHZvaWQg
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQg
ewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXll
ciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0Ns
aXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNzg1LDExICs3MTMsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1f
c3RhdGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhdGljQmxv
Y2tQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3NpdGlvbiA9
IHBvc2l0aW9uOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmc7IH0KLSAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsg
fQotI2VuZGlmCi0KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRl
cmVyKCkuaGFzVHJhbnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0g
aGFzIHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4KiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpAQCAt
ODU5LDE2ICs3ODIsNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBlbnN1cmVC
YWNraW5nKCk7CiAgICAgdm9pZCBjbGVhckJhY2tpbmcoYm9vbCBsYXllckJlaW5nRGVzdHJveWVk
ID0gZmFsc2UpOwogCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xs
Q29ybmVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5h
bDsKLQotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KLSAgICB2b2lkIHNldEhh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcihib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcikgeyBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQotCiAgICAgLy8gTGF5ZXJzIHdpdGggdGhlIHNhbWUgU2Ny
b2xsaW5nU2NvcGUgYXJlIHNjcm9sbGVkIGJ5IHNvbWUgY29tbW9uIGFuY2VzdG9yIHNjcm9sbGVy
LiBVc2VkIGZvciBhc3luYyBzY3JvbGxpbmcuCiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+
IGJveFNjcm9sbGluZ1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9ib3hTY3JvbGxpbmdTY29wZTsg
fQogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBjb250ZW50c1Njcm9sbGluZ1Njb3BlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOyB9CkBAIC04ODYsMTEgKzc5
OSw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkgcmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBj
b29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0K
LSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Ny
b2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xs
YmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmlsdGVycygpIGNvbnN0OwogICAgIGJvb2wg
cmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMoKSBjb25zdDsKIApAQCAtOTE5LDggKzgy
Nyw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFnbWVudGVkRmxv
d0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiByZW5kZXJlcigpLnNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsgfQotCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKTsKICAgICBib29sIHBhaW50aW5nRnJlcXVl
bnRseSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLnBhaW50aW5nRnJl
cXVlbnRseSgpOyB9CiAKQEAgLTkzMSw3ICs4MzcsNyBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFz
cyBFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiB7IFBhaW50LCBTZXR0aW5nRGlkQ2hhbmdl
LCBTdHlsZSwgTm9uQ29tcG9zaXRlZEZyYW1lIH07CiAgICAgYm9vbCBpbnZhbGlkYXRlRXZlbnRS
ZWdpb24oRXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24pOwogCi0gICAgU3RyaW5nIGRlYnVn
RGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigp
IGNvbnN0OwogCiBwcml2YXRlOgogCkBAIC0xMDExLDkgKzkxNyw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CiAKLSAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQogICAgIGVudW0gVXBkYXRlTGF5
ZXJQb3NpdGlvbnNGbGFnIHsKICAgICAgICAgQ2hlY2tGb3JSZXBhaW50ICAgICAgICAgICAgICAg
ICAgICAgPSAxIDw8IDAsCiAgICAgICAgIE5lZWRzRnVsbFJlcGFpbnRJbkJhY2tpbmcgICAgICAg
ICAgID0gMSA8PCAxLApAQCAtMTAzOSw4ICs5NDIsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAg
dm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiwg
T3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CiAK
LSAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0Jikg
Y29uc3Q7Ci0KICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0
cmVlKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIsIFBhZ2luYXRpb25JbmNsdXNpb25Nb2Rl
KSBjb25zdDsKIAogICAgIExheW91dFBvaW50IHJlbmRlckJveExvY2F0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkubG9jYXRpb24oKSA6IExheW91dFBvaW50KCk7IH0KQEAgLTEwNTQsNiArOTU1LDgg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGVuc3VyZUxheWVyRmlsdGVycygpOwogICAgIHZvaWQgY2xl
YXJMYXllckZpbHRlcnMoKTsKIAorICAgIHZvaWQgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7
CisKICAgICBSZW5kZXJMYXllckZpbHRlcnMqIGZpbHRlcnNGb3JQYWludGluZyhHcmFwaGljc0Nv
bnRleHQmLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KSBjb25zdDsKICAgICBHcmFwaGljc0Nv
bnRleHQqIHNldHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwg
TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlv
dXRTaXplJiBvZmZzZXRGcm9tUm9vdCwgT3B0aW9uYWw8TGF5b3V0UmVjdD4mIHJvb3RSZWxhdGl2
ZUJvdW5kcyk7CiAgICAgdm9pZCBhcHBseUZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5h
bENvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+LCBjb25zdCBMYXllckZyYWdtZW50cyYpOwpAQCAtMTEwMCw2NCArMTAwMywxMyBAQCBwcml2
YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RD
b250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RG
aWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRp
b24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXll
ciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0g
bnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNr
Z3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5
b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwot
ICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAg
IGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNv
bnN0OwotCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAKLSAg
ICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29u
c3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0g
ICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxp
bmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZp
c2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNp
emUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25N
b3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hl
ZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25z
dCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAg
IHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5k
aWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVy
cmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFT
ZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xs
KCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50
U3RhdHVzKCk7CkBAIC0xMTk3LDE0ICsxMDQ5LDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb252ZXJ0
IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0YWtpbmcgdHJh
bnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29udGVudHMo
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBkYXRlUmVzaXpl
clN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQgZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6
ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwogCiAgICAgdm9p
ZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5n
RGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTMsMTEgKzEwNTcsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
IHJlYXNvbikgeyBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmVhc29uKTsgfQogICAgIGJvb2wgbXVzdENvbXBvc2l0ZUZvckluZGlyZWN0UmVhc29u
cygpIGNvbnN0IHsgcmV0dXJuIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjsgfQogCi0gICAg
TGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dC
b3R0b20oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OwotICAg
IExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OwotCiAgICAgc3RydWN0IE92ZXJmbG93
Q29udHJvbFJlY3RzIHsKICAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOwogICAg
ICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtMTIzMCw4ICsxMDY5LDYgQEAgcHJp
dmF0ZToKICAgICB9OwogICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpIGNvbnN0OwogCi0gICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChj
b25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OwotCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0
aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVy
Vmlld0xheWVyIDogMTsKQEAgLTEyNDgsNyArMTA4NSw2IEBAIHByaXZhdGU6CiAgICAgLy8gS2Vl
cHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBl
dmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgogICAgIGJvb2wgbV9p
blJlc2l6ZU1vZGUgOiAxOwogCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7
CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBu
byBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNo
aWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI2MCwxNCArMTA5
NiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ug
ZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVy
ZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQp
LgogICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBi
aXQgdHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9v
bCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVz
IDogMjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVz
RGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBt
X3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxl
RGVzY2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7
CiAgICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBt
X2JlaGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI3Nyw4ICsxMTExLDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50IDogMTsgLy8gSW4gdGhlIHotb3JkZXIg
dHJlZS4KIAogICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMg
OiAxOwotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJ
biB0aGUgbGF5ZXItb3JkZXIgdHJlZS4KLSAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdyA6IDE7CiAKICAgICBib29sIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7
CiAgICAgYm9vbCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CkBAIC0xMjg4LDE3ICsx
MTIwLDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFz
b24gOiA0OyAvLyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3
cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3Ry
YWluZWROb3RDb21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbiA6IDE7Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRh
dGlvbkFsbG93ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM5LDI1ICsxMTYwLDExIEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6
ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8
U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhl
IHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xs
U2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIg
b2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRy
PFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hl
PiBtX2NsaXBSZWN0c0NhY2hlOwotICAgIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNj
cm9sbGJhck9mZnNldDsKIAogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1h
cmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKICAg
ICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxp
bmdTY29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAg
ICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlv
bmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0
IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9z
aXRpb247CkBAIC0xMzY3LDEwICsxMTc0LDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1h
dGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBv
cmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAg
IC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXpl
ci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0g
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBv
aW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBw
YWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxS
ZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKQEAgLTEzNzgsNiArMTE4
MSw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJGaWx0ZXJz
PiBtX2ZpbHRlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyQmFja2luZz4gbV9i
YWNraW5nOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPiBt
X3Njcm9sbGFibGVBcmVhOwogICAgIAogICAgIFBhaW50RnJlcXVlbmN5VHJhY2tlciBtX3BhaW50
RnJlcXVlbmN5VHJhY2tlcjsKIH07CkBAIC0xNDUwLDYgKzEyNTQsMyBAQCB2b2lkIHNob3dQYWlu
dE9yZGVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJMYXllciopOwogdm9pZCBzaG93TGF5ZXJU
cmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9iamVjdCopOwogI2VuZGlmCiAKLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6UmVuZGVyTGF5ZXIpCi0gICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhJiBhcmVhKSB7IHJldHVybiBhcmVh
LmlzUmVuZGVyTGF5ZXIoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAxNmNh
ZGU4MDVhYTkuLjQ1OTE3M2VmZWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKQEAgLTQxOCwxMSArNDE5LDEzIEBAIHN0YXRp
YyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdD
b3ZlcmFnZShjb25zdCBSZW5kCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgdGlsZUNv
dmVyYWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAgIGJvb2wg
dXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNpemUo
KTsKICAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAgICAgICAg
aWYgKGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgICAg
IHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9s
bGluZzsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFi
bGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0g
VGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAgICAg
aWYgKGxheWVyLmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0
aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5n
OworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5n
OjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5nOworICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiB0aWxlQ292ZXJhZ2U7CiB9CkBAIC00MzUsNyArNDM4LDcgQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCkKICAgICAgICAgICAgIHRpbGVk
QmFja2luZy0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7CiAgICAgfQogCi0gICAgaWYg
KG1fb3duaW5nTGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpICYmIG1fc2Ny
b2xsZWRDb250ZW50c0xheWVyKSB7CisgICAgaWYgKG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSAmJiBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllcikgewogICAgICAgICBp
ZiAoYXV0byogdGlsZWRCYWNraW5nID0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnRpbGVkQmFj
a2luZygpKSB7CiAgICAgICAgICAgICBhdXRvIHRpbGVDb3ZlcmFnZSA9IGNvbXB1dGVPdmVyZmxv
d1RpbGVkQmFja2luZ0NvdmVyYWdlKG1fb3duaW5nTGF5ZXIpOwogICAgICAgICAgICAgdGlsZWRC
YWNraW5nLT5zZXRUaWxlQ292ZXJhZ2UodGlsZUNvdmVyYWdlKTsKQEAgLTc3NSw3ICs3NzgsNyBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ3VzdG9tQXBwZWFyYW5jZShjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCiBzdGF0aWMgYm9vbCBsYXllck9yQW5jZXN0b3JJc1RyYW5zZm9y
bWVkT3JVc2luZ0NvbXBvc2l0ZWRTY3JvbGxpbmcoUmVuZGVyTGF5ZXImIGxheWVyKQogewogICAg
IGZvciAoYXV0byogY3VyciA9ICZsYXllcjsgY3VycjsgY3VyciA9IGN1cnItPnBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8fCBjdXJyLT5oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChjdXJyLT5oYXNUcmFuc2Zvcm0oKSB8
fCAoY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjdXJyLT5zY3JvbGxhYmxlQXJlYSgpLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC05NzIsNyArOTc1LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVw
ZGF0ZUNvbmZpZ3VyYXRpb24oY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXMKICAg
ICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKICAgICAKICAgICBib29sIG5lZWRzRGVz
Y2VuZGFudHNDbGlwcGluZ0xheWVyID0gZmFsc2U7Ci0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZyA9IG1fb3duaW5nTGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OworICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVyLnNjcm9s
bGFibGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAKICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcpIHsKICAgICAgICAgLy8gSWYgaXQncyBzY3JvbGxhYmxlLCBpdCBoYXMgdG8gYmUgYSBib3gu
CkBAIC0xMjI3LDEwICsxMjMwLDEzIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNraW5nOjpj
b21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqCiAgICAgICAg
IHBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0ID0gc25hcHBlZEdyYXBoaWNzTGF5ZXIoY2xpcHBpbmdC
b3hPZmZzZXQsIGNsaXBwaW5nQm94LnNpemUoKSwgZGV2aWNlU2NhbGVGYWN0b3IoKSkubV9zbmFw
cGVkUmVjdDsKICAgICB9CiAKLSAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5z
Y3JvbGxhYmxlQXJlYSgpICYmIGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKS0+
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgIExheW91dFJlY3Qg
YW5jZXN0b3JDb21wb3NpdGVkQm91bmRzID0gYW5jZXN0b3JCYWNraW5nLT5jb21wb3NpdGVkQm91
bmRzKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsQ29udGFpbmVyQm94ID0gc2Nyb2xsQ29u
dGFpbmVyTGF5ZXJCb3goYW5jZXN0b3JSZW5kZXJCb3gpOwotICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0ID0gY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKKworICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUNvbXBvc2l0ZWRBbmNlc3RvciA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVDb21wb3NpdGVkQW5j
ZXN0b3ItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9
IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gdG9MYXlvdXRTaXpl
KGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlvbigpKSAtIHRvTGF5b3V0U2l6ZShzY3Jv
bGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAgICAgfQogCkBAIC0xMzY3
LDcgKzEzNzMsMTEgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1fc2Nyb2xsQ29u
dGFpbmVyTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFpbmVyQm94Lmxv
Y2F0aW9uKCkgLSBwYXJlbnRMYXllckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAgICAgIG1fc2Ny
b2xsQ29udGFpbmVyTGF5ZXItPnNldFNpemUocm91bmRlZEludFNpemUoTGF5b3V0U2l6ZShzY3Jv
bGxDb250YWluZXJCb3gud2lkdGgoKSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdodCgpKSkpOwog
Ci0gICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xheWVyLnNjcm9s
bE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVy
LnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsK
KyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0U2l6ZSBvbGRTY3JvbGxpbmdMYXll
ck9mZnNldCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpA
QCAtMTM4MSw3ICsxMzkxLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21l
dHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAKICAgICAgICAgYm9v
bCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1f
c2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCi0gICAgICAgIElu
dFNpemUgc2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5
ZXIuc2Nyb2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXplIHNjcm9sbFNpemU7CisgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxTaXplID0gSW50U2l6ZShz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVp
Z2h0KCkpOwogICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2l6ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkKQogICAgICAgICAgICAgbV9zY3Jv
bGxlZENvbnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCkBAIC0xNDkwLDE0ICsxNTAy
LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250
ZW50cyhTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKIHsKLSAgICBp
ZiAobV9vd25pbmdMYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIp
IHsKKyAgICBhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworCisgICAgaWYgKHNjcm9sbGFibGVB
cmVhLT5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKICAgICAgICAg
Ly8gSWYgc2Nyb2xsaW5nIGlzIGhhcHBlbmluZyBleHRlcm5hbGx5LCB3ZSBkb24ndCB3YW50IHRv
IHRvdWNoIHRoZSBsYXllciBib3VuZHMgb3JpZ2luIGhlcmUgYmVjYXVzZSB0aGF0IHdpbGwgY2F1
c2Ugaml0dGVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxP
ZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpOwotICAgICAgICBtX293
bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbih0cnVlKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1w
bGVtZW50IHRoZSBjb250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMg
bGF5ZXIsIHJhdGhlciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBz
ZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVy
UG9zaXRpb25BY3Rpb246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFy
ZWEtPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CiAgICAg
fQogCiAgICAgQVNTRVJUKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5wb3NpdGlvbigpLmlzWmVy
bygpKTsKQEAgLTE5MDksNyArMTkyNCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVDbGlwcGluZ1N0YWNrTGF5ZXJHZW9tZXRyeShMYXllckFuY2VzdG9yQ2xpcHBpbmdTCiAgICAg
ICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0
LnNpemUoKSk7CiAKICAgICAgICAgaWYgKGVudHJ5LmNsaXBEYXRhLmlzT3ZlcmZsb3dTY3JvbGwp
IHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0
YS5jbGlwcGluZ0xheWVyID8gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zm
c2V0KCkgOiBTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxP
ZmZzZXQ7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW50cnkuY2xp
cERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9s
bGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgICAgIGVudHJ5LmNsaXBw
aW5nTGF5ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAgbGFz
dENsaXBMYXllclJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMjAxMSwxMiArMjAyOCwx
NiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJl
cXVpcmVzSG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVx
dWlyZXNMYXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJM
YXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9v
d25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4g
cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xs
YmFyKCkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdApAQCAtMjAyNCwxMiArMjA0NSwxNiBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNv
bnN0CiAgICAgaWYgKCFpczxSZW5kZXJCb3g+KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5
ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xs
YmFyID0gbV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xs
YmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBz
Y3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIg
PSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYmFyKTsKIH0KIApAQCAtMjA2NSwxMCArMjA5MCwxMiBAQCBib29sIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9y
aXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIo
bV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNj
cm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
b3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYg
KGhvcml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmlu
Z0xheWVyLCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9s
bGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgVmVydGljYWxT
Y3JvbGxiYXIpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgSG9y
aXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXll
ckNoYW5nZWQpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFi
bGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVBcmVhLCBWZXJ0aWNhbFNj
cm9sbGJhcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsK
QEAgLTIwNzYsNyArMjEwMywxMSBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3Zl
cmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAg
ICBpZiAoIW1fb3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGlmICghbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFz
Y3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBAIC0yMDk4LDE2ICsy
MTI5LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUgcmVsYXRpdmUgdG8g
dGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5nTGF5ZXIub3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7Ci0KKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJsZUxheWVyLT5v
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKICAgICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCps
YXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0KTsKLSAgICAg
ICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9uU2Nyb2xs
YmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkg
JiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBpZiAoYXV0byog
bGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0zMDg2LDcgKzMxMTYsMTAgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKIAogICAgIGlmIChtX3Njcm9sbGVkQ29udGVudHNMYXll
ciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsKICAgICAgICAg
RmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVkUmVjdEZvclBhaW50aW5nOwot
ICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zm
c2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXllci5zY3JvbGxPZmZz
ZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsKKyAgICAgICAgU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGxheWVyRGlydHlSZWN0
Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRv
TGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7
CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
bGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAgLTMxMzIsNyArMzE2NSw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25zdCBHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgICAgIGlmICgmbGF5ZXIgPT0gJm1fb3du
aW5nTGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhjb250ZXh0
LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCi0gICAgICAgICAgICBpZiAobGF5ZXIuY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+Y29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKICAg
ICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJ
bmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092
ZXJsYXlTY3JvbGxiYXJzKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsYXllci5wYWlu
dExheWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKQEAg
LTM0MjAsMTcgKzM0NTQsMjYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVu
dHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAgICAgICAgICAg
IHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAogICAgIH0gZWxz
ZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJs
ZUxheWVyKTsKKworICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPmhvcml6
b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYgKGdy
YXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBh
aW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwg
ZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwor
ICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
KCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09
IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gbV9v
d25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJS
ZWN0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAg
ICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoLWNvcm5lclJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIExheW91dFJlY3QgdHJhbnNmb3Jt
ZWRDbGlwID0gTGF5b3V0UmVjdChjbGlwKTsKICAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmVC
eShjb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBtX293bmluZ0xheWVyLnBhaW50U2Ny
b2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRSZWN0KHRyYW5zZm9ybWVk
Q2xpcCkpOwotICAgICAgICBtX293bmluZ0xheWVyLnBhaW50UmVzaXplcihjb250ZXh0LCBJbnRQ
b2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRSZWN0KHRyYW5zZm9y
bWVkQ2xpcCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVzaXplcihjb250ZXh0
LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwogICAgIH0KICNpZm5kZWYgTkRFQlVHCiAg
ICAgcmVuZGVyZXIoKS5wYWdlKCkuc2V0SXNQYWludGluZyhmYWxzZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmluZGV4IGNmYzRh
YjE1Mjg4Ni4uNTIzNTQ1NjEzOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUg
IlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTEzOTcsNyArMTM5OCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KFJlbmRlckxheWVyJiBs
YXllciwgVmVjdG9yCiAgICAgICAgIGlmIChsYXllckJhY2tpbmctPmhhc0FuY2VzdG9yQ2xpcHBp
bmdMYXllcnMoKSAmJiBsYXllckJhY2tpbmctPmFuY2VzdG9yQ2xpcHBpbmdTdGFjaygpLT5oYXNB
bnlTY3JvbGxpbmdMYXllcnMoKSkKICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLmxheWVyc0Ns
aXBwZWRCeVNjcm9sbGVycy0+YXBwZW5kKCZsYXllcik7CiAKLSAgICAgICAgaWYgKGxheWVyLmhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGxheWVyLnNjcm9s
bGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKQogICAgICAgICAgICAgdHJhdmVyc2FsU3RhdGUub3ZlcmZsb3dTY3Jv
bGxMYXllcnMtPmFwcGVuZCgmbGF5ZXIpOwogCiAgICAgICAgIGxheWVyQmFja2luZy0+dXBkYXRl
QWZ0ZXJEZXNjZW5kYW50cygpOwpAQCAtMjAwMSw3ICsyMDAyLDcgQEAgc3RhdGljIEFuY2VzdG9y
VHJhdmVyc2FsIHRyYXZlcnNlQW5jZXN0b3JMYXllcnMoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
LCBGdW5jdGkKIAogc3RhdGljIGJvb2wgY3JlYXRlc0NsaXBwaW5nU2NvcGUoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyKQogewotICAgIHJldHVybiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogfQog
CiBzdGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGVuY2xvc2lu
Z0NsaXBwaW5nU2NvcGVzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5
ZXImIHJvb3RMYXllcikKQEAgLTIwMDksNyArMjAxMCw3IEBAIHN0YXRpYyBWZWN0b3I8TGF5ZXJP
dmVybGFwTWFwOjpMYXllckFuZEJvdW5kcz4gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMoY29uc3Qg
UmVuCiAgICAgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGNsaXBwaW5n
U2NvcGVzOwogICAgIGNsaXBwaW5nU2NvcGVzLmFwcGVuZCh7IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5
ZXImPihyb290TGF5ZXIpLCB7IH0gfSk7CiAKLSAgICBpZiAoIWxheWVyLmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpKQorICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSB8fCAh
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkp
CiAgICAgICAgIHJldHVybiBjbGlwcGluZ1Njb3BlczsKIAogICAgIHRyYXZlcnNlQW5jZXN0b3JM
YXllcnMobGF5ZXIsIFsmXShjb25zdCBSZW5kZXJMYXllciYgYW5jZXN0b3JMYXllciwgYm9vbCBp
bkNvbnRhaW5pbmdCbG9ja0NoYWluLCBib29sKSB7CkBAIC0yMDQxLDcgKzIwNDIsNyBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwKExheWVyT3ZlcmxhcE1hcCYg
b3ZlcmxhcE1hcCwgY29uc3QgUgogICAgIGF1dG8gY2xpcHBpbmdTY29wZXMgPSBlbmNsb3NpbmdD
bGlwcGluZ1Njb3BlcyhsYXllciwgcm9vdFJlbmRlckxheWVyKCkpOwogCiAgICAgTGF5b3V0UmVj
dCBjbGlwUmVjdDsKLSAgICBpZiAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
KCkpIHsKKyAgICBpZiAobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxl
QXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAgICAgICAvLyBD
b21wdXRlIGEgY2xpcCB1cCB0byB0aGUgY29tcG9zaXRlZCBzY3JvbGxpbmcgYW5jZXN0b3IsIHRo
ZW4gY29udmVydCBpdCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcy4KICAgICAgICAgYXV0byYgc2Ny
b2xsaW5nU2NvcGUgPSBjbGlwcGluZ1Njb3Blcy5sYXN0KCk7CiAgICAgICAgIGF1dG8mIHNjb3Bl
TGF5ZXIgPSBzY3JvbGxpbmdTY29wZS5sYXllcjsKQEAgLTI4ODksNyArMjg5MCw3IEBAIFZlY3Rv
cjxDb21wb3NpdGVkQ2xpcERhdGE+IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2Vz
dG9yQ2xpcHBpbmdTdGFjayhjCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNDb250YWluaW5n
QmxvY2tDaGFpbiAmJiBhbmNlc3RvckxheWVyLnJlbmRlcmVyKCkuaGFzQ2xpcE9yT3ZlcmZsb3dD
bGlwKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICAgICAgICAgIGlmIChoYXZlTm9uU2Ny
b2xsYWJsZUNsaXBwaW5nSW50ZXJtZWRpYXRlTGF5ZXIpIHsKICAgICAgICAgICAgICAgICAgICAg
cHVzaE5vblNjcm9sbGFibGVDbGlwKCpjdXJyZW50Q2xpcHBlZExheWVyLCBhbmNlc3RvckxheWVy
KTsKICAgICAgICAgICAgICAgICAgICAgaGF2ZU5vblNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVk
aWF0ZUxheWVyID0gZmFsc2U7CkBAIC0yOTMzLDcgKzI5MzQsNyBAQCBTY3JvbGxpbmdOb2RlSUQg
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphc3luY1Njcm9sbGFibGVDb250YWluZXJOb2RlSUQoY29u
c3QgUmVuZAogCiAgICAgU2Nyb2xsaW5nTm9kZUlEIGNvbnRhaW5lclNjcm9sbGluZ05vZGVJRCA9
IDA7CiAgICAgdHJhdmVyc2VBbmNlc3RvckxheWVycygqZW5jbG9zaW5nTGF5ZXIsIFsmXShjb25z
dCBSZW5kZXJMYXllciYgYW5jZXN0b3JMYXllciwgYm9vbCBpc0NvbnRhaW5pbmdCbG9ja0NoYWlu
LCBib29sIC8qaXNQYWludE9yZGVyQW5jZXN0b3IqLykgewotICAgICAgICBpZiAoaXNDb250YWlu
aW5nQmxvY2tDaGFpbiAmJiBhbmNlc3RvckxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKSkgeworICAgICAgICBpZiAoaXNDb250YWluaW5nQmxvY2tDaGFpbiAmJiBhbmNlc3Rv
ckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgp
LT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAgIGNvbnRh
aW5lclNjcm9sbGluZ05vZGVJRCA9IGxheWVyU2Nyb2xsaW5nTm9kZUlEKGFuY2VzdG9yTGF5ZXIp
OwogICAgICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVyc2FsOjpTdG9wOwogICAgICAgICB9
CkBAIC0zMjQzLDcgKzMyNDQsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclBvc2l0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplYwogCiBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgUmVxdWlyZXNDb21wb3NpdGluZ0RhdGEmIHF1
ZXJ5RGF0YSkgY29uc3QKIHsKLSAgICBpZiAoIWxheWVyLmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFi
bGVBcmVhKCktPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKHF1ZXJ5RGF0YS5sYXlvdXRVcFRvRGF0ZSA9PSBMYXlvdXRVcFRvRGF0
ZTo6Tm8pIHsKQEAgLTMyNTEsNyArMzI1Miw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yT3ZlcmZsb3dTY3JvbGxpbmcoY29uc3QgUmVuZGVyCiAg
ICAgICAgIHJldHVybiBsYXllci5pc0NvbXBvc2l0ZWQoKTsKICAgICB9CiAKLSAgICByZXR1cm4g
bGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiB9
CiAKIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21w
dXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGJv
b2wgaGFzQ29tcG9zaXRlZERlc2NlbmRhbnRzLCBib29sIGhhczNEVHJhbnNmb3JtZWREZXNjZW5k
YW50cywgYm9vbCBwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKSBjb25zdApAQCAtMzI3Myw3ICsz
Mjc0LDcgQEAgSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmNvbXB1dGVJbmRpcmVjdENvbXBvc2l0aW5nUmVhc28KICAgICB9CiAKICAgICAvLyBJZiB0aGlz
IGxheWVyIHNjcm9sbHMgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBsYXllciB0aGF0IGl0IHdvdWxk
IHBhaW50IGludG8sIGl0IG5lZWRzIHRvIGdldCBjb21wb3NpdGVkLgotICAgIGlmICghcGFpbnRz
SW50b1Byb3ZpZGVkQmFja2luZyAmJiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSkgeworICAgIGlmICghcGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZyAmJiBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxpbmdBbmNlc3RvcigpKSB7CiAgICAgICAgIGF1dG8qIHBhaW50RGVzdGluYXRpb24gPSBsYXll
ci5wYWludE9yZGVyUGFyZW50KCk7CiAgICAgICAgIGlmIChwYWludERlc3RpbmF0aW9uICYmIGxh
eWVyU2Nyb2xsQmVoYWhhdmlvclJlbGF0aXZlVG9Db21wb3NpdGVkQW5jZXN0b3IobGF5ZXIsICpw
YWludERlc3RpbmF0aW9uKSAhPSBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yOjpOb25lKQogICAg
ICAgICAgICAgcmV0dXJuIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok92ZXJmbG93U2Nyb2xs
UG9zaXRpb25pbmc7CkBAIC0zMzEwLDcgKzMzMTEsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5
ZQogCiAgICAgYXV0byogZW5jbG9zaW5nT3ZlcmZsb3dMYXllciA9IGxheWVyLmVuY2xvc2luZ092
ZXJmbG93Q2xpcExheWVyKEV4Y2x1ZGVTZWxmKTsKIAotICAgIGlmIChlbmNsb3NpbmdPdmVyZmxv
d0xheWVyICYmIGVuY2xvc2luZ092ZXJmbG93TGF5ZXItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSkgeworICAgIGlmIChlbmNsb3NpbmdPdmVyZmxvd0xheWVyICYmIGVuY2xvc2lu
Z092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkgJiYgZW5jbG9zaW5nT3ZlcmZsb3dMYXll
ci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7
CiAgICAgICAgIGlmIChlbmNsb3NpbmdBY2NlbGVyYXRlZE92ZXJmbG93TGF5ZXIpCiAgICAgICAg
ICAgICAqZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyID0gZW5jbG9zaW5nT3ZlcmZs
b3dMYXllcjsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzQyLDcgKzMzNDMsNyBAQCBib29s
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRPclN0aWNr
eUxheWVyKGNvbnN0IFJlbmRlcgogCiAgICAgLy8gRklYTUU6IEhhbmRsZSBmaXhlZCBpbnNpZGUg
b2YgYSB0cmFuc2Zvcm0sIHdoaWNoIHNob3VsZCBub3QgYmVoYXZlIGFzIGZpeGVkLgogICAgIGZv
ciAoYXV0byogYW5jZXN0b3IgPSBsYXllci5wYXJlbnQoKTsgYW5jZXN0b3I7IGFuY2VzdG9yID0g
YW5jZXN0b3ItPnBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChhbmNlc3Rvci0+aGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoYW5jZXN0b3ItPnNjcm9sbGFibGVB
cmVhKCkgJiYgYW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBpZiAoYW5j
ZXN0b3ItPmlzU3RhY2tpbmdDb250ZXh0KCkgJiYgYW5jZXN0b3ItPmlzQ29tcG9zaXRlZCgpICYm
IGFuY2VzdG9yLT5yZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0zMzkzLDggKzMzOTQsMTAgQEAgc3RhdGljIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
LAogICAgICAgICBpZiAoYW5jZXN0b3JMYXllciA9PSAmaW50ZXJtZWRpYXRlTGF5ZXIpCiAgICAg
ICAgICAgICBzYXdJbnRlcm1lZGlhdGVMYXllciA9IHRydWU7CiAKLSAgICAgICAgaWYgKGFuY2Vz
dG9yTGF5ZXItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7CisgICAgICAg
IGlmIChhdXRvKiBhbmNlc3RvckxheWVyU2Nyb2xsYWJsZUFyZWEgPSBhbmNlc3RvckxheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoYW5jZXN0b3JMYXllclNjcm9sbGFi
bGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPihhbmNlc3RvckxheWVyKTsKKyAgICAg
ICAgfQogCiAgICAgICAgIGFuY2VzdG9yTGF5ZXIgPSBhbmNlc3RvckxheWVyLT5wYXJlbnQoKTsK
ICAgICB9CkBAIC0zNDA0LDcgKzM0MDcsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0NvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsCiAKIFNj
cm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllclNjcm9s
bEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllciwgY29uc3QgUmVuZGVyTGF5ZXImIGNvbXBvc2l0ZWRBbmNlc3RvcikKIHsKLSAgICBp
ZiAoIWxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQorICAgIGlmICghbGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKSB8fCAhbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpCiAgICAgICAgIHJldHVybiBTY3JvbGxQb3NpdGlvbmlu
Z0JlaGF2aW9yOjpOb25lOwogCiAgICAgYm9vbCBjb21wb3NpdGVkQW5jZXN0b3JJc0luc2lkZVNj
cm9sbGVyID0gZmFsc2U7CkBAIC0zNDQzLDcgKzM0NDYsNyBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0
U3RhdGlvbmFyeUxheWVyUmVsYXRlZE92ZXJmbG93Tm9kZXMoY29uc3QgUmVuZGVyTGF5ZXImIGxh
eWVyLAogICAgICAgICBpZiAoaXNDb250YWluaW5nQmxvY2tDaGFpbiAmJiBpc1BhaW50T3JkZXJB
bmNlc3RvcikKICAgICAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKIAot
ICAgICAgICBpZiAoc2VlblBhaW50T3JkZXJBbmNlc3RvciAmJiAhaXNDb250YWluaW5nQmxvY2tD
aGFpbiAmJiBhbmNlc3RvckxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgaWYgKHNlZW5QYWludE9yZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Jsb2Nr
Q2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQogICAg
ICAgICAgICAgYXBwZW5kT3ZlcmZsb3dMYXllck5vZGVJRChhbmNlc3RvckxheWVyKTsKIAogICAg
ICAgICByZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OkNvbnRpbnVlOwpAQCAtMzQ1OCw3ICszNDYx
LDcgQEAgU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvciBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNv
bXB1dGVDb29yZGluYXRlZFBvc2l0aW9uaW5nRm8KICAgICBpZiAobGF5ZXIucmVuZGVyZXIoKS5p
c0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhh
dmlvcjo6Tm9uZTsKICAgICAKLSAgICBpZiAoIWxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpKQorICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSB8fCAhbGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpCiAgICAgICAg
IHJldHVybiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yOjpOb25lOwogCiAgICAgYXV0byogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOwpAQCAtNDQ0
MCw3ICs0NDQzLDggQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0
YWNoU2Nyb2xsaW5nTm9kZShSZW5kZXJMYXllciYgbGF5ZXIsIFMKICAgICAgICAgbV9jbGlwTGF5
ZXItPnNldFNjcm9sbGluZ05vZGVJRChub2RlSUQpOwogI2VuZGlmCiAKLSAgICBtX3Njcm9sbGlu
Z05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFrUHRyKGxheWVyKSk7CisgICAgQVNT
RVJUKGxheWVyLnNjcm9sbGFibGVBcmVhKCkpOworICAgIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJN
YXAuYWRkKG5vZGVJRCwgbWFrZVdlYWtQdHIoKmxheWVyLnNjcm9sbGFibGVBcmVhKCkpKTsKIAog
ICAgIHJldHVybiBub2RlSUQ7CiB9CkBAIC00NDc1LDggKzQ0NzksOCBAQCB2b2lkIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldpdGhSb2xlKFJlbmRl
ckxheWVyJiBsYQogICAgIGF1dG8gdW5yZWdpc3Rlck5vZGUgPSBbJl0oU2Nyb2xsaW5nTm9kZUlE
IG5vZGVJRCkgewogICAgICAgICBhdXRvIGNoaWxkTm9kZXMgPSBzY3JvbGxpbmdDb29yZGluYXRv
ci5jaGlsZHJlbk9mTm9kZShub2RlSUQpOwogICAgICAgICBmb3IgKGF1dG8gY2hpbGROb2RlSUQg
OiBjaGlsZE5vZGVzKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byB3ZWFrTGF5ZXIgPSBtX3Njcm9s
bGluZ05vZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCi0gICAgICAgICAgICAgICAgd2Vh
a0xheWVyLT5zZXROZWVkc1Njcm9sbGluZ1RyZWVVcGRhdGUoKTsKKyAgICAgICAgICAgIGlmIChh
dXRvIHdlYWtTY3JvbGxhYmxlQXJlYSA9IG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KGNo
aWxkTm9kZUlEKSkKKyAgICAgICAgICAgICAgICB3ZWFrU2Nyb2xsYWJsZUFyZWEtPmxheWVyKCku
c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtX3Nj
cm9sbGluZ05vZGVUb0xheWVyTWFwLnJlbW92ZShub2RlSUQpOwpAQCAtNDY1Nyw4ICs0NjYxLDEx
IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGlu
Z05vZGVGb3JWaWV3cG9ydENvbnN0cmFpbmVkCiBMYXlvdXRSZWN0IFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdChjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBhbmNlc3RvckxheWVyIG5lZWRzIHRvIGJlIGFsd2F5cyBub24tbnVsbCwgc28gc2hvdWxk
IGJlY29tZSBhIHJlZmVyZW5jZS4KLSAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpCi0gICAgICAgIHJl
dHVybiBMYXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci52aXNpYmxlU2l6ZSgpKSk7Cisg
ICAgaWYgKCFhbmNlc3RvckxheWVyKSB7CisgICAgICAgIGlmICghbGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KHsgfSwgTGF5b3V0U2l6ZShsYXllci5zY3JvbGxhYmxlQXJlYSgpLT52aXNpYmxl
U2l6ZSgpKSk7CisgICAgfQogCiAgICAgTGF5b3V0UmVjdCBzY3JvbGxhYmxlUmVjdDsKICAgICBp
ZiAoaXM8UmVuZGVyQm94PihsYXllci5yZW5kZXJlcigpKSkKQEAgLTQ2NzgsMTEgKzQ2ODUsMTQg
QEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
U2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCwgUmUKICAgICAgICAgICAgIGZpeGVkUm9vdEJhY2tncm91
bmRMYXllcigpLCBjbGlwTGF5ZXIoKSwgcm9vdENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAg
IGZyYW1lVmlldy5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgZnJhbWVWaWV3LmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlQXJlYSA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChz
Y3JvbGxhYmxlQXJlYSk7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5n
KCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7
IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250
YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAg
ICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
fSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCksIHNjcm9sbGFibGVBcmVhLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAg
ICAgfQogfQogCkBAIC00NzIwLDggKzQ3MzAsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUK
ICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQog
ICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAq
c2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5n
Tm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9s
bGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2Vz
ICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5w
YXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJlYSgp
KTsKKyAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Ny
b2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpsYXllci5zY3JvbGxhYmxlQXJlYSgpKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBuZXdOb2RlSUQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKaW5kZXggYzE1MWUyM2Qw
ZWY2Li4yY2Q3MWNiOGYzZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyVXBkYXRlci5oIgogI2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvT3B0aW9u
U2V0Lmg+CiAKQEAgLTYzNSw3ICs2MzYsNyBAQCBwcml2YXRlOgogICAgIENvbG9yIG1fdmlld0Jh
Y2tncm91bmRDb2xvcjsKICAgICBDb2xvciBtX3Jvb3RFeHRlbmRlZEJhY2tncm91bmRDb2xvcjsK
IAotICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBXZWFrUHRyPFJlbmRlckxheWVyPj4gbV9z
Y3JvbGxpbmdOb2RlVG9MYXllck1hcDsKKyAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwgV2Vh
a1B0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPj4gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1h
cDsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMZWdhY3lX
ZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yPiBtX2xlZ2FjeVNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjBiYjQyMWI4MTcyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApAQCAtMCwwICsxLDE4
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5
IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGlj
IExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBW
ZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1s
CisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBM
IG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJ
ZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
b25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRo
ZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAq
IHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lz
aW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0g
d2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUg
TVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVs
ZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZl
cnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUg
R1BMLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYgbGF5ZXIp
CisgICAgOiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJmbG93
UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkK
KyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZhbHNlKQorICAgICwgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNlKQorI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9h
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uKGZhbHNlKQorICAgICwgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQoZmFsc2Up
CisgICAgLCBtX2xheWVyKGxheWVyKQoreworfQorCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID09IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRo
aXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmVu
ZGVyZXIudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworCisj
aWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9s
bFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFy
KTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNjcm9sbENvcm5l
cigpOworICAgIGNsZWFyUmVzaXplcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24oKQoreworICAgIGF1dG8qIGVsZW1lbnQgPSBtX2xh
eWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbGF5ZXIucmVuZGVyQm94KCkpIHsKKyAgICAgICAgLy8gV2Ugc2F2
ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2
YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1l
bnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOworICAgICAgICBpZiAoIW1fc2Nyb2xsUG9z
aXRpb24uaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBlbGVtZW50LT5zZXRTYXZl
ZExheWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Cit9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2
ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0
c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpo
YW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNo
RXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQo
KS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2Vu
ZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhl
ZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygp
IGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGlu
YXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9
IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
LT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJm
bG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAg
ICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Ny
b2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAg
ICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnNldHRpbmdzKCku
Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCk7
Cit9CisKKy8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXll
cnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNBc3luY1Njcm9sbGluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVk
U2Nyb2xsaW5nRm9yTGF5ZXIobV9sYXllcik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0
aW9uPiBwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBvc2l0aW9uKSB7CisgICAgICAgIG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uID0gU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uLnZhbHVlKCk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQoreworICAgIGlmICghbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9s
bFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbikpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gU2Nyb2xsUG9zaXRpb24o
KTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IGZhbHNlOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBv
c2l0aW9uLnkoKSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUs
IGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIGlmIChh
bmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQorICAgICAgICBzY3JvbGxUb09mZnNldFdp
dGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zm
c2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworfQorCitT
Y3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xhbXBTY3JvbGxPZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNj
cm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9m
ZnNldCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworI2lmIEVOQUJMRShB
U1lOQ19TQ1JPTExJTkcpCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8
IG1fbGF5ZXIgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQm
IHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFt
cGluZykKK3sKKyAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xs
QmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmlt
YXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVk
U2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBpZiAoIXJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9m
ZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKKyAgICBzZXRTY3Jv
bGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwor
CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24o
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJy
ZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwor
CisgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsKKyAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQorICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKKyAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9m
ZnNldCgpKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0
aW9uKG5ld1Njcm9sbE9mZnNldCk7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91
c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsK
KworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Nj
cm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG5l
d1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlm
IHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgorICAgICAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMg
cmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCisgICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0g
c2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKKyAgICAgICAg
ICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3
UG9zaXRpb24pOworICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgp
OworICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOworICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxY
T2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQorICAgICAgICAgICAg
ICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKKworICAgICAgICAgICAgbmV3T2Zmc2V0
LnNldFgoc2Nyb2xsWE9mZnNldCk7CisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisK
KyAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKKyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxU
bygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1
cmUuCisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0
byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBp
ZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAg
IG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsK
KworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlclZp
ZXcmIHZpZXcgPSByZW5kZXJlci52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZm
ZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJl
IGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEg
ZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9m
IGEgcGFydGljdWxhciByZWdpb24uCisgICAgICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuaW52YWxp
ZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdlT3Zlcmxh
eXM6OmRpZExheW91dChyZW5kZXJlci5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlci5mcmFtZSgpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIgPSByZW5kZXJlci5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgLy8gVGhl
IGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIExheW91
dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlci5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/
IHJlbmRlcmVyLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlci5j
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZs
b2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBh
aW50KTsKKyAgICBpZiAocmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hG
YWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwor
CisgICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBt
X2xheWVyLmJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7CisgICAg
fQorCisgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0Lgor
ICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hl
ZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBp
ZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdl
U2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHND
aGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwobV9sYXll
cik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKG1fbGF5ZXIuY29tcG9zaXRvcigpLmhh
c0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBj
b250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMg
dGhhdCBtYXkgbmVlZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9z
aXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9z
aXRpbmdBbmNlc3RvciA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBv
c2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25z
IHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5n
QW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2
ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21w
b3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAg
IHJldHVybiBtX3Njcm9sbFdpZHRoOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJCb3go
KSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5z
dGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbEhlaWdo
dDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9z
aXRpb24oKQoreworICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3
b3JrIHdpdGggYml0ZmllbGRzLgorICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOworICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1
ZWUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlci5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIuc3R5bGUoKS5tYXJxdWVlQmVo
YXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIuaXNCb3goKSkgewor
ICAgICAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlx
dWU8UmVuZGVyTWFycXVlZT4oJm1fbGF5ZXIpOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bHNPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIuc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIuc2V0
dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
aXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFtX2xheWVyLmlzSW5zaWRlU1ZHRm9y
ZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJG
TE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVy
ZmxvdygpICYmIChyZW5kZXJlci5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8
fCByZW5kZXJlci5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwo
KSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCkKK3sKKyAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7
Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdAoreworICAgIGlmICghbV9sYXllci5pc0NvbXBvc2l0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCktPnNjcm9sbGlu
Z05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK3sKKyAgICBpZiAoIWlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5nKCkg
JiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9s
bGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hl
ZWxFdmVudCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJs
ZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJz
IHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Cit7
CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQorICAgICAg
ICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisgICAgYXV0byB2aXNp
YmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7CisgICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRp
b24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uu
d2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3Bh
Y2UuaGVpZ2h0KCkpIH0gfTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisK
KyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRo
aXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNo
YWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxP
ZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0Lnko
KSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQu
eSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAg
c3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDAp
CisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBp
ZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVT
aXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgp
KSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsK
KyNlbmRpZgorfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENv
cm5lclJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5z
Y3JvbGxDb3JuZXI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3Jv
bGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJlcigp
LmlzQm94KCkpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKK30K
KworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0
Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyLCByZWN0KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZy
ZW5kZXJlciwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBv
aW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZz
ZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5j
b252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHBvaW50KTsKK30K
KworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQ
b2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlci52aWV3KCkuZnJhbWVW
aWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJl
bnRQb2ludCk7CisgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwor
ICAgIHJldHVybiBwb2ludDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJl
bmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisg
ICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRv
SW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjb250ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNj
cm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAg
SW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKKworICAgIGlmICgh
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUu
c2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lk
dGgoKSkpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAg
ICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQo
KSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6
ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xs
YWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlYXNvbiA9PSBBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJs
b2NrPihyZW5kZXJlcikuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOworICAg
ICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJu
IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9u
cygpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9t
ZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5k
IHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBr
ZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9CisjZW5kaWYKKworUmVuZGVy
TGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92
ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKTsKKyAg
ICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAv
LyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxv
d0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRp
bmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKwor
ICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBi
b29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxi
YXIobV92QmFyLmdldCgpKTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9v
bCBoYXZlUmVzaXplciA9IHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpv
bnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2
ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9u
T3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7Cisg
ICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBz
Y3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5l
clNpemUgPSBJbnRTaXplIHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAg
ICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAorICAgICAgICB9OworICAgIH0KKworICAgIFJl
bmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7CisKKyAgICBpZiAobV9oQmFy
KSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1Jl
Y3Q7CisgICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
IHsKKyAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAg
ICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6
ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXJSZWN0LmNv
bnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7CisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgaWYgKG1fdkJh
cikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdS
ZWN0OworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAg
ICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikKKyAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQo
KSk7CisKKyAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9
CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAg
ICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBh
dXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1p
blhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVm
dENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwg
fSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6
ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CisKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
KQorICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsK
KworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKQorICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgICAgICBy
ZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJh
clRoaWNrbmVzcyB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyT2Zmc2V0KGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKKyAgICAgICAg
cmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3Zl
cmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoJnNjcm9sbGJhciA9
PSBtX3ZCYXIuZ2V0KCkpIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJ
blJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5y
ZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBp
bnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAg
aWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
LmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMu
aG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIExheW91dFJlY3QgcmVwYWlu
dFJlY3QgPSBzY3JvbGxSZWN0OworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRS
ZWN0KTsKKyAgICBib3gtPnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJG
b3JTY3JvbGxDb3JuZXIoKSkgeworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KQorICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBp
ZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7
Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlT
dHlsZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIo
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAg
ICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxi
YXI+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKSk7CisgICAgYXV0byYgYWN0dWFsUmVuZGVyZXIg
PSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGJvb2wgaGFzQ3VzdG9tU2Ny
b2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxS
ZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
OjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKKyAgICAgICAg
d2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkp
OworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFy
KTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwor
ICAgICAgICBpZiAobV9sYXllci5wYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAg
ICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKG1fbGF5
ZXIucGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQu
cmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpk
ZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAg
IFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAg
ICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsK
KworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51
bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFy
ID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0
eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5y
dWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFz
dGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRp
ZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwor
I2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNh
biBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8g
dXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQor
ICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAg
IG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAg
aWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNj
cm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Ny
b2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIu
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0
eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5v
bmUpOworI2VuZGlmCisgICAgfQorCisgICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25l
IGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1f
aEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQor
ICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCitTY3JvbGxhYmxlQXJlYSogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAor
eworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFy
ZWEoKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJl
dHVybiAmcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci5p
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7
CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXll
ciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5leHRMYXllci0+cmVuZGVyZXIoKS5pc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAgICB8fCAhc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNp
emVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisgICAgICAg
IHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJs
YXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
IHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8fCBtX2xheWVyLnJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IElu
dFNpemUmIG9mZnNldEZyb21Sb290KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYg
IW1fbGF5ZXIuY2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXll
ci5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICByZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92QmFyLT5z
ZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmICht
X2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZy
b21Sb290KTsKKyAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNj
cm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Nj
cm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7CisKKyAgICBpZiAo
bV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVy
KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1Rv
cCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOwor
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwor
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92
ZXJmbG93UmVjdC55KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXll
ci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOworfQorCitMYXlvdXRVbml0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93TGVmdCgpIGNvbnN0Cit7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Cit9CisKK0xh
eW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0
Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5tYXhYKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNj
cm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJC
b3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0g
ZmFsc2U7CisKKyAgICBtX3Njcm9sbFdpZHRoID0gcm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkg
LSBvdmVyZmxvd0xlZnQoKSk7CisgICAgbV9zY3JvbGxIZWlnaHQgPSByb3VuZFRvSW50KG92ZXJm
bG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92
ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsK
KyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAg
ICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsK
KyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgp
IC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3Jv
bGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisKKyAgICBjb21w
dXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8
fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgbV9sYXllci5yZW5kZXJC
b3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNP
dmVyZmxvd1koKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25z
RGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KG1fbGF5ZXIu
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91
bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Cit9CisKK3N0YXRp
YyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhp
cyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92
ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFj
dHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1Bz
ZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKworc3RhdGljIGJv
b2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9
IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHls
ZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3Jv
bGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5o
YXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3Zl
cmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sK
KyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJv
eCk7CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhl
bXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wg
aGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Cisg
ICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygp
OworCisgICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVz
dCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihy
ZW5kZXJlci5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV9oQmFyLT5z
ZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgaWYgKG1fdkJhciAmJiBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkK
KyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAg
Ly8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2Fp
biBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6
b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1
dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRh
bE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9u
dGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Cisg
ICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkp
CisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVy
Zmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhh
dmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxP
dmVyZmxvdyk7CisKKyAgICAgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwor
CisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnQoKTsKKworICAgICAgICBpZiAocmVuZGVyZXIuc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlci5zdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7CisgICAgICAgICAgICBpZiAoIW1faW5PdmVy
Zmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhp
cyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5n
ZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJD
aGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmxheW91
dCgpOworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJl
bmRlcmVyLnBhcmVudCgpOworICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJs
ZUJveCgpICYmIHJlbmRlcmVyLmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJG
bGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCptX2xheWVy
LnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFn
ZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBpbnQgY2xpZW50
V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgIGludCBwYWdl
U3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOworICAgICAgICBtX2hCYXIt
PnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAg
ICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOwor
ICAgIH0KKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3Jv
bGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7CisgICAgICAgIG1fdkJhci0+c2V0U3RlcHMo
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJh
ci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsSGVpZ2h0KTsKKyAgICB9CisK
KyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKKy8vIFRoaXMg
aXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucyku
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxh
eW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAg
IGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0KCk7CisKKyAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIG1fbGF5ZXIu
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBj
YXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygp
OworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkgeworICAgICAgICAv
LyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9u
LiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zm
c2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KKyAgICAg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBi
ZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCisgICAgICAgIC8vIFRo
aXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlv
biBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAg
Ly8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBT
ZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICBz
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisjZW5kaWYKKyAgICAgICAg
aWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgICAgICBz
Y3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKwor
ICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAg
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7
CisKKyAgICBpZiAobV9sYXllci5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICBtX2xheWVyLnNl
dE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVyLnNldE5l
ZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgbV9sYXllci5zZXROZWVkc1Bvc3RM
YXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc0lu
dGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9u
dGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3Qp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50
ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0
cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nl
c3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBh
aW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBv
aW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGlu
Z092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZl
IG5vIG92ZXJmbG93LgorICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhl
IGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKKyAgICAvLyBvbiB0b3Agb2YgZXZl
cnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRp
bmdPdmVybGF5Q29udHJvbHMKKyAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1
c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMK
KyAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKKyAgICAvLyBhbmQgd2UnbGwg
cGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQg
dHkgc28gdGhhdCB0aGUKKyAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50
ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Ny
b2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgeworICAgICAgICBtX2NhY2hl
ZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAgICAvLyBJdCdz
IG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBh
aW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0g
ZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7
CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVyKiBwYWludGlu
Z1Jvb3QgPSBtX2xheWVyLmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICAgICAgaWYg
KCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlci52aWV3
KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRp
bmdSb290LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5n
IGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBpZiAocGFp
bnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2Nh
Y2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIg
d2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0
cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3
aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBk
b2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyku
CisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zm
c2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBp
biB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwg
ZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAg
aWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFy
IHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0
aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZz
ZXQsIGRhbWFnZVJlY3QpOworCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2Ug
aXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNv
bnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAg
ICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFs
aWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsK
KyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZz
ZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2lu
Y2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBh
aW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVz
aXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlm
IChyZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVh
a1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhp
UmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXpl
KCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdl
TG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIi
KS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2Ut
PnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0
aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAt
IGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAg
ICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigp
IC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXpl
Q29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIt
PnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250
ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSBy
ZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2Vu
dC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRn
ZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1f
dkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsK
KyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAg
ICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSAr
IDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1Jl
Y3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hC
YXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
SW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6
Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2gg
dGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29u
dGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92
QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIu
cGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0Fw
cGVhcmFuY2UoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhN
RTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxF
bGVtZW50PihtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5n
RWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBk
YXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgp
LCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xs
c092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAg
ICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xh
eWVyLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRT
aXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0
LCBwYWludGluZ0luZm8sIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVy
bGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5G
cmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQg
PSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6
ZXJSZWN0KSB7CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkpIHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBi
b3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5l
cigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4
WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJl
Y3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAg
SW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29y
bmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50
UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9t
UmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07
CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKKyAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdt
ZW50cy5hdChpKTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJS
ZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3Rz
LnJlc2l6ZXIpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRU
ZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21l
bnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5
ZXJCb3VuZHMubG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmco
KS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygp
LT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8g
T3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBM
aXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBo
YXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
TGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9
IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gt
PnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0
IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9t
YXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIo
KSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNh
bFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xs
LCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAg
IC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxl
IHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFs
U2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hC
YXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93
OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJh
ci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
OworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRU
ZXN0aW5nKCk7CisgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZp
ZXcuZnJhbWUoKS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9
IG93bmVyLT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0
aW5nKCk7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJs
ZVRvSGl0VGVzdDsKKyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NF
UlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAo
IW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3Zl
ZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBm
cmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFi
bGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJh
dGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBh
Y2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgor
ICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVt
b3ZlZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVs
bHB0cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENv
cm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxD
b3JuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51
bGxwdHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXpl
ciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0
eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJl
c2l6ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7
CisgICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklY
TUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAg
bV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0
aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShX
VEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xs
YmFyUmVsYXRlZFN0eWxlKCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7CisgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVy
U3R5bGUoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9s
bGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAg
ICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91
Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRl
cmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVu
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgp
IHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1h
ZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkg
JiYgbV9sYXllci5iYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAg
IC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9t
eHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJv
d3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGlu
dCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYg
KGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8
aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVs
dGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0
ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEo
Y29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQo
KSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtu
b3duTW91c2VQb3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sg
aWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdo
ZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hl
cmVudAorICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYg
KGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
LnkoKSA8IDApCisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNl
UG9zaXRpb247CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gLSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0g
U2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRo
ZSBzcGFjZSBmb3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYg
KGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisg
ICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRq
dXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlv
ciBiZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxFeHBvc2VSZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyLmFsbG93c0N1cnJlbnRT
Y3JvbGwoKSk7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7Cisg
ICAgQVNTRVJUKGJveCk7CisKKyAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3Ro
aXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQorICAgIHsKKyAg
ICAgICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpCisgICAgICAgICAgICAm
JiBlbGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhiZWhhdmlvciwgZWxlbWVudCk7CisgICAg
ICAgIHJldHVybiB1c2VBbmltYXRlZFNjcm9sbGluZyA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBB
bmltYXRlZFNjcm9sbDo6Tm87CisgICAgfTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUo
cm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVk
U2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwg
YmVoYXZpb3IpOworICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxP
ZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsK
KworICAgICAgICBhdXRvIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0
OworICAgICAgICBsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZm
ZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJh
bnNmb3JtcykuYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2
ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkK
K3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLnBhcmVudCgpKQorICAgICAgICByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1w
KCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJl
c3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3
U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpz
Y3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8g
dGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRy
eQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNl
dCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5p
c1plcm8oKSAmJiByZW5kZXJlci5wYXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5j
bHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwg
c2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyZXIuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxl
ZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1
dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMg
dGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAg
IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9s
bCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMg
b3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NF
UlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAg
IExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdl
b21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7Cisg
ICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYg
KCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxs
cHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNl
c3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhh
c1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjps
b2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QK
K3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAi
ICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0
aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGZjNjdkYTRkODU3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApA
QCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96
aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxl
ZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9z
ZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBs
aWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1
c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRl
IHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91
IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUg
TVBMIG9yIHRoZSBHUEwuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyTWFycXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YShSZW5kZXJMYXllciYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEo
KTsKKworICAgIFJlbmRlckxheWVyJiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAg
IFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7
IH0KKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JE
ZXN0cm95TWFycXVlZSgpOworCisgICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRo
KCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5T
Y3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRo
b2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQg
c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEq
KiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Ny
b2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29u
c3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNj
cm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7
CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRl
ZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9z
aXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVz
ZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50
IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSks
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0K
KyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3co
KSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigp
IHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsg
fQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxi
YXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9u
OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2gg
c2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkg
c2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3Jv
bGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAg
Ym9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3Jv
bGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJv
b2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9p
bnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAg
ICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAv
LyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1l
dGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Ny
b2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisK
KyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Cisg
ICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBo
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNl
bmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5k
U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkg
Y29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAg
IGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZp
bmFsOworCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3Qg
SW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgSW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Cisg
ICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5h
bChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVj
dEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29u
c3QgZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7Cisg
ICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQg
PSBudWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYK
KyAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7
CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50
U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXpl
KCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgp
IGNvbnN0IGZpbmFsOworCisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29u
c3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGhh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3I7IH0KKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNl
dENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisg
ICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisK
KyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAg
ICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
cmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNv
bnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xh
bXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlv
dXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0
UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcg
b24geDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6
IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRl
ciB0cmVlLgorICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsK
KworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6
IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDog
MTsKKyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24gOiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOwor
ICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9m
IG91ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Nj
cm9sbEhlaWdodDsKKworICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0
aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUg
YSBwYWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAg
IFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3Zlcmxh
eVNjcm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20g
c2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFy
UGFydD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+
IG1fcmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1
ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgz
MmQzNmUuLjUyMjAyNTliZWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAg
LTg4Miw3ICs4ODMsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwor
ICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+
c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94
Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpo
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5j
bG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xv
c2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGVBbmNlc3RvcigpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJl
bmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2
Li45YTQ4MWE5N2FmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVl
ZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAgUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5k
ZXJMYXllciogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhp
cywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9s
bGFibGVBcmVhKCkpOworICAgIGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5k
ZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpAQCAtMTczLDkgKzE3NCw5IEBAIHZvaWQgUmVuZGVyTWFy
cXVlZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9s
bGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpV
bmNsYW1wZWQpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0
aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1f
c3VzcGVuZGVkID0gZmFsc2U7CiAgICAgICAgIG1fc3RvcHBlZCA9IGZhbHNlOwpAQCAtMjQ0LDEy
ICsyNDUsMTUgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICBpZiAobV9s
YXllci0+cmVuZGVyZXIoKS52aWV3KCkubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVh
KCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewog
ICAgICAgICBtX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAg
ICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI3Miw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlck1hcnF1
ZWU6OnRpbWVyRmlyZWQoKQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAg
ICAgICBpbnQgY2xpZW50U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXll
ci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhp
bnRWYWx1ZUZvckxlbmd0aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3Jl
bWVudCgpLCBjbGllbnRTaXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpv
bnRhbCgpID8gbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zm
c2V0KCkueSgpKTsKKyAgICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsT2Zmc2V0KCkueSgpKTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5j
cmVtZW50ID8gaW5jcmVtZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkK
ICAgICAgICAgICAgIG5ld1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5
LDkgKzI5Myw5IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAg
IAogICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zm
c2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5l
d1Bvcyk7CiAgICAgZWxzZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9z
KTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9w
dGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdElu
Q29udGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5k
KFRleHRTdHJlYW0mIHN0cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJl
YW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCll
ZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24o
WSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBz
dHlsZSwgKCspRGlydHkgbGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUv
SShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAo
Rilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFz
KEwpYXllciwgaGFzTGF5ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5
IHN0eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBA
IC0xMTE1LDEwICsxMTE1LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmpl
Y3QoVGV4dFN0cmVhbSYgc3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAg
ICAgICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFz
TGF5ZXIoKSkgewogICAgICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3Ry
ZWFtIDw8ICItIjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KCp0aGlzKS5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8
ICJTIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVs
c2UKKyAgICAgICAgc3RyZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAg
ICAgICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggYjkxNTkyMmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmpl
Y3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5k
ZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFu
b255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBh
bmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9u
eW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2
NWMuLjI1N2FmYmUxOTA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBT
Y3JvbGxUeXBlLCBTY3JvbGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJC
b3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7
Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYg
KGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyBy
ZW5kZXJlci0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsK
KyAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1
dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2Fs
U2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQog
ewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIo
KS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUo
KS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIp
KQorICAgIGF1dG8qIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXll
cigpOworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xs
YWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xs
KGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAx
ZjAyMGZlODIuLmY1ODhlODY5ZTA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC02MDAsMTQgKzYwMSwxNiBAQCBzdGF0aWMg
dm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IExheW91dFJlYwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0g
ICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7
Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChs
YXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRX
aWR0aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxXaWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5k
ZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkg
IT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdo
dCAiIDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAg
ICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0
KCkueSgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQo
bGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsV2lkdGgoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRl
ckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAh
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAg
ICAgICAgfQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9s
bGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgICAgIGlmICghc2Nyb2xs
YmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IGIxMDMzZGEw
NzkzMC4uNWJiNGU0ZmQ0MGZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKQEAgLTMzMiw4ICszMzMsMTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2Vs
ZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAotICAg
IGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKQotICAgICAgICBsYXllcigp
LT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgaWYgKGxheWVyKCkgJiYgbGF5
ZXIoKS0+Y2FuUmVzaXplKCkpIHsKKyAgICAgICAgQVNTRVJUKGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkpOworICAgICAgICBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludFJlc2l6ZXIo
cGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQp
LCBwYWludEluZm8ucmVjdCk7CisgICAgfQogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3Zl
cmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggYWQ2MzdmZjQ0Zjk2Li5mZTVjZTQwNTk2MTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xODMzLDcgKzE4MzQs
OCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVs
RXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9s
bGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5s
YXllcigpOworICAgICAgICBBU1NFUlQoYm94LmxheWVyKCkpOworICAgICAgICBzY3JvbGxhYmxl
QXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgIH0KICAgICAKICAgICBp
ZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg1NCw4ICsyODU2LDEwIEBAIEV4Y2VwdGlvbk9yPFNj
cm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9k
ZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRl
ckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
Qm94LmxheWVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJv
eC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwppbmRleCA1YzQ5OTNiYWUwMjguLmI1NzViOGE2MmRiOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFpp
bW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNj
cm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBQcmVwYXJhdGlvbiBmb3IgdGhlIFJlbmRlckxheWVyIGFy
Y2hpdGVjdHVyZSBjaGFuZ2U6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9s
bGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0
cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9y
IGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xs
aW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0
aW5nLgorCisgICAgICAgICogRE9NL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVt
ZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Ny
b2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01S
YW5nZVRvVmlzaWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIwMjAtMTEtMjEgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGFuIEV4cGVyaW1lbnRhbCBG
ZWF0dXJlcyBmb3Igd2hlZWwgZXZlbnQgZ2VzdHVyZXMgYmVjb21pbmcgbm9uLWJsb2NraW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4uZGE0
M2UzZTY0ZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRN
TC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtMTEx
LDExICsxMTEsMTcgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zm
c2V0OihpbnQpeSBhZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwog
CiAgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJl
cikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJl
dCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkp
LCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1w
aW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICBp
ZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQpYWJzb2x1dGVQ
b3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2MDgzOTJmLi44
ODAxMGMwYzZjMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtNzM3LDEwICs3MzcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2UKICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5z
aWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3Jl
OjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFs
aWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09y
aWdpblNjcm9sbGluZzo6WWVzIH0pOwogI2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFy
dE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGlmIChsYXllcikg
ewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0
cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyID8gbGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAg
IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNs
b3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlv
blJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRn
ZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQs
IFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgfQpAQCAtNzU3
LDEwICs3NTcsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdl
ICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAKICAgICBpZiAoc3RhcnROb2RlICYm
IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9k
ZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKSB7Ci0g
ICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUp
OworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIgPyBsYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2lu
Z0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2
ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZO
ZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2Vi
Q29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKTsKIAogICAgICAgICAgICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAg
ICAgICAgICAgaWYgKGNvcmVGcmFtZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4
IDYyMzZhMTFiZjI5Ni4uZDQ1NTdjODU5MjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1t
ZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0
IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByZXBhcmF0aW9uIGZvciB0aGUgUmVuZGVyTGF5ZXIgYXJjaGl0ZWN0dXJlIGNoYW5n
ZToKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhh
bmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50
ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhh
dCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisK
KyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAg
KiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIwLTExLTE5
ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtU
ZXh0dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJlTWFwcGVyIGZyb20gVGV4dHVyZU1hcHBlckxh
eWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4uMmZk
Y2Y5ZjljYjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYgKzE0
Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNU
ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIwNDks
MTAgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0p
CiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhv
dXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3Jv
bGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29y
ZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJl
YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
YWJsZUFyZWEoKS0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3Jv
bGxlZEFyZWEpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRi
YWNrUHRyKCkgJiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJh
Y2tQdHIoKSkpIHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0
dXJlSGFuZGxlKTsK
</data>
<flag name="commit-queue"
          id="431867"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414891</attachid>
            <date>2020-11-26 03:48:17 -0800</date>
            <delta_ts>2020-11-26 04:02:07 -0800</delta_ts>
            <desc>Patch, v8 (squashed for testing)</desc>
            <filename>patch-v8.diff</filename>
            <type>text/plain</type>
            <size>312094</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjU1MzgyNjAxMjgwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjogCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9v
dmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxp
bmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVy
IHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292
ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmst
dG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dDoKKwogMjAyMC0xMS0yMiAgRGllZ28gUGlubyBH
YXJjaWEgIDxkcGlub0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHTElCXVtHVEtdIFVucmV2aWV3
ZWQgdGVzdCBnYXJkZW5pbmcuIFVwZGF0ZWQgZXhwZWN0YXRpb25zIGFuZCBiYXNlbGluZXMgYWZ0
ZXIgMjcwMTY0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxv
Y2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Jsb2NrL2Zsb2F0L21hcnF1ZWUtc2hyaW5rLXRv
LWF2b2lkLWZsb2F0cy1leHBlY3RlZC50eHQKaW5kZXggZThhZDNiN2NjMzJmLi5lODM1YWZlMzY5
ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L2Jsb2NrL2Zsb2F0
L21hcnF1ZWUtc2hyaW5rLXRvLWF2b2lkLWZsb2F0cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8tYXZv
aWQtZmxvYXRzLWV4cGVjdGVkLnR4dApAQCAtMjMsNSArMjMsNSBAQCBsYXllciBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKICAgICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMCww
KSBzaXplIDUweDEwMCBbYmdjb2xvcj0jMDA4MDAwXQogICAgICAgICBSZW5kZXJCbG9jayB7RElW
fSBhdCAoMCwwKSBzaXplIDEwMHgxMDAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAweDAKLWxheWVyIGF0ICg1OCw5NCkgc2l6ZSA1MHgxMDAgc2Nyb2xsWCAtNTAK
K2xheWVyIGF0ICg1OCw5NCkgc2l6ZSA1MHgxMDAKICAgUmVuZGVyQmxvY2sge01BUlFVRUV9IGF0
ICg1MCwwKSBzaXplIDUweDEwMCBbYmdjb2xvcj0jMDA4MDAwXQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDMyM2Fi
NmI0ZTZjNC4uNDYzNjYzYTIyYmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjY0IEBACisyMDIw
LTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBSZW5kZXJM
YXllcjogCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxv
dyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRz
IGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVz
IHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93
LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAg
ICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtl
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8gY29uc3QpOgorICAgICAgICAq
IGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbExl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAg
KiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTE1hcnF1ZWVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFy
cXVlZSBjb25zdCk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1cik6CisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlV2hl
ZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3Ip
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAg
ICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZSk6
CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6c2Nyb2xsYWJsZUFyZWFGb3JCb3gpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0Zvck92ZXJmbG93TGF5ZXIgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6ZW5kQW5kQ29tbWl0VXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0VHJhbnNhY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxM
ZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbmNsdWRlVmVy
dGljYWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYW5TY3JvbGwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9k
ZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNv
bXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
ZmxhZ3NGb3JVcGRhdGVMYXllclBvc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzZXR1cEZvbnRTdWJwaXhlbFF1YW50aXphdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFBhaW50
T3JkZXJUcmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdGcmFtZVJlbmRlckxh
eWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9j
a0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxh
YmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9s
bGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdp
dGhBbmltYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVD
b21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Om92ZXJoYW5nQW1vdW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjppc0FjdGl2ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQ
b3NpdGlvbkluVmlldyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3Ju
ZXJSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcik6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRv
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzT3ZlcmZs
b3dDb250cm9scyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoYXNWZXJ0aWNhbE92ZXJmbG93IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFNjcm9sbENv
cm5lcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludFJlc2l6ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAoaXNUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVyZmxvd1RpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6bGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNp
bmdDb21wb3NpdGVkU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVy
R2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJl
c0hvcml6b250YWxTY3JvbGxiYXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVy
TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50cyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlc0NsaXBwaW5nU2NvcGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXBNYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQW5jZXN0b3JDbGlwcGluZ1N0YWNrIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5bmNTY3JvbGxh
YmxlQ29udGFpbmVyTm9kZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjppc0FzeW5jU2Nyb2xsYWJsZVN0aWNreUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNWaWV3cG9ydENvbnN0cmFpbmVkRml4ZWRP
clN0aWNreUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0NvbXBvc2l0
ZWRTY3JvbGxpbmdMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmxheWVyU2Nyb2xsQmVoYWhhdmlvclJlbGF0aXZlVG9Db21wb3NpdGVkQW5jZXN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05v
ZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNv
b3JkaW5hdGVkUG9zaXRpb25pbmdGb3JMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpkZXRhY2hTY3JvbGxDb29yZGluYXRlZExheWVy
V2l0aFJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJl
bnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3Jv
bGxpbmdSb2xlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXJxdWVlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJx
dWVlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6CisgICAgICAgICogdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzY3JvbGxCeVNp
bXVsYXRpbmdXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisKIDIwMjAt
MTEtMjIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNd
W0ludGVncmF0aW9uXSBDb252ZXJ0IHNvbWUgcmVtYWluaW5nIElubGluZUJveCBhY2Nlc3MgdG8g
dXNlIGlubGluZSBpdGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMzc4OWFhMzgzOTQwLi43
NTExNDE4NGUxYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ2Miw2ICsxNDYyLDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAg
IHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgK
ICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAppbmRleCA3MjYyODkxZWNjNjMuLjk4M2M1ZjNkYzZjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTIyMTcsNiArMjIxNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRl
ckxheWVyRmlsdGVycy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAor
cmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5b3V0U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkxZDc0Yzc0NTIyNS4uYTA5NGUxNmJlMGZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02MDE1LDYgKzYwMTUsOCBAQAogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Ny
b2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmls
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQz
NCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmls
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQwMEM0
MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1
M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjhCMjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5k
ZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VF
REJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTI5NTg2LDYgKzI5NTg4LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJl
bmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2
RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1M0ZCODMyMTNCNzg2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovLAorCQkJCTBGNTNGQjg0
MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8sCiAJCQkJ
MkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJ
CQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJ
CQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKaW5kZXggN2YyYmRhOGJlMTNjLi5hNjM4ZTFkZjhmNmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RJdGVtLmgiCkBAIC0zOTAzLDcgKzM5MDQsNyBAQCBTY3JvbGxhYmxlQXJlYSogQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBj
b25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBy
ZXR1cm4gYm94LmxheWVyKCkgPyBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxw
dHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkxNiw3ICszOTE3LDkgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNl
dCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVy
KCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LmxheWVyKCkpOworICAg
IGlmICAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOwogfQog
CiAjaWYgRU5BQkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkNjFjN2Y2OTU0
MTIuLmVkMTk1YmIwM2M0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTIsNiArOTIsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBAIC0x
MzM0LDggKzEzMzUsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQp
CiAgICAgICAgIGludCBjbGFtcGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiByZW5k
ZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykg
PyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5k
ZXJlci0+c2V0U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXIt
PmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9
CiB9CiAKQEAgLTEzNTgsOCArMTM1OSw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9wKGlu
dCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIobmV3VG9w
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5k
ZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRl
eCA5YjY3ZDI5N2UxOTEuLjg0ZGU5OGM4YmFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAt
MjM5MSw5ICsyMzkyLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlvbihT
ZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAgICAg
IGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJl
YSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0
VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwgYWxp
Z25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2UoKTsK
ICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAgICAgICAgICAgICAg
ICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVhbGVk
U2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFkZjdkMTY0ZTJlLi4y
NjkxNmU2NWY3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3ICsxNzYsOSBAQCBS
ZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBjb25zdAog
ewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxh
eWVyKCktPm1hcnF1ZWUoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVy
Qm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0
dXJuIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpOworICAgIHJldHVybiBudWxscHRyOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElu
cHV0VHlwZS5jcHAKaW5kZXggMmRlNDNkYWQ1YTlmLi5hZWUxNmU5OTVjNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0y
NTMsOSArMjU0LDEzIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1cigp
CiAgICAgaWYgKCFpbm5lckxheWVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBpbm5l
ckxheWVyU2Nyb2xsYWJsZSA9IGlubmVyTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFpbm5lckxheWVyU2Nyb2xsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYm9vbCBpc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
PigqcmVuZGVyZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIFNjcm9s
bE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxh
eWVyLT5zY3JvbGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3JvbGxUb09mZnNldChz
Y3JvbGxPZmZzZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsV2lkdGgoKSwgMCk7
CisgICAgaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldCk7
CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1Z2dlc3Rpb25zKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNjVlYjIwOWQ0ZDM3Li41YjFj
YmMzY2EzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTgwLDYgKzgw
LDcgQEAKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM0MSw3ICsz
NDIsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2lu
Z0JveChOb2RlKiBzdGFydE5vZGUsIGNvbnN0IFdoZQogCiAgICAgUmVuZGVyQm94KiBjdXJyZW50
RW5jbG9zaW5nQm94ID0gJmluaXRpYWxFbmNsb3NpbmdCb3g7CiAgICAgd2hpbGUgKGN1cnJlbnRF
bmNsb3NpbmdCb3gpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1cnJl
bnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJveExheWVyID0g
Y3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSA/IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICBhdXRvIHBsYXRm
b3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0Zm9ybUV2ZW50KCk7CiAgICAgICAg
ICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7CiAgICAgICAgICAgICBpZiAocGxhdGZvcm1F
dmVudCkgewpAQCAtMTU2Miw3ICsxNTYzLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhhbmRs
ZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gKICAg
ICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KCpyZW5kZXJlcikubGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxh
eWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQ
b2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnJlbmRlcmVyKCkuc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29y
KCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CkBAIC0xOTEyLDkgKzE5MTMsOSBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICBpZiAoIWxheWVyKQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6
SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKLSAgICAgICAgICAgIGlm
ICghc2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAgICAg
ICAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxh
YmxlQXJlYSgpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
aW5kZXggMzA1OGQ5MWRlNjVhLi4xNTYyYzZmMmExMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRv
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU5NSw3ICsyNTk2LDEwIEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCkKICAgICBpZiAoIWxheW91
dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmpl
Y3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5k
ZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotICAgICAg
ICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3Vt
ZW50U2Nyb2xsKCk7CisKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5sYXllcigpKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
KTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMzIxMCw2ICszMjE0LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUb0FuY2hv
cigpCiAKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiBhbmNob3Ig
bm9kZSByZWN0ICIgPDwgcmVjdCk7CiAKKyAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9IGFuY2hv
ck5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKGVuY2xvc2luZ0xh
eWVyICYmICFlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgZW5jbG9z
aW5nTGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8vIFNjcm9sbCBu
ZXN0ZWQgbGF5ZXJzIGFuZCBmcmFtZXMgdG8gcmV2ZWFsIHRoZSBhbmNob3IuCiAgICAgLy8gQWxp
Z24gdG8gdGhlIHRvcCBhbmQgdG8gdGhlIGNsb3Nlc3Qgc2lkZSAodGhpcyBtYXRjaGVzIG90aGVy
IGJyb3dzZXJzKS4KICAgICBpZiAoYW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtMzg2Miw3ICszODcwLDExIEBAIFNjcm9sbGFibGVB
cmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAo
IWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9z
c0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXll
ciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5j
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogSW50UmVjdCBG
cmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CkBAIC00MzI2
LDggKzQzMzgsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICAgICAgcmVuZGVyZXIg
PSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICByb290TGF5ZXItPnBhaW50KGNvbnRleHQsIGRp
cnR5UmVjdCwgTGF5b3V0U2l6ZSgpLCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyLCB7IH0sIHNl
Y3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPT0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55
T3JpZ2luID8gUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdp
biA6IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBY2Nlc3NpYmxlT3Jp
Z2luT25seSwgZXZlbnRSZWdpb25Db250ZXh0KTsKLSAgICBpZiAocm9vdExheWVyLT5jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQotICAgICAg
ICByb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBt
X3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlUm9v
dExheWVyID0gcm9vdExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGlmIChzY3Jv
bGxhYmxlUm9vdExheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZl
bnRSZWdpb25Db250ZXh0KQorICAgICAgICAgICAgc2Nyb2xsYWJsZVJvb3RMYXllci0+cGFpbnRP
dmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwgcmVu
ZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVudHMoY29udGV4dCwgZGlydHlSZWN0
LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5jcHAKaW5kZXggMzhmYjQ5NzFkMmEzLi44MDliYzE5MTM0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTUsOCBAQCBib29s
IHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0
aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgY29u
dGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNpdmVs
eShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShJbnRT
aXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMzJkMzJlNTliMjQyLi42ZTBmMTkwYmEzZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNSBAQCB2b2lkIEZy
YW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNMYXll
cigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93bmNh
c3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBs
YXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRTY3JvbGxU
eXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Ny
b2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5ZXIuc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5zZXRDdXJy
ZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBz
Y3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDog
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRpZEVuZFNj
cm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAgc2Nyb2xs
YWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2Fs
bCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lvbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggYWZkNzZk
MjU2ZWQwLi4wMDc5OTdlMmIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisjaW1wb3J0
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAgLTc4
NCw3ICs3ODUsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZvckJv
eChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkKICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0dXJuIGJv
eC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOwog
fQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNjcm9sbGFi
bGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDczOTMx
OTY3NDg3NS4uNDIxYjMwNzVhZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC05Miw3ICs5Miw3IEBAIGJv
b2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yT3ZlcmZsb3dM
YXllcihjb25zdCBSZW5kZXJMYXllCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQobV9wYWdlKTsKIAotICAgIHJldHVybiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVBcmVhKCkgPyBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgOiBmYWxz
ZTsKIH0KIAogU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxl
Q29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBjOGQ4MWVmMjQ4NjYuLjRkZjExN2E0OTU3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OSw2ICs1
OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNTUz
LDcgKzU1NCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBibG9j
a3NUb1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgpKTsK
LSAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwor
ICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJsb2NrLT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
YXlvdXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9CiB9
CkBAIC01ODQsOCArNTg3LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAg
aWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91
dCgpOworCisgICAgaWYgKCFsYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllcigp
LT51cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVw
ZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXQoKQpAQCAtMTExMyw4ICsxMTIxLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAvLyB6
LWluZGV4LiBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwg
c28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3Jv
dW5kL2JvcmRlci4KICAgICBpZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3Vu
ZCB8fCBwaGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgbGF5ZXIoKQotICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9
PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3Qo
KnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAg
bGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5k
ZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZv
LnJlY3QpKTsKKyAgICAgICAgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBzdHlsZSgp
LnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQ
YWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9u
bHkoKSkKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50
T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjAwNyw3ICsyMDE1LDEyIEBAIGJvb2wgUmVuZGVyQmxv
Y2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IExheW91dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3Vs
dCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNj
dW11bGF0ZWRPZmZzZXQpKSk7CisgICAgQVNTRVJUKGxheWVyKCkpOworICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxv
Y2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9
CiAKIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNTAzLDEw
ICsyNTE2LDIzIEBAIGludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxp
bmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUgY29u
dGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwgd2hp
Y2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBv
biBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwgb3Ig
aWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJm
bG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAgICAg
Ym9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkgfHwg
KGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJh
cigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAgOiAo
bGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgp
LngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwot
ICAgICAgICAKLSAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2Vs
aW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24pOwor
ICAgICAgICBhdXRvIGlnbm9yZUJhc2VsaW5lID0gW3RoaXMsIGRpcmVjdGlvbl0oKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
OworICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGlmIChkaXJlY3Rp
b24gPT0gSG9yaXpvbnRhbExpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVM
YXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpLnkoKTsKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxT
Y3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAg
ICAgfTsKKworICAgICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxp
bmUoKSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7CiAgICAg
ICAgICAgICAvLyBIaXN0b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxp
bmVzLiBCdXQgd2UgY2FuJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAKaW5kZXggYmIyMmYzNGZkM2YzLi5iZDcwZDYxZDQxNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zNDgsNyArMzQ4LDggQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91
dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5hdXRvV3JhcCgpICYm
IGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0
aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAgICAgIGlmIChsYXll
cigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpv
bnRhbCgpKQorICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJx
dWVlKCktPmlzSG9yaXpvbnRhbCgpKQogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMzA3Zjli
MmM3ZjJmLi45NTAyNjkxYWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMzE4LDExICszMTksMTMgQEAgdm9pZCBSZW5kZXJC
b3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKIAogICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBo
YXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1
ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBpZiAo
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3Jv
bGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAv
IG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxl
KHpvb21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZl
Wm9vbSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIFNjcm9s
bFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlv
bigpOworICAgICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0
aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9s
bFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQg
d2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5k
ZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQo
KSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5
ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBy
ZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Ny
b2xsVG9wKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVy
Qm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEg
KzU5NSwzOCBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVy
JiBsYXllcikKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBsYXllci5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAg
YXV0byYgc2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7
CisgICAgc2Nyb2xsQW5pbWF0b3Iuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxF
dmVudFRlc3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChp
bnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVs
RXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihu
ZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFu
aW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigp
KQogICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+
ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3Io
KmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRv
WVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAog
dm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBw
b3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywg
QW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8
fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZl
bnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3Np
dGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5p
bWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBA
IC04MTQsMjQgKzgyNiwzMiBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091dFJl
bGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJlbmRl
ckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgp
ICYmIHNjcm9sbGFibGVMYXllciAmJiAhc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Nyb2xs
YmFycygpCiAgICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3Jv
bGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7CiB9CiAKIGJvb2wg
UmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVyZmxv
d0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQog
CiBpbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigp
ID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKCFzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxT
Y3JvbGxiYXJTaXplKCkgPyBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBj
b25zdAogewotICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IGxh
eWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
OworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBzY3JvbGxhYmxlTGF5ZXItPmhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OmludHJp
bnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBAIC04MzksMTMgKzg1OSwxNiBAQCBp
bnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOwogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92
ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJz
KCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xs
YWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxT
Y3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CiAg
ICAgfQogCiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgpLm92
ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxiYXJz
KCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsYWJsZUxheWVyLCBzY3Jv
bGxhYmxlTGF5ZXIpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5oYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCgpOwogICAgIH0KIApAQCAtODU0LDggKzg3Nyw4IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNp
Y1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94OjpzY3JvbGxM
YXllcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJl
bmRlckxheWVyKiBib3hMYXllciA9IGxheWVyKCk7Ci0gICAgaWYgKGJveExheWVyICYmIGJveExh
eWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAgICBh
dXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllcigpID8gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYm
IGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIpKSB7CiAgICAgICAgIGlmIChzdG9wRWxlbWVudCkKICAgICAgICAgICAgICpzdG9wRWxl
bWVudCA9IGVsZW1lbnQoKTsKIApAQCAtODkyLDcgKzkxNSw4IEBAIGJvb2wgUmVuZGVyQm94Ojps
b2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0CiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQogICAg
ICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5s
aW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxp
ZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGly
ZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIGF1dG8q
IGJveExheWVyU2Nyb2xsYWJsZSA9IGwgPyBsLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyOworICAgICAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Ny
b2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAg
ICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEsNiArOTQ1LDIwIEBAIGJvb2wg
UmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAgICBy
ZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVu
ZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHNjcm9s
bHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsT3Zl
cmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoc3R5bGUoKS5yZXNpemUo
KSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8v
IEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2FuIGJlIHByb2dy
YW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4gdGhhdCBjYXNl
LgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAog
ewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxs
eVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5ZXIo
KSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
JiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
IH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
KQpAQCAtOTk3LDggKzEwMzUsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3Jv
bGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3Jv
bGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAg
bGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
KQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9
CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0x
MDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlv
bigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAogICAgIEFTU0VSVChoYXNMYXll
cigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Ny
b2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07CisKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJv
eDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTc1LDkgKzE2MTcsMTAg
QEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVk
RXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiBm
b3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91
bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE4OTQsMTAgKzE5MzcsMTAgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNp
emUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9w
KCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMg
aWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVjdC5jb250cmFjdChsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxheWVyKCktPmhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKHNj
cm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKKyAg
ICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4gY2xpcFJlY3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2QwNzJkLi5kZjBlYTFjMDcxNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1VzZWRaSW5kZXgoKSB8fCBoYXNS
dW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQogCisgICAgYm9vbCByZXF1aXJl
c0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdCBm
aW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0aGUgYm9keSByZW5kZXJlciBp
ZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSByb290LgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYjk4Mjdj
OGExNGQyLi5iYTVkY2ZhNDAzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTQ4OSw4ICs0OTAs
MTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29u
c3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWlu
ZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNp
emUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdC
b3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRl
clRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYg
KCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBj
b250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdD
bGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlw
cGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250YWlu
aW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpA
QCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3Rp
Y2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNs
b3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Nj
cm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJM
ZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5w
YWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRh
aW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGlu
Z0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAg
ICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAg
ICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5j
bG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBz
dGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5j
bG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICB9CiAg
ICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3Jt
ZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9u
KHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0NywxMSAr
NTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVj
dEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWlu
aW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0
UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQ
b2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVy
LT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBw
aW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVFbmNs
b3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2lu
dCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwog
CiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNsb3Np
bmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9sbGJh
ck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9zaW5n
Q2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYgc2Nyb2xsYWJsZUVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBzY3JvbGxhYmxlRW5j
bG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5nUmVjdC5zZXRMb2NhdGlvbihG
bG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJPZmZzZXQsIHNjcm9sbE9mZnNl
dC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1JlY3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA1MjQzZWExYzFiMDQuLjFmYjkwZTFjYTg4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25z
IGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRp
b24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzA0LDQwICszMDYsMjYgQEAgUmVu
ZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5
ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwg
bV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBtX2luUmVzaXplTW9kZShmYWxz
ZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQ
YWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2Up
CiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVy
Zmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVw
YWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9o
YXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNE
aXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2Vj
dGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAs
IG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXMz
RFRyYW5zZm9ybWVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFu
dHMoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkK
LSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1f
aGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1faGFzM0RUcmFuc2Zvcm1lZEFu
Y2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAg
ICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRp
cmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5l
ZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAg
ICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAs
IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlz
dE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNjEsMTYgKzM0OSw2IEBAIFJlbmRl
ckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVy
TW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNl
OwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2li
aWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2ZSBh
bmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1
ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRlckJveCgpKSB7Ci0gICAgICAg
ICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9u
KCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAgICAg
ICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBv
c2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXll
cigpCkBAIC0zNzgsMjkgKzM1NiwxMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAg
ICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhh
bmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5z
U2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0gICAgaWYg
KEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVu
dC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAg
ZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Nyb2xs
YmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsK
LQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24oKTsKIAot
ICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KKyAgICBjbGVh
ckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVyRmlsdGVycygpOwogCiAgICAg
aWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAtOTEzLDggKzg3MiwxMCBAQCBP
cHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gUmVuZGVyTGF5
ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQogICAgICAgICBpZiAocGFyZW50LT5iZWhhdmVzQXNGaXhl
ZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiAhcGFyZW50
LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkpKQogICAgICAgICAgICAgZmxhZ3MuYWRkKFNlZW5G
aXhlZExheWVyKTsKIAotICAgICAgICBpZiAocGFyZW50LT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
LSAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKTsKKyAg
ICAgICAgaWYgKGF1dG8qIHBhcmVudFNjcm9sbGFibGVMYXllciA9IHBhcmVudC0+c2Nyb2xsYWJs
ZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudFNjcm9sbGFibGVMYXllci0+aGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50U2Nyb2xsYWJsZUxheWVyLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgZmxhZ3MuYWRk
KFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcgKzkxMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9v
CiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1h
cCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdz
KQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZO
ZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1
c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTU3LDcgKzkxOSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFw
KiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJl
Y3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0
RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBv
aW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Niw3ICs5MjgsNyBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9yIG1heSBi
ZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNldEZyb21Sb290
ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50
U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBl
bmRlbnRGbGFncygpOwpAQCAtMTAxMyw3ICs5NzUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNl
dAogICAgIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW5UcmFu
c2Zvcm1lZExheWVyKTsKICAgICBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdzLmNv
bnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1fYmVoYXZlc0FzRml4ZWQgPSBm
bGFncy5jb250YWlucyhTZWVuRml4ZWRMYXllcik7Ci0gICAgc2V0SGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIp
KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21w
b3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgcmVmbGVjdGlvbidz
IHBvc2l0aW9uIGFuZCBzaXplLgogICAgIGlmIChtX3JlZmxlY3Rpb24pCkBAIC0xMDM2LDIwICs5
OTksMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgZmxhZ3MuYWRkKFNlZW5G
aXhlZExheWVyKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgZmxhZ3MuYWRkKFNlZW5D
b21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOwogCiAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQg
PSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAg
ICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAog
ICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBt
YXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBG
SVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3Jr
IHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJlbmRl
cmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9v
bCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNW
aWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVj
dHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5s
YXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBn
ZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQogdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9t
ZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5l
ZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTIwMiwxMiAr
MTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0LCB0
aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0
aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlmICht
X21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwot
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQdXNo
QW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0
b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjMxLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZs
YWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRlcmVy
KCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3Np
bmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsK
ICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVu
Y2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBv
c2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAg
ICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Ny
b2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgp
ICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKICAg
ICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3Np
dGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5l
KCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDksMTQgKzE2NDQsMTYg
QEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRl
TGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJl
bnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2Nv
cGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBl
bHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJl
bnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAg
ICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYSA9IHBhcmVudExheWVy
LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlv
dXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAg
ICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Nj
b3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXItPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxh
YmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgIGlm
ICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9
PSBtX2JveFNjcm9sbGluZ1Njb3BlKQogICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Nj
cm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGlu
Z1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5LDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpl
bmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBu
dWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpl
bmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAgICBhdXRvKiBvd25lckVsZW1l
bnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAgYXV0
byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwog
ICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1
NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJldHVybiBvd25lclJlbmRlcmVy
LT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Nv
bnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJv
dW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3Nz
RnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVy
LmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBh
bmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAg
ICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gZW5jbG9z
aW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9z
c0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKQEAgLTE4NzcsNyAr
MTgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgaWYgKGluY2x1ZGVTZWxmID09
IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUo
KnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwog
ICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2Nr
TGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIg
PSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91
bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIg
PSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVy
KSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAgfQpAQCAtMTg4NSw1MCArMTgy
Miw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
LUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJ
bnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQot
Ci1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAg
ICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0
b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVy
QmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9s
bEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5mb3Jj
ZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKLX0K
LQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9y
KCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBhcmVudCgpOwpAQCAtMjQ1NCwx
OSArMjM0Nyw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihj
b25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0
U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBh
ZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5z
dHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5k
ZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdG
b3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZF
UkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092
ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5n
KCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dT
Y3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiAjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50
KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKIHsKQEAgLTI0OTYsMjg5ICsy
Mzc2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIAot
Ly8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJv
b2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOwot
fQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJz
LgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMp
OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5p
bmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4K
LSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29u
dGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2Vy
ID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRS
ZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwg
LTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVs
dGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOwotCi0g
ICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1
c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRT
aXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJv
bVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsKLSAgICBJbnRQb2ludCBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlm
IHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVu
IHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJl
bnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGlmIChs
YXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55
KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBv
c2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtu
b3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNj
cm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUg
c3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdpZHRoKDApOwotICAgIGlmIChh
YnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQotICAg
ICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVz
dGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNj
cm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
QnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3Jv
bGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5kZXJl
cigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIo
KS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChyZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVs
dGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0gICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKLQotICAg
ICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0
IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5p
bmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAg
ICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJl
bnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFt
ZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5
UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOwotCi0gICAg
ICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9s
bFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBh
cmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFt
bWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAgICAvLyBoYXZlIGFuIG92ZXJm
bG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2Fu
IGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3Jv
bGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Ny
b2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8g
dHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3Jv
bGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJv
bVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNj
cm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICBzZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24u
eCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRp
b24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAg
ICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKLSAgICAgICAgc2Nyb2xsVG9P
ZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNj
cm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsK
LX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zm
c2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkp
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29u
c3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAg
TE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlzIDw8ICIgcmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAgaWYgKGF1dG8qIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAg
IHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotI2VuZGlmCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxD
bGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVz
KCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAg
ICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLQotICAgIFNjcm9sbE9mZnNl
dCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAg
IGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxU
eXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBpZiAo
IXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xh
bXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKLSAgICAgICAgc2Nyb2xs
VG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsK
LSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBl
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNv
bnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVu
dFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQot
ICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Ci0gICAg
aWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxB
bmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZz
ZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNT
Y3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xs
UG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24g
PDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8
IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAg
ICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghYm94LT5p
c0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMg
d2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4g
YmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICAg
ICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8g
ZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAgICAg
ICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50
V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zm
c2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIGludCBzY3JvbGxYT2Zm
c2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4
T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0g
Y2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdp
ZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRX
aWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAg
ICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOwotICAgICAgICAgICAgbmV3
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAgICAg
fQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bv
c2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9y
U3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFy
YW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQg
dGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBn
ZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRl
KCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRpb24g
PSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXco
KTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlm
IG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3Jv
bGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ug
d2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9y
LgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRy
ZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91
dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAg
ICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAg
ICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotCi0g
ICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewotICAgICAgICAgICAgLy8g
QXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNr
LCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlvbnMu
IFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1k
YXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUg
c3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcg
bGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAgICAg
ICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBz
ZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQotICAgICAgICAgICAgICAgIC8v
IFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQg
ZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAgICAg
ICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5n
IGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gc3RhY2tp
bmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5k
YW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNo
YW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgotICAgICAgICByZW5kZXJlcigp
LmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAgICAg
ICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwotICAg
IH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJG
b3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0
ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVl
ZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVy
ZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJl
Y3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFpbnRD
b250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29u
dGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwot
ICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbklu
UXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNSZXBh
aW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAg
ICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVzY2Vu
ZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICBy
ZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9s
bCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3Vy
IG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAgICAgICByZW5kZXJlcigpLnJl
cGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7Ci0K
LSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRz
LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAg
ICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVt
ZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFtZVZp
ZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCkudmll
d3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRp
ZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRW
aWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBG
cmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBs
aWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAgLTI4MjMsNyArMjQyMCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYg
YWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNv
bHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBh
cmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10o
RWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgewpAQCAtMjgz
Myw2ICsyNDMwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9OwogCiAgICAgaWYg
KGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xs
IHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13
ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQg
dXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNT
LgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAtMjg0MywyNCArMjQ0
MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBib3JkZXIgZWRnZS4g
TWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEuCiAgICAg
ICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+Ym9yZGVyTGVmdCgp
LCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBkaXJl
Y3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNjcm9sbCBi
YXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAgICAgICAgICAgLy8g
c3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHggb2YgbG9j
YWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAg
ICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShM
YXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDAp
KTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBfbHUs
IGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAgIGV4cGFu
ZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xsUGFkZGluZyhib3gs
IGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlvdXRSZWN0IHJldmVh
bFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5z
aWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAKLSAgICAgICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxP
ZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigp
KSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNl
dCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBhbmltYXRlZCA9IHNob3VsZFVz
ZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25zLmJlaGF2aW9yKTsKLSAgICAg
ICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVk
U2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZm
ZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAg
ICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAg
ICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9h
dFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGlu
Z0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxhYmxl
TGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVoYXZpb3IsIHJldmVhbFJlY3Qs
IGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0ID0gcmVzdWx0LnZhbHVlKCk7
CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAgICAgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50
KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RU
b1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0
IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICAgICAg
U2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3Bl
OwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNp
YmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3Qo
U2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogCiAgICAgICAg
ICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCkg
PyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IG51
bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IGVsZW1lbnQgPyBl
bGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUxLDIzICsyNTQzLDYgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNv
bHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5ZXItPnNjcm9sbFJlY3RUb1Zp
c2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKLXsKLSAgICBpZiAoY29t
cG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7Ci0gICAgICAgIC8vIE91
ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIg
ZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAgIGlmIChSZW5kZXJM
YXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdD
b21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xh
eWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRp
bmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2Vy
ZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNl
c3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNh
bCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVy
cyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogTGF5b3V0UmVjdCBSZW5kZXJM
YXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25z
dCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxB
bGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpIGNvbnN0CiB7
CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KTsKQEAgLTMxMTQsNyArMjY4OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgZWxl
bWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7CiAgICAgCiAgICAg
TGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRo
KCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgaWYg
KHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsK
ICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7CiAgICAgICAg
IGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsK
ICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3MTEsMTA5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6
ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2Zm
CiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NV
bml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9y
aXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2UgaW1wbGlj
aXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+
bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAg
ICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJn
aW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9
IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJl
ci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlSGVpZ2h0
ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdo
dCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0K
LSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChSYWRhciA0MTE4
NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0
byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkKLXsK
LSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Ci19Ci0KLVNj
cm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKLXsKLSAg
ICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBi
YWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6
U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlV2hlZWxFdmVudEZvclNj
cm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgaWYg
KCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKHVzZXNBc3luY1Njcm9sbGlu
ZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICAgICAg
cmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5n
KHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2
ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lv
biwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3Jv
bGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFy
SW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9
IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlz
LT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjpt
YXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6
Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9
IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklY
TUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9s
bGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0g
cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8
IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVs
c2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNo
YWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0
SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBz
dHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJs
ZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgp
IC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0
LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAg
cmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdl
KCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXll
cjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJv
bHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxD
b3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsK
LSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3Qg
UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
KCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJl
Y3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJl
bmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6
Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50
UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50
KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBh
cmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRl
cmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2
aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJ
bnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNs
aWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0
KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1Np
emUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAg
ICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCks
IHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNv
bnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0
dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNj
cm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAg
IGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5n
ZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5
b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsK
LSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRp
b25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50
KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRp
ZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdl
IHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAg
ICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xs
KTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3Np
dGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJl
cigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQot
UmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBh
dXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5k
ZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsK
LSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRo
KCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3Jv
bGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxi
YXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVy
bGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0
KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3Zl
cmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9s
bGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9
IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9u
T3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9s
bGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxi
YXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBj
b3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8g
SWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgot
ICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAg
ICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFy
KSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1Jl
Y3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
IHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAg
ICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6
ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNv
bnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1
bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJh
cikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdS
ZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAg
ICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9
Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAg
ICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBh
dXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1p
blhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVm
dENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwg
fSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6
ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
KQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsK
LQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICBy
ZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJh
clRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIm
IHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJl
dHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNp
emUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVy
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
KSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0
OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0g
ICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMg
bm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAg
aWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVC
eShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAg
IHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7
Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJC
b3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJl
cGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICgh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFp
bnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVy
LT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIg
JiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBz
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRv
d1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+
IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5k
ZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIg
PSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21T
Y3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0
PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAg
ICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywg
b3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQo
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3Vs
YXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7
Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVl
bEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1l
VmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51
bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xs
YmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJh
cjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3Jv
bGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIo
c2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZy
b21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94Pihy
ZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17
Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0g
Y3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJf
QkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092
ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3Jv
bGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNj
cm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVD
aGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQo
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBo
YXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9s
bGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAg
ICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkg
PSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNl
IHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQot
ICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3Jv
bGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9z
aXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+
c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNo
YW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsK
LQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVy
biByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17
Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JS
dWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0K
LQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
bmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1M
RWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8
fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAg
IHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5
bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJ
RCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBz
Y3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJu
IHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAg
IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpP
dGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19
Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAw
eCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwg
JyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRy
YW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwot
Ci0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0
ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2Rl
KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAg
aWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRl
cyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8g
T2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAg
ICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5n
KCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVy
dGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFu
Y3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dD
b250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChy
ZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNv
bnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9s
cygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFu
Y3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGlj
aXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBt
X2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVz
aXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8g
cmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8g
cmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
ID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBt
X2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBp
ZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAg
ICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAg
bV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIu
bW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikK
LSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIp
OwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3Qo
cmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25z
dAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVk
SW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4g
bV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0
KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5j
b21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
c25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAg
cmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXll
cjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZs
b3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0g
ICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3Zl
cmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dM
ZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExh
eW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJv
eC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93
UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBj
b25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVj
dCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1h
eFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQot
ewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0K
LSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXpl
LnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsK
LSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAt
IG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91
bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxh
YmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Ny
b2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3Jk
ZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92
ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAo
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpv
bnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93
KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVy
biBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1ko
KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
LXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBz
Y3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAg
IEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhl
aWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1z
dGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9
IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHls
ZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3Jv
bGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5o
YXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRp
YyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZs
b3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8g
c3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93
U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5
bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09
IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJm
bG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNh
bE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3Zl
cmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBv
ciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5k
ZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNl
dEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikp
Ci0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAg
IC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdh
aW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhB
dXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250
YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpv
bnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewot
ICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigp
KQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVo
YXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2Fs
T3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAg
ICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUo
KS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3Zl
cmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJm
bG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJz
Q2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9s
bEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVl
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIo
KS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNp
emVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFu
Z2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAg
IGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAg
ICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAg
ICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3Jv
bGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBj
bGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBp
bnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAg
IG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3Rl
cCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xs
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZv
cmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwot
ICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Ny
b2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0
ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBv
ZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5
b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4g
dGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMg
YmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNj
cm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBU
aGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5h
YmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNv
ZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9p
bnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9m
IGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChj
bGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xs
VG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBp
ZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0g
ICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9t
ZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVw
ZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVu
Y2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCpl
bGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhl
IHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21G
YWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXIt
Pm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAg
ICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgp
IC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFu
ZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9v
bUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWln
aHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAotICAgIGlmIChjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5n
VXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICB1cGRhdGVTY3Jv
bGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBh
bHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQg
dW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxv
d0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CitS
ZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKLSAgICBpZiAocmVjdHMuaG9y
aXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiBy
ZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIC8vIFNjcm9s
bGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJl
Y3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxi
YXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29s
IHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5kZXJCb3guc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSBy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwogCi0gICAgaWYgKHJl
Y3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5lclJl
Y3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2Fs
U2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIg
PSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxl
ZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9u
aW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAg
IH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAgICBhdXRvIHNj
cm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNr
bmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJU
aGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRo
ZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgo
KSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYg
KHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3Mp
OwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi17Ci0gICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVy
KCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICBpZiAo
IXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0Jh
Y2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZp
bHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQg
cGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0gICAg
Ly8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50
aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxzZSwg
YW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3Zl
cmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2ls
bCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0g
ICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGlt
ZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRvZXNu
J3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0gICAg
aWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7
Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0Owot
Ci0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYg
dGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFyICYm
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJlY3Qg
bG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3Zl
QnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0Js
ZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsK
IAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRp
bmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50
aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7CisgICAgaWYgKGlzb2xhdGVzQmxl
bmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7
CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAg
ICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRp
b24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8
ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcg
Y3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250
cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYWlu
dGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2Fj
aGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3
aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRz
IGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdp
dGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRv
Y3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4K
LSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZz
ZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGlu
IHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFsYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBk
YW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0KLSAgICBp
ZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2Ug
ZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIg
dGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRo
ZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNl
dCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2lu
Y2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVy
KGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29y
bmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0
RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAg
ICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3Zl
QnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3Qp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9s
VGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Ny
b2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQg
YSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAg
ICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xs
YmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHJlbmRlcmVyKCku
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3Qu
bWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgcmV0
dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRy
YXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0
aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBG
bG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJl
c2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVy
UmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKLSAgICAg
ICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBj
b3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgfQorICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+
c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQu
dHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRo
KCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0g
Y29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0
U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAgICAg
ICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3RvcmUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5lcklt
YWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5k
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpy
ZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93
UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRlckxh
eWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCku
cmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJB
YnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRP
ZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICBpZiAoY29udGV4dC5p
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0g
ICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVz
aXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3Jt
UmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKLQotICAgIC8vIERyYXcgYSBm
cmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkg
c2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmln
aHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAgIGlmICghaGFzT3ZlcmxheVNj
cm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICBjb250ZXh0LmNsaXAo
cmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6
ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdl
ckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOwot
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcs
IDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7Ci0gICAg
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICAg
ICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKLSAgICB9
CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgpIC0gb3ZlcmZsb3dSZWN0Lnko
KSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9p
bnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNzcsNDIgKzI4MjQsNiBAQCBib29sIFJlbmRlckxh
eWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CiAg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQ
b2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCi17Ci0gICAg
aWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAg
IEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29u
dGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFz
cyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+
c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMudmVy
dGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRp
Y2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3Jv
bGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3Jv
bGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Ci19Ci0KIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQ
YWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJv
b3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5Q
YWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNv
bnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92ZXJsYXBUZXN0UmVxdWVzdHM7
CkBAIC00MjI4LDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3
aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJl
aGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5
ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdl
UmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0g
ICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWlu
dGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZv
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3Qm
IGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpOwpAQCAtNDI2MSw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAg
ICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5nIGFi
bGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJlIGlu
IG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRoYXQg
YWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1ZGVT
ZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBsYXll
ci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBh
aW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT51
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgYm9vbCB1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8gbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIGlm
IChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxv
d1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5o
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJh
ZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVyKSkg
ewpAQCAtNDQ2Myw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4
ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sJgogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9u
IGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAg
ICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBjb250ZW50c1Nj
cm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQo
KSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNjcm9sbGFibGVBcmVhKCkg
PyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIDogZmFsc2U7Cisg
ICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZyYW1l
KCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJvbWUo
KS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xsaW5n
T25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcpIHsK
ICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMzNjgsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRM
YXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkK
ICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50Q29u
dGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJhcnMo
KSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNj
cm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAg
ICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywg
Y3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgfQogCiAgICAgICAg
IGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBjb2xs
ZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8gcmVw
cmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIzNywxMSArMzg0MSwxMyBAQCB2b2lkIFJl
bmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJv
bHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50
aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAgICAgaWYgKGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50
LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQs
IHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0
aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxP
ZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xz
KGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91
bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8u
c3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJh
Y2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwogICAgIH0KQEAg
LTUyODAsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAg
ICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAg
ICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1l
bnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxh
eWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU1MTEsNyAr
NDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9mZnNldEZyb21BbmNl
c3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAgaWYg
KGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMs
IGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2FuUmVzaXplKCkgJiYg
bV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0UmVzaXplckluRnJh
Z21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CiAg
ICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQp
OwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTg2LDM1ICs0MTkyLDYgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5
b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVu
dHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJv
eFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJv
cmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBm
cmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAg
ICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlD
b3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9t
Qm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVy
UmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0
b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMu
bWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNp
emUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBs
YXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBM
YXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBh
dXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlm
IChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYg
cmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9p
bnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0
VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1l
ZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNv
bnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0
YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjA3NSw5ICs0NjUy
LDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQogICAg
IGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGFibGVBcmVhKCk7CisKICAg
ICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICByZWN0
Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKHNjcm9sbGFi
bGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9z
aXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKCFzY3Jv
bGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBS
ZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkK
ICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5j
bGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwyMSArNDk1NCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhh
c0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2lu
Zy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcg
PyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0K
LQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2lu
ZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJv
b2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFp
c0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTY0MTks
MTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWludEZs
YWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQ
aGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91
bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93
blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewog
ICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRl
c2NlbmRhbnQoKSkKQEAgLTY1NDcsOSArNTEwNywxMCBAQCBib29sIFJlbmRlckxheWVyOjpzaG91
bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAoIWlzTm9ybWFsRmxvd09ubHko
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJh
cnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKLSAgICAg
ICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAm
JiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSB8fCBtX3Njcm9sbGFi
bGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAgICB8
fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVvKCkK
ICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0KCkKQEAgLTY2NjQsNyArNTIy
NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0
CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgaGFz
T3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNP
ckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5o
YXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5
Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApAQCAtNjY3NCw3
ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRD
b250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50
KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwg
KG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9s
cygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
IApAQCAtNjY5OSwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25F
bXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhh
c05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2
ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFy
YW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBv
dmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZs
b3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcg
YSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVw
IGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYg
KChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xs
YmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNT
Y3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBu
ZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+
c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5
IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBi
ZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBu
ZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYm
IG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAm
JiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFs
Rmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3NTEsNiArNTI4MCw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9CiAKKyAgICB1cGRhdGVTY3Jv
bGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxl
cyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBU
aGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSBy
ZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCArNTI5MywxNCBAQCB2b2lkIFJl
bmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBp
bnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmls
aXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxN
YXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1
ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFt
X21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1
ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAg
IH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotCi0g
ICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVz
dHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFy
c0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNjcm9s
bGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAv
LyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQu
CiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzMTUsOCBAQCB2
b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVlZCB0
byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmlj
ZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQo
KTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAg
IAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxl
KCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2VuZGFu
dERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1LDk4ICs1
MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAg
IEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0K
LSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVz
dGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3
LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBv
d25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGlu
ZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVU
b0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFT
U0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3Jv
bGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAg
ICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9y
UmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92
ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Nj
cm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFj
Y2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAg
ICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3Rl
bmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRl
ZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
Q29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVu
ZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRv
U3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5
bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3Jv
bGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxD
b3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xs
Q29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChu
dWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFs
UmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJl
c2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVy
ZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBj
bGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNp
emVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJh
clBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAg
ICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQot
ICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVz
aXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+
c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVh
clJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsK
LX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAog
ewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxs
cHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJG
aWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7Cisg
ICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFt
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1ZTxS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9sbGFi
bGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9uKCk7
CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
RmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsKQEAg
LTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJT
dHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xp
ZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYSgpCit7
CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgIGNsZWFyTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYg
Ym94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICBpZiAoIWJveC5yZXF1
aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgY2xlYXJMYXllclNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5jb21wdXRlSGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9y
RGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigp
OworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxl
KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3ko
KQogewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5IHVzZWQgdG8gcmVuZGVyIHRo
ZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDM4LDcgKzU1MTEsNyBAQCBzdGF0aWMg
UmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVudCgpKQogICAgICAgICByZXR1
cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIp
OworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29u
c3QKQEAgLTcwNjAsNiArNTUzMywxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpzaW11bGF0ZUZyZXF1
ZW50UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJl
cXVlbmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRhdGVUaW1lc3RhbXAoKSB9Owog
fQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFy
ZWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQorCiAj
aWYgIUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiByZWFzb24p
CiB7CkBAIC03MjYyLDkgKzU3NDAsMTAgQEAgc3RhdGljIHZvaWQgb3V0cHV0UGFpbnRPcmRlclRy
ZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBXZWJDb3JlOjpSZW4KICAgICAg
ICAgcmV0dXJuICItIjsKICAgICB9OwogCisgICAgYm9vbCBsYXllckhhc0NvbXBvc2l0ZWRTY3Jv
bGxpbmdBbmNlc3RvciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkgPyBsYXllci5zY3JvbGxhYmxl
QXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSA6IGZhbHNlOwogICAgIHN0
cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRpbmdEZXN0aW5hdGlvblN0cmluZygpOwogICAgIHN0cmVh
bSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkgPyAiYyIgOiAiLSIpOwotICAg
IHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgPyAicyIg
OiAiLSIpOworICAgIHN0cmVhbSA8PCAobGF5ZXJIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IgPyAicyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzVHJhbnNmb3JtZWRBbmNl
c3RvcigpID8gInQiIDogIi0iKTsKIAogICAgIHN0cmVhbSA8PCAiICI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGExNWQ1MWJmZmY1Yy4uYmU2MTk3NWExMGM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgog
ICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9u
cyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIK
LSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtNzUsNiArNzUs
NyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsK
IGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsK
K2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBSZW5kZXJNYXJxdWVlOwog
Y2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CkBAIC0xNDMs
MTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewogdXNpbmcg
U2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVyTGF5ZXIgZmluYWwgOiBwdWJs
aWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hF
QVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJl
bmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKICAgICBm
cmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7
CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CisgICAgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJlcidz
IHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJlRGVz
dHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJM
aXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykgeyBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dl
ZCA9IGZsYWc7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkZXN0cm95KCk7CisK
IHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJvcGFnYXRlIGluIHBhaW50IG9yZGVyICh6
LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29tcG9zaXRpbmcgewpAQCAtNDAxLDYgKzQw
OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7
CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBJbmRpY2F0ZSB0
aGF0IHRoZSBsYXllciBjb250ZW50cyBuZWVkIHRvIGJlIHJlcGFpbnRlZC4gT25seSBoYXMgYW4g
ZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIgY29tcG9zaXRpbmcgaXMgYmVpbmcgdXNlZC4KICAgICB2
b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFpbnQoR3JhcGhpY3NMYXllcjo6U2hvdWxkQ2xpcFRvTGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlwVG9MYXllcik7CkBAIC00MTEsOCArNDIxLDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29s
IGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEwNyArNDQxLDI5IEBAIHB1Ymxp
YzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9j
YXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZp
bmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6
ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNj
cm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAg
dm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9s
bGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93Lgot
ICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xs
YWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNj
cm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
IGZpbmFsOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkKTsKIAogICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50
IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKICAgICB2b2lkIHNjcm9sbFRv
WVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1w
aW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xs
ID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkg
bWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNl
dChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9Z
T2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQo
KS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNs
YW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25h
bDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b25JZk5lZWRlZCgpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KTsKKyAgICB2b2lk
IHNjcm9sbFRvWU9mZnNldChpbnQgeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50
IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KICAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFy
aWVzKSBjb25zdDsKIAotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWls
YWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMg
aW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlz
aWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVy
ZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFy
OyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29s
IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIo
KTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3Np
dGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRp
b247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxl
QXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wg
aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBm
aW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAg
ICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAg
ICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYK
LQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2
b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVz
UmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAg
ICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBm
aW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAv
LyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBi
dXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBv
dmVyZmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKLSAg
ICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJm
bG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0KLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQot
ICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogICAgIGJvb2wgaXNQb2ludElu
UmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRl
c3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQot
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0g
MSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29sIGNh
blJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2LDkgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib29sIGRp
ZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJm
bG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRT
Y3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVySW5FbmNsb3NpbmdQYWdpbmF0
aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIHsgRXhj
bHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVk
TGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihQYWdp
bmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM4LDYgKzU2NSw4IEBAIHB1Ymxp
YzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlv
blR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29u
dGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUg
bGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJl
IGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNv
bnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsg
fSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6
OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0
VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRU
ZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBz
dHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3Qg
UmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwg
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dD
bGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODUs
MTEgKzcxMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExh
eW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9
CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsg
bV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7
IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5v
dGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4u
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTksMTYgKzc4Miw2IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhi
b29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3lu
Y1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNl
c3RvcjsgfQotICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wg
aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0KICAgICAvLyBM
YXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBj
b21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVy
biBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVyeSBy
ZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElz
S25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJv
b2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0
ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygp
IGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
OyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwog
ICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1
ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMxLDcgKzgzNyw3IEBA
IHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsg
UGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAg
ICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNv
bik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0
cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTEsOSAr
OTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsK
IAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgp
OwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0Zv
clJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxs
UmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDM5LDggKzk0Miw2IEBA
IHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwg
UGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVy
Qm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQo
KTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5ZXJG
aWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCBjbGVh
ckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVy
c0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4p
IGNvbnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4
dCYgZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWlu
dExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxM
YXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhH
cmFwaGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0x
MTAwLDY0ICsxMDAzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVu
dHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVj
dCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNv
bnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJh
Z21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0
OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQp
IGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21l
bnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwg
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5
b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRy
KTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25z
dCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAg
IGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Nj
cm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5l
clJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50
IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBm
aW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNv
bnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikg
Y29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwot
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBz
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qg
c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wg
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1
c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xs
YWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAg
IHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6
ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9p
ZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBi
b29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3Rv
ckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNDksNiBAQCBw
cml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBs
YXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBv
aW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAg
dm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigp
OwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQ
YWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29s
IGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1
Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKElu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29t
cG9zaXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0g
ICAgTGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3Zl
cmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7
Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhv
cml6b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBA
IC0xMjMwLDggKzEwNjksNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9s
UmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93
Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0K
ICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAg
ICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg1LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBj
dXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQg
YW5kIHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6
IDE7CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRv
bid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBs
ZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFu
eSBkZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVj
dGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5z
aWRlIGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1
bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29s
IG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVD
b250ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7
CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1Zp
ZXdwb3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDgg
KzExMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQg
OiAxOyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRO
b25Db250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3Jv
bGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wg
bV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNU
cmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2Vz
dG9yIDogMTsKQEAgLTEyODgsMTcgKzExMjAsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
aW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFz
b24KICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29u
IDogMjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9v
bCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5k
aWYKLSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRp
ZgotCi0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7
Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9v
bCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAg
ICAgYm9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzks
MjUgKzExNjAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQK
ICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQ
b3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVh
LgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92
ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxi
YXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50
UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Ny
b2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBt
X2JveFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3Jh
bE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8g
VXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1
ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3Ag
dmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlv
dXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcsMTAgKzExNzQsNiBAQCBwcml2
YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMg
KHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGlj
YT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBz
Y3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQ
YXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4g
bV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVy
IHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBh
Z2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25M
YXllcjsKIApAQCAtMTM3OCw2ICsxMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRG
cmVxdWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiAr
MTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxh
eWVyKik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7
CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJM
YXllcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDUxNGM5OGVjZWVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCAr
NTgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJ
RnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVy
Q29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlk
ZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0
aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5n
Q292ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVD
b3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29s
IHVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXpl
KCk7CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAg
IGlmIChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAg
ICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3Jv
bGxpbmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxh
YmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9
IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAg
IGlmIChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAg
dGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGlu
ZzsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2lu
Zzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpCiAgICAgICAgICAgICB0aWxl
ZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwogICAgIH0KIAotICAgIGlm
IChtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBtX3Nj
cm9sbGVkQ29udGVudHNMYXllcikgeworICAgIGlmIChtX293bmluZ0xheWVyLnNjcm9sbGFibGVB
cmVhKCkgJiYgbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAg
aWYgKGF1dG8qIHRpbGVkQmFja2luZyA9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT50aWxlZEJh
Y2tpbmcoKSkgewogICAgICAgICAgICAgYXV0byB0aWxlQ292ZXJhZ2UgPSBjb21wdXRlT3ZlcmZs
b3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShtX293bmluZ0xheWVyKTsKICAgICAgICAgICAgIHRpbGVk
QmFja2luZy0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7CkBAIC03NzUsNyArNzc4LDcg
QEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlKQogc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zv
cm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAg
ICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkg
ewotICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkg
fHwgKGN1cnItPnNjcm9sbGFibGVBcmVhKCkgJiYgY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtOTcyLDcgKzk3NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzCiAg
ICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rl
c2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9IGZhbHNlOwotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcgPSBtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlQXJlYSgpICYmIG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogCiAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKSB7CiAgICAgICAgIC8vIElmIGl0J3Mgc2Nyb2xsYWJsZSwgaXQgaGFzIHRvIGJlIGEgYm94
LgpAQCAtMTIyNywxMCArMTIzMCwxMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6
Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgICAg
ICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IHNuYXBwZWRHcmFwaGljc0xheWVyKGNsaXBwaW5n
Qm94T2Zmc2V0LCBjbGlwcGluZ0JveC5zaXplKCksIGRldmljZVNjYWxlRmFjdG9yKCkpLm1fc25h
cHBlZFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+
c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0
IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJv
dW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENv
bnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0
IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAg
ICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVDb21wb3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFu
Y2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3Qg
PSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6
ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Ny
b2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2
Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShj
b25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENv
bnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5s
b2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Ny
b2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsK
IAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3Jv
bGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7
CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5
ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsK
QEAgLTEzODEsNyArMTM5MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJv
b2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJ
bnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xh
eWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUo
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhl
aWdodCgpKTsKICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Ny
b2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUw
MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29u
dGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAg
aWYgKG1fb3duaW5nTGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2Vy
KSB7CisgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVB
cmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKKworICAgIGlmIChzY3JvbGxhYmxl
QXJlYS0+Y3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAg
IC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0
byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNh
dXNlIGppdHRlci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xs
T2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9v
d25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7
CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGlt
cGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlz
IGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAg
c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXll
clBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVB
cmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAg
IH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1pl
cm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlQ2xpcHBpbmdTdGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAg
ICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVj
dC5zaXplKCkpOwogCiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xs
KSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERh
dGEuY2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9m
ZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xs
T2Zmc2V0OworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNs
aXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlw
cGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxh
c3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjgs
MTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJl
cXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9s
bGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNj
cm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1f
b3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJu
IHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDUsMTYg
QEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBj
b25zdAogICAgIGlmICghaXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xh
eWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsK
KyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVh
KCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9s
bGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9s
bGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xh
eWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0g
c2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFy
ID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXll
ci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Ny
b2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIwOTAsMTIgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hv
cml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVy
KG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJz
Y3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBt
X293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlm
IChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25p
bmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9s
bGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3Jv
bGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEsIEhv
cml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxh
YmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgVmVydGljYWxT
Y3JvbGxiYXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7
CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBpZiAoIW1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiAr
MjEyOSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRy
b2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRv
IHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJm
bG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigq
bGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNl
dERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAh
bGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXll
ciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9s
bGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNl
dCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNh
bFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxh
eWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigp
ICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8q
IGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTE2LDEwIEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNv
bnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAg
IEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsK
LSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9m
ZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9m
ZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBt
X293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVj
dC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0
b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIp
OwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjUs
OCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhp
Y3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293
bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4
dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisg
ICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgp
OworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAg
ICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5n
SW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdP
dmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFp
bnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBA
IC0zNDIwLDE3ICszNDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAg
ICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVs
c2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsK
LSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFy
KCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFi
bGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChn
cmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBw
YWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQs
IGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisK
KyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9
PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1f
b3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVy
UmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNj
cm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAg
ICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNs
YXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9y
bWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3Zl
QnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1l
ZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50
UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWlu
dFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zv
cm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4
dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwog
ICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBjZmM0
YWIxNTI4ODYuLjUyMzU0NTYxMzlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xMzk3LDcgKzEzOTgsNyBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYg
bGF5ZXIsIFZlY3RvcgogICAgICAgICBpZiAobGF5ZXJCYWNraW5nLT5oYXNBbmNlc3RvckNsaXBw
aW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNraW5nLT5hbmNlc3RvckNsaXBwaW5nU3RhY2soKS0+aGFz
QW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sYXllcnND
bGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVuZCgmbGF5ZXIpOwogCi0gICAgICAgIGlmIChsYXllci5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3Jv
bGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm92ZXJmbG93U2Ny
b2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVyKTsKIAogICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0
ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAgLTIwMDEsNyArMjAwMiw3IEBAIHN0YXRpYyBBbmNlc3Rv
clRyYXZlcnNhbCB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
ciwgRnVuY3RpCiAKIHN0YXRpYyBib29sIGNyZWF0ZXNDbGlwcGluZ1Njb3BlKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVy
LnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKIH0K
IAogc3RhdGljIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNsb3Np
bmdDbGlwcGluZ1Njb3Blcyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxh
eWVyJiByb290TGF5ZXIpCkBAIC0yMDA5LDcgKzIwMTAsNyBAQCBzdGF0aWMgVmVjdG9yPExheWVy
T3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGNvbnN0
IFJlbgogICAgIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBjbGlwcGlu
Z1Njb3BlczsKICAgICBjbGlwcGluZ1Njb3Blcy5hcHBlbmQoeyBjb25zdF9jYXN0PFJlbmRlckxh
eWVyJj4ocm9vdExheWVyKSwgeyB9IH0pOwogCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwg
IWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcigp
KQogICAgICAgICByZXR1cm4gY2xpcHBpbmdTY29wZXM7CiAKICAgICB0cmF2ZXJzZUFuY2VzdG9y
TGF5ZXJzKGxheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wg
aW5Db250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCkgewpAQCAtMjA0MSw3ICsyMDQyLDcgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcChMYXllck92ZXJsYXBNYXAm
IG92ZXJsYXBNYXAsIGNvbnN0IFIKICAgICBhdXRvIGNsaXBwaW5nU2NvcGVzID0gZW5jbG9zaW5n
Q2xpcHBpbmdTY29wZXMobGF5ZXIsIHJvb3RSZW5kZXJMYXllcigpKTsKIAogICAgIExheW91dFJl
Y3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
cigpKSB7CisgICAgaWYgKGxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAgLy8g
Q29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhlIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nIGFuY2VzdG9yLCB0
aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIGF1dG8mIHNj
cm9sbGluZ1Njb3BlID0gY2xpcHBpbmdTY29wZXMubGFzdCgpOwogICAgICAgICBhdXRvJiBzY29w
ZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUubGF5ZXI7CkBAIC0yODg5LDcgKzI4OTAsNyBAQCBWZWN0
b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVBbmNl
c3RvckNsaXBwaW5nU3RhY2soYwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzQ29udGFpbmlu
Z0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93
Q2xpcCgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLnNjcm9s
bGFibGVBcmVhKCkgJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaGF2ZU5vblNj
cm9sbGFibGVDbGlwcGluZ0ludGVybWVkaWF0ZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgICAg
IHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgqY3VycmVudENsaXBwZWRMYXllciwgYW5jZXN0b3JMYXll
cik7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRlcm1l
ZGlhdGVMYXllciA9IGZhbHNlOwpAQCAtMjkzMyw3ICsyOTM0LDcgQEAgU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKGNv
bnN0IFJlbmQKIAogICAgIFNjcm9sbGluZ05vZGVJRCBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQg
PSAwOwogICAgIHRyYXZlcnNlQW5jZXN0b3JMYXllcnMoKmVuY2xvc2luZ0xheWVyLCBbJl0oY29u
c3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaXNDb250YWluaW5nQmxvY2tDaGFp
biwgYm9vbCAvKmlzUGFpbnRPcmRlckFuY2VzdG9yKi8pIHsKLSAgICAgICAgaWYgKGlzQ29udGFp
bmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0
b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBjb250
YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBsYXllclNjcm9sbGluZ05vZGVJRChhbmNlc3RvckxheWVy
KTsKICAgICAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAgICAg
fQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9s
bGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBx
dWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxh
YmxlQXJlYSgpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0Rh
dGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMyNTIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRlcgog
ICAgICAgICByZXR1cm4gbGF5ZXIuaXNDb21wb3NpdGVkKCk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwog
fQogCiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29t
cHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBi
b29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVzY2Vu
ZGFudHMsIGJvb2wgcGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZykgY29uc3QKQEAgLTMyNzMsNyAr
MzI3NCw3IEBAIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvCiAgICAgfQogCiAgICAgLy8gSWYgdGhp
cyBsYXllciBzY3JvbGxzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgbGF5ZXIgdGhhdCBpdCB3b3Vs
ZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0byBnZXQgY29tcG9zaXRlZC4KLSAgICBpZiAoIXBhaW50
c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yKCkpIHsKKyAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoKSkgewogICAgICAgICBhdXRvKiBwYWludERlc3RpbmF0aW9uID0gbGF5
ZXIucGFpbnRPcmRlclBhcmVudCgpOwogICAgICAgICBpZiAocGFpbnREZXN0aW5hdGlvbiAmJiBs
YXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGxheWVyLCAq
cGFpbnREZXN0aW5hdGlvbikgIT0gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZSkKICAg
ICAgICAgICAgIHJldHVybiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpPdmVyZmxvd1Njcm9s
bFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3ICszMzExLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxh
eWUKIAogICAgIGF1dG8qIGVuY2xvc2luZ092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdP
dmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CiAKLSAgICBpZiAoZW5jbG9zaW5nT3ZlcmZs
b3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkpIHsKKyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3Np
bmdPdmVyZmxvd0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpICYmIGVuY2xvc2luZ092ZXJmbG93TGF5
ZXItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkg
ewogICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQogICAgICAg
ICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2luZ092ZXJm
bG93TGF5ZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM0Miw3ICszMzQzLDcgQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlj
a3lMYXllcihjb25zdCBSZW5kZXIKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5zaWRl
IG9mIGEgdHJhbnNmb3JtLCB3aGljaCBzaG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KICAgICBm
b3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5zY3JvbGxhYmxl
QXJlYSgpICYmIGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGFu
Y2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIGFuY2VzdG9yLT5pc0NvbXBvc2l0ZWQoKSAm
JiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4ICszMzk0LDEwIEBAIHN0YXRpYyBSZW5kZXJMYXllciog
ZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
ciwKICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gJmludGVybWVkaWF0ZUxheWVyKQogICAg
ICAgICAgICAgc2F3SW50ZXJtZWRpYXRlTGF5ZXIgPSB0cnVlOwogCi0gICAgICAgIGlmIChhbmNl
c3RvckxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAg
ICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KGFuY2VzdG9yTGF5ZXIpOworICAgICAg
ICBpZiAoYXV0byogYW5jZXN0b3JMYXllclNjcm9sbGFibGVBcmVhID0gYW5jZXN0b3JMYXllci0+
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXJTY3JvbGxh
YmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7CisgICAg
ICAgIH0KIAogICAgICAgICBhbmNlc3RvckxheWVyID0gYW5jZXN0b3JMYXllci0+cGFyZW50KCk7
CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLAogCiBT
Y3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJTY3Jv
bGxCZWhhaGF2aW9yUmVsYXRpdmVUb0NvbXBvc2l0ZWRBbmNlc3Rvcihjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBjb21wb3NpdGVkQW5jZXN0b3IpCiB7Ci0gICAg
aWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxh
eWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25p
bmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGJvb2wgY29tcG9zaXRlZEFuY2VzdG9ySXNJbnNpZGVT
Y3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0Myw3ICszNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29sbGVj
dFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgaXNQYWludE9yZGVy
QW5jZXN0b3IpCiAgICAgICAgICAgICByZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0b3A7CiAK
LSAgICAgICAgaWYgKHNlZW5QYWludE9yZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Jsb2Nr
Q2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkp
CisgICAgICAgIGlmIChzZWVuUGFpbnRPcmRlckFuY2VzdG9yICYmICFpc0NvbnRhaW5pbmdCbG9j
a0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVy
LnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAg
ICAgICAgICAgIGFwcGVuZE92ZXJmbG93TGF5ZXJOb2RlSUQoYW5jZXN0b3JMYXllcik7CiAKICAg
ICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVyc2FsOjpDb250aW51ZTsKQEAgLTM0NTgsNyArMzQ2
MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
b21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCku
aXNGaXhlZFBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVo
YXZpb3I6Ok5vbmU7CiAgICAgCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNj
cm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAg
ICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGF1dG8qIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKQEAgLTQ0
NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0
dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBTCiAgICAgICAgIG1fY2xpcExh
eWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQobm9kZUlEKTsKICNlbmRpZgogCi0gICAgbV9zY3JvbGxp
bmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCBtYWtlV2Vha1B0cihsYXllcikpOworICAgIEFT
U0VSVChsYXllci5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVy
TWFwLmFkZChub2RlSUQsIG1ha2VXZWFrUHRyKCpsYXllci5zY3JvbGxhYmxlQXJlYSgpKSk7CiAK
ICAgICByZXR1cm4gbm9kZUlEOwogfQpAQCAtNDQ3NSw4ICs0NDc5LDggQEAgdm9pZCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmRldGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXJXaXRoUm9sZShSZW5k
ZXJMYXllciYgbGEKICAgICBhdXRvIHVucmVnaXN0ZXJOb2RlID0gWyZdKFNjcm9sbGluZ05vZGVJ
RCBub2RlSUQpIHsKICAgICAgICAgYXV0byBjaGlsZE5vZGVzID0gc2Nyb2xsaW5nQ29vcmRpbmF0
b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlEKTsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkTm9kZUlE
IDogY2hpbGROb2RlcykgewotICAgICAgICAgICAgaWYgKGF1dG8gd2Vha0xheWVyID0gbV9zY3Jv
bGxpbmdOb2RlVG9MYXllck1hcC5nZXQoY2hpbGROb2RlSUQpKQotICAgICAgICAgICAgICAgIHdl
YWtMYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAo
YXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChj
aGlsZE5vZGVJRCkpCisgICAgICAgICAgICAgICAgd2Vha1Njcm9sbGFibGVBcmVhLT5sYXllcigp
LnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVwZGF0ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9z
Y3JvbGxpbmdOb2RlVG9MYXllck1hcC5yZW1vdmUobm9kZUlEKTsKQEAgLTQ2NTcsOCArNDY2MSwx
MSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxp
bmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxh
eWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3Vs
ZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOwor
ICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJs
ZVNpemUoKSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAg
aWYgKGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0Njg1LDE0
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJz
KFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3Jv
dW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAg
ICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byog
c2Nyb2xsYWJsZUFyZWEgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQo
c2Nyb2xsYWJsZUFyZWEpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2lu
ZygpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwg
eyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29u
dGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAg
ICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IH0pOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwog
ICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0NzMwLDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRl
CiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikK
ICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwg
KnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGlu
Z05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlE
KQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3Jv
bGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdl
cyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUu
cGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNj
cm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7
CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlEOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGMxNTFlMjNk
MGVmNi4uMmNkNzFjYjhmM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllclVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlv
blNldC5oPgogCkBAIC02MzUsNyArNjM2LDcgQEAgcHJpdmF0ZToKICAgICBDb2xvciBtX3ZpZXdC
YWNrZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3I7
CiAKLSAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwgV2Vha1B0cjxSZW5kZXJMYXllcj4+IG1f
c2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXA7CisgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFdl
YWtQdHI8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4+IG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJN
YXA7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcj4gbV9sZWdhY3lTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi41NWYzZWFhMGNjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTAsMCArMSwx
ODQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1h
eSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
VmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRt
bAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1Q
TCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAg
SWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxl
IG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0
aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisg
KiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNp
c2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhl
IE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRl
bGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhl
IEdQTC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVy
KQorICAgIDogbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxv
d1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2Up
CisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKKyAgICAsIG1f
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3Jl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbihmYWxzZSkKKyAgICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNl
KQorICAgICwgbV9sYXllcihsYXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0
aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKwor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSByZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3Jv
bGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJh
cik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3Ju
ZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9s
YXllci5yZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChtX2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNh
dmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwg
dmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVt
ZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBv
c2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50
UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2
ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQo
Y29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhh
dmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91
dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRl
cmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3Vj
aEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBp
ZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50
KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNl
bmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4
ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Mo
KSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRv
ci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBj
b25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVy
ZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdD
b29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNj
cm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAg
ICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNl
bmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygp
LmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygp
OworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmco
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRl
ZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4gcG9zaXRpb24pCit7CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbi52YWx1ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9s
bFBvc2l0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb24pKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9u
KCk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3Jv
bGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQ
b3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBl
LCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3Jv
bGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Ny
b2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAo
YW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5
cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKwor
U2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBz
Y3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxP
ZmZzZXQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8
PCBtX2xheWVyIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24p
OworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcpCit7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5p
bWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNj
cm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBl
ZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAg
IHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Ny
b2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsK
KworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9u
KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3Vy
cmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsK
KworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Cisg
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxP
ZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlv
dXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47
CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9z
Y3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlw
ZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBu
ZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsK
KyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBp
ZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAg
aWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdz
IG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1z
IHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNldCA9
IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAg
ICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5l
d1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0Lngo
KTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0
aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAg
ICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xs
WE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAg
ICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09mZnNl
dC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQ
b3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9s
bEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9u
KSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xs
VG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0
dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMg
dG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAg
aWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7CisgICAgICAgICAg
ICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247
CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJW
aWV3JiB2aWV3ID0gcmVuZGVyZXIudmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlv
bnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNo
b3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJv
bSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxh
eW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdl
J3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25j
ZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
T3ZlcmZsb3dTY3JvbGwoKTsKKworICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBk
YXRlV2lkZ2V0UG9zaXRpb25zKCk7CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uKSB7CisgICAgICAgICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXll
cnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIK
KyAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVp
cmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7
IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdo
ZW4gdGhhdCBjb21wbGV0ZXMuCisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkgeworICAgICAgICAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFm
ZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBi
ZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBh
IGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisg
ICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVC
YWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBv
ZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmludmFs
aWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJs
YXlzOjpkaWRMYXlvdXQocmVuZGVyZXIuZnJhbWUoKSk7CisgICAgfQorCisgICAgRnJhbWUmIGZy
YW1lID0gcmVuZGVyZXIuZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyID0gcmVuZGVyZXIuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRo
ZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAg
IGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlv
dXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkg
PyByZW5kZXJlci5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIu
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAgICBG
bG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVw
YWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRG
b3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNo
RmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
KworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9t
ZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVyLnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0g
bV9sYXllci5iYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAg
IH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4K
KyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdD
b250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2No
ZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+
ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAg
aWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5n
ZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRz
Q2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5
ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAgIGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5o
YXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcg
Y29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRz
IHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBv
c2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBv
c2l0aW5nQW5jZXN0b3IgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21w
b3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21w
b3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9u
cyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGlu
Z0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJh
dmVyc2FsKCk7CisgICAgICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29t
cG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRp
bmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAg
ICByZXR1cm4gbV9zY3JvbGxXaWR0aDsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94
KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGlu
c3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWln
aHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBv
c2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qg
d29yayB3aXRoIGJpdGZpZWxkcy4KKyAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gdHJ1ZTsKKyAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAg
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJx
dWVlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBp
ZiAocmVuZGVyZXIuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJl
aGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsK
KyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5p
cXVlPFJlbmRlck1hcnF1ZWU+KCZtX2xheWVyKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVN
YXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJx
dWVlID0gbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5k
ZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3Jv
bGxzT3ZlcmZsb3coKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCku
dmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNl
dHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0Zv
cmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVS
RkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3Zl
cmZsb3coKSAmJiAocmVuZGVyZXIuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkg
fHwgcmVuZGVyZXIuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xs
KCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBv
ZmZzZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkp
OworfQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
aW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxp
bmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9s
bGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFp
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygp
ICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JTY3Jv
bGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdo
ZWVsRXZlbnQpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2li
bGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFy
cyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAor
eworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250
cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAg
ICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8gdmlz
aWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0
aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNl
LndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNw
YWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRl
cmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOwor
CisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0
aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFj
aGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xs
T2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55
KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0
LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAg
IHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWln
aHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAw
KQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2Ug
aWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxl
U2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgo
c2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgo
KSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7
CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxD
b3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
c2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Ny
b2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyZXIo
KS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9
CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVj
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZy
ZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigm
cmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNj
cm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zm
c2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7Cit9
CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZyYW1l
VmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwgcGFy
ZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsK
KyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKwor
ICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRU
b0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShz
Y3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAg
IEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAo
IWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXpl
LnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndp
ZHRoKCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAg
ICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0
KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNp
emVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9s
bGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZh
aWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYg
KGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
bG9jaz4ocmVuZGVyZXIpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAg
ICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVy
biByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2Uo
KS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2Vu
ZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Ug
a2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRl
ckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7Cisg
ICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAg
Ly8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRk
aW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisK
KyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9u
dGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAg
Ym9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xs
YmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJv
b2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKKyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6
b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhh
dmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5v
bk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOwor
ICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUg
c2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3Ju
ZXJTaXplID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8g
dmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAg
ICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBS
ZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJh
cikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdS
ZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
KSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAg
ICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNp
emUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5j
b250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVz
dWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZC
YXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAg
ICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAt
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRD
b3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0
KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAg
fQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAg
ICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAg
YXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5t
aW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxl
ZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCks
IH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNp
emUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7
CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAg
cmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxi
YXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0
KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9j
YXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAg
IHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092
ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIg
PT0gbV92QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRz
RGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQg
aW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAg
IGlmICghYm94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFy
LmdldCgpKQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
ci5sb2NhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFp
bnRSZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50
UmVjdCk7CisgICAgYm94LT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5l
cikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAg
aWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3Qp
OworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5
U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAor
eworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFy
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBl
bGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBz
aGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAg
ICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xs
YmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChy
ZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVy
ID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNj
cm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9J
ZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAg
IHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBv
cmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgp
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxh
cik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsK
KyAgICAgICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisg
ICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xh
eWVyLnBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0
LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisg
ICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7
CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBu
dWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJh
ciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6
b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNp
dHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCku
cnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxh
c3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxh
YmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5k
aWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3Jv
bGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsK
KyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBj
YW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8g
dXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQor
ICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAg
IG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAg
aWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNj
cm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQor
ICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Ny
b2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIu
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0
eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5v
bmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUg
YmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVl
ZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hC
YXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sK
KyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCk7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1
cm4gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQorewor
ICAgIGZvciAoYXV0byogbmV4dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIg
PSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5j
eSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dz
T3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJh
cigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8
fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5
U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8
fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5k
ZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRT
aXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFt
X2xheWVyLmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIu
cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVy
dGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0
RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9o
QmFyKSB7CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9t
Um9vdCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1f
cmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7
Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3Ao
KSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QueSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
KyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9k
ZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlv
dXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94
KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZh
bHNlOworCisgICAgbV9zY3JvbGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0g
b3ZlcmZsb3dMZWZ0KCkpOworICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxv
d0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7Cisg
ICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAg
ICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7Cisg
ICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAt
IGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xs
YWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
Cit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwg
aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94
KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3Zl
cmZsb3dZKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpv
bnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJl
bmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5k
VG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMg
Ym9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Ny
b2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMg
PT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVy
Zmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3Rz
TGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1
ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51
c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6
OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29s
IHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBh
eGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUu
b3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xs
QWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJm
bG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7Cisg
ICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1z
ZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhh
c0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAg
IGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsK
KworICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3Qg
bmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVu
ZGVyZXIuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0
RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVS
ZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisg
ICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8v
IFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4g
aWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9u
dGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRv
QmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxP
dmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRh
bFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAg
ICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQor
ICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOworCisgICAgICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKwor
ICAgICAgICByZW5kZXJlci5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxl
KCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZs
b3dSZWxheW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2Vk
KGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hh
bmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5k
ZXJlci5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVC
b3goKSAmJiByZW5kZXJlci5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxl
eGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5y
ZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ug
c3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdp
ZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0
ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAg
ICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAg
ICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRU
b0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xs
YmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisg
ICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlz
IGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBp
ZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkg
PSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVw
ZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQor
ICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2Fz
ZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsK
KyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8g
TGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4g
SW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNl
dHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUg
ZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlz
IGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24g
cG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8v
IG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlm
IChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Ny
b2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwor
I2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAg
ICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwor
CisgICAgaWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXRO
ZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVk
c0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5
b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRl
cnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMu
cmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBu
byBvdmVyZmxvdy4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBs
YXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5
dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0
IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisg
ICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25k
IHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBh
aW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5
IHNvIHRoYXQgdGhlCisgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVy
IHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBu
b3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWlu
dCBpbnRvIGxheWVycy4KKyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRh
bWFnZVJlY3Q7CisgICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwor
ICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdS
b290ID0gbV9sYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICgh
cGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygp
LmxheWVyKCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5n
Um9vdC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0
Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBj
dXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNo
ZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdp
ZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBk
dXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRo
b3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1
bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisg
ICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0
KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0
aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFt
YWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
KQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYg
KGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZp
bGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRo
YXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUg
Ym94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQs
IGRhbWFnZVJlY3QpOworCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQg
c2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRl
eHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBh
YnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMo
ZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRh
dGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQs
IGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ug
d2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXpl
Q29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChy
ZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1Jl
ZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVz
OworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7
CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9S
ZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5s
ZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdl
TG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNp
emUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgp
LCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNv
cm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNp
emUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZp
Y2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29y
bmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHls
ZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNp
emVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBh
aW50T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRy
b2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBh
aW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0
LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNp
emVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4K
KyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMg
b2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJh
ciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAg
ICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAg
bGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFf
bHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qo
c25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIg
JiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50
UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5v
bmUpIHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhl
IHJlc3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFp
bnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFy
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkp
IHsKKyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQ
b2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFn
ZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RL
bm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFu
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVh
cmFuY2UoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTog
RXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVt
ZW50PihtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxl
bWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBi
b3ggPSBtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBi
b3gtPnBhZGRpbmdCb3hSZWN0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsK
KyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+
IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBp
ZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVy
LCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXpl
KCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBw
YWludGluZ0luZm8sIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5
U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZh
bHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVy
SW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFn
bWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBb
Jl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJS
ZWN0KSB7CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkpIHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3Jk
ZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigp
OworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNv
cm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3Qu
aGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50
U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVy
KCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVj
dCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmln
aHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisK
KyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50
cy5hdChpKTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0
SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJl
c2l6ZXIpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyho
aXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0
TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQg
PSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJC
b3VuZHMubG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXll
ciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5s
YXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3Zl
cmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJl
bmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJv
eC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0
eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGlu
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRp
YyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxT
Y3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgp
LCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0
eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3Jv
bGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAm
JiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNj
cm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNh
bFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBz
Y3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8v
IFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRo
ZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Ny
b2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXIt
PnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3Jv
bGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpT
Y3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+
c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisg
ICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOwor
CisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0
aW5nKCk7CisgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcu
ZnJhbWUoKS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93
bmVyLT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5n
KCk7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRv
SGl0VGVzdDsKKyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJs
ZUFyZWEodGhpcykpOworCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9
IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9y
ZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFt
ZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUg
JiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVk
IG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2Nl
bGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAg
ICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3Zl
ZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNj
cm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxv
d0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRv
SWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0
cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAg
ICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4o
cmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1F
OiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1f
c2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3Ju
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxw
dHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRl
cmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9
IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxl
KCkpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6
ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7Cisg
ICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJl
bmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6
IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9y
ZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFs
aXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZN
b3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAg
IG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFy
UmVsYXRlZFN0eWxlKCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxl
Q2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2Vk
KCk7CisgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGlu
ZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBp
ZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hF
dmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVy
LmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8
ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxl
cigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUg
bGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYg
bV9sYXllci5iYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8v
IFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIu
bW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nl
ci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBh
ZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFk
anVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50
PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEp
KSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0
ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nh
c3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWRE
ZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29u
c3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxE
ZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2lu
dChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3du
TW91c2VQb3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigp
Lmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYg
dGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4g
dGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVu
dAorICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxh
c3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnko
KSA8IDApCisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9z
aXRpb247CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9z
aXRpb24gLSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Ny
b2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBz
cGFjZSBmb3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFi
cyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAg
ICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0
ZWRTY3JvbGxEZWx0YShkZWx0YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciBi
ZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYg
bG9jYWxFeHBvc2VSZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyLmFsbG93c0N1cnJlbnRTY3Jv
bGwoKSk7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
QVNTRVJUKGJveCk7CisKKyAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNd
KEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQorICAgIHsKKyAgICAg
ICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpCisgICAgICAgICAgICAmJiBl
bGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhiZWhhdmlvciwgZWxlbWVudCk7CisgICAgICAg
IHJldHVybiB1c2VBbmltYXRlZFNjcm9sbGluZyA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmlt
YXRlZFNjcm9sbDo6Tm87CisgICAgfTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91
bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Ny
b2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1
cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBT
Y3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1
dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgYmVo
YXZpb3IpOworICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZz
ZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKKwor
ICAgICAgICBhdXRvIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0Owor
ICAgICAgICBsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJl
bmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJhbnNm
b3JtcykuYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5
KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sK
KyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNs
YW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLnBhcmVudCgpKQorICAgICAgICByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCku
aXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3Ry
aWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0
ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Ny
b2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3Jv
bGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhl
IHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQor
ICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAt
IHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1pl
cm8oKSAmJiByZW5kZXJlci5wYXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9s
bGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Ny
b2xsZWRBcmVhKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBv
biBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBk
b2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhh
dCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlmIChz
Y3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0
aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3du
ZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQo
Jm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExP
RyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21l
dHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAg
UmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZt
X2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2Vv
bWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxscHRy
KTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3Rv
cnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1Nl
ZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVy
Zmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBj
b25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dN
b2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sK
KyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsg
bWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rl
c2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9u
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMGZjNjdkYTRkODU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAt
MCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMg
ZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxs
YSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96
aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQv
Z3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9m
IHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBh
Ym92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNl
bnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2Ug
eW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlv
dXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxh
Y2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVk
IGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRv
IG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBM
IG9yIHRoZSBHUEwuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVuZGVyTWFycXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShS
ZW5kZXJMYXllciYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsK
KworICAgIFJlbmRlckxheWVyJiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJl
bmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0K
KyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0
cm95TWFycXVlZSgpOworCisgICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkg
Y29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3Jv
bGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2Rz
IGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xs
VG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3Qg
U2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9s
bFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Cisg
ICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBp
bmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNj
cm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRp
b24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
LCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBh
cmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgp
IHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAg
ICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZz
ZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBj
b25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsK
KyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9v
bCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8
IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQor
ICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIo
U2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9u
UmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Ny
b2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Ny
b2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxh
YmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9v
bCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wg
aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwg
Ym9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Ny
b2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2
b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBB
bGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhv
ZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFi
bGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xs
UG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAg
ICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVs
RXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CisgICAg
Ym9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBoYXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1c2VE
YXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wg
aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Ny
b2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgor
CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
ZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29u
c3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIGJv
b2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFs
OworCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3Qg
SW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Ny
b2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAg
SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgp
IGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJl
aGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Qg
ZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7CisgICAg
SW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBu
dWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisg
ICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKyAg
ICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxv
Z01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisK
KyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50U2l6
ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkg
Y29uc3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3Qg
U2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xh
bXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGhhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7
IH0KKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAg
ICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9p
ZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2
b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxh
dGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVz
aXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0Owor
ICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92
ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0
OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJv
bHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVj
dChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdN
YXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29s
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4K
KyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRh
dGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJh
ck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBT
Y3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRS
ZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0UmVj
dCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1cGRh
dGVSZXNpemVyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcgb24g
eDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7
CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0
cmVlLgorICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7
CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsK
KyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
OiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAg
IGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91
ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Njcm9s
bEhlaWdodDsKKworICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0aW9u
IG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBw
YWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNj
cm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Ny
b2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1f
cmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7
IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQz
NmUuLjUyMjAyNTliZWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg4
Miw3ICs4ODMsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAg
IGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpp
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9z
aW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2lu
Z0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJlbmRl
ckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2Li45
YTQ4MWE5N2FmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHAKQEAgLTYwLDcgKzYwLDggQEAgUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJM
YXllciogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywg
JlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCkpOworICAgIGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJN
YXJxdWVlKCkgPSBkZWZhdWx0OwpAQCAtMTczLDkgKzE3NCw5IEBAIHZvaWQgUmVuZGVyTWFycXVl
ZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAgICAg
ICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAs
IG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNs
YW1wZWQpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9P
ZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fc3Vz
cGVuZGVkID0gZmFsc2U7CiAgICAgICAgIG1fc3RvcHBlZCA9IGZhbHNlOwpAQCAtMjQ0LDEyICsy
NDUsMTUgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICBpZiAobV9sYXll
ci0+cmVuZGVyZXIoKS52aWV3KCkubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7
CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAg
ICAgICBtX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAg
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTI3Miw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6
OnRpbWVyRmlyZWQoKQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAg
ICBpbnQgY2xpZW50U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJC
b3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRW
YWx1ZUZvckxlbmd0aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVu
dCgpLCBjbGllbnRTaXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRh
bCgpID8gbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0
KCkueSgpKTsKKyAgICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
T2Zmc2V0KCkueSgpKTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVt
ZW50ID8gaW5jcmVtZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAg
ICAgICAgICAgIG5ld1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkg
KzI5Myw5IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAog
ICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0
KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bv
cyk7CiAgICAgZWxzZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9wdGlv
bmFsPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKFRl
eHRTdHJlYW0mIHN0cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJlYW0g
PDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8o
UillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSlt
b3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHls
ZSwgKCspRGlydHkgbGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShO
KWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRils
b2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwp
YXllciwgaGFzTGF5ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0
eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBAIC0x
MTE1LDEwICsxMTE1LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3Qo
VGV4dFN0cmVhbSYgc3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFzTGF5
ZXIoKSkgewogICAgICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFt
IDw8ICItIjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0
aGlzKS5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJT
IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVsc2UK
KyAgICAgICAgc3RyZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAgICAg
ICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
aW5kZXggYjkxNTkyMmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3Qg
OiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJP
YmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255
bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQg
dGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1v
dXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2NWMu
LjI1N2FmYmUxOTA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gq
IHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0g
ICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxh
eWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikp
CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5k
ZXJlci0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAg
ICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQ
b2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewot
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+
bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNh
bChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQor
ICAgIGF1dG8qIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigp
OworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJs
ZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rp
b24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAy
MGZlODIuLmY1ODhlODY5ZTA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC02MDAsMTQgKzYwMSwxNiBAQCBzdGF0aWMgdm9p
ZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IExheW91dFJlYwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAg
ICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0g
ICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxX
aWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJC
b3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0g
bGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAi
IDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Ny
b2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAg
ICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eSgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5
ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
V2lkdGgoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJv
eCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAgICAg
ICAgfQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJh
clRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgICAgIGlmICghc2Nyb2xsYmFy
VGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IGIxMDMzZGEwNzkz
MC4uNjkxZTc1NTg3ZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtMzMyLDggKzMzMywxMCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxlY3Rp
b25SZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgfQogCi0gICAgaWYg
KGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpCi0gICAgICAgIGxheWVyKCktPnBh
aW50UmVzaXplcihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigp
LT5jYW5SZXNpemUoKSkgeworICAgICAgICBBU1NFUlQobGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KSk7CisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50UmVzaXplcihwYWlu
dEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBh
aW50SW5mby5yZWN0KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRPdmVybGFw
VGVzdFJlc3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCBhZDYzN2ZmNDRmOTYuLmZlNWNlNDA1OTYxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTU4LDYgKzE1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1l
bnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE4MzMsNyArMTgzNCw4IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVu
dChFbGVtZW50JiBlbGVtZW50LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRB
bmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVy
KCk7CisgICAgICAgIEFTU0VSVChib3gubGF5ZXIoKSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVh
ID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgfQogICAgIAogICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEpCkBAIC0yODU0LDggKzI4NTYsMTAgQEAgRXhjZXB0aW9uT3I8U2Nyb2xs
YWJsZUFyZWEqPiBJbnRlcm5hbHM6OnNjcm9sbGFibGVBcmVhRm9yTm9kZShOb2RlKiBub2RlKSBj
b25zdAogCiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpKQogICAgICAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gu
bGF5ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQm94Lmxh
eWVyKCkpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gubGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCmluZGV4IDVjNDk5M2JhZTAyOC4uYmI5NjJkZjA4OTcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMTEtMjYgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xs
aW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxheWVyOiAKKyAgICAgICAgVGhlIGdv
YWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91
dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAg
ICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAg
ICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNo
LCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToK
KyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2V0U2Nyb2xsWE9mZnNldDpzY3JvbGxZT2Zmc2V0
OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06Cisg
ICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTpdKToKKyAgICAgICAg
KC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOndpdGhJbnNldDpdKToKKwogMjAy
MC0xMS0yMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgYW4gRXhwZXJpbWVudGFsIEZlYXR1cmVzIGZvciB3aGVlbCBldmVudCBnZXN0dXJlcyBi
ZWNvbWluZyBub24tYmxvY2tpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0K
aW5kZXggODU4NGMyMzFmZWY4Li41Y2M1ZjA1NjNiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MLm1tCkBAIC01Myw2ICs1Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FLV2luZG93Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CiAjZW5kaWYKQEAgLTExMSwx
MSArMTEyLDE0IEBAIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9mZnNl
dDooaW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6KEJPT0wpYWRqCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIp
LmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAg
aWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotICAgIGxheWVyLT5zY3JvbGxUb09mZnNldChXZWJDb3Jl
OjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
V2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBX
ZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIH0K
IAogLSAodm9pZClhYnNvbHV0ZVBvc2l0aW9uOihpbnQgKil4IDooaW50ICopeSA6KGludCAqKXcg
OihpbnQgKiloCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpp
bmRleCAzZmVhMTYwODM5MmYuLjEyZDE1OWVjOGZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NSw2ICs5NSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6KERPTVJhbmdlICopcmFuZ2UKICNlbHNlCiAgICAgICAgIGF1dG8qIGxheWVyID0gc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIp
IHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJl
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5v
ZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50
UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxN
b2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3Jl
OjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldENh
cmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgIH0KQEAgLTc1OCw5ICs3NjAs
MTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2Ug
d2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUt
PnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAg
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+
c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCks
IGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2Vi
Q29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAKICAgICAgICAg
ICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJh
bWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2MjM2YTExYmYyOTYuLjQxNjEy
ZjI3NGVkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisy
MDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgor
CisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBSZW5k
ZXJMYXllcjogCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVy
ZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUg
aXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5
cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJm
bG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisg
ICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToKKwogMjAy
MC0xMS0xOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAg
ICAgICBbVGV4dHVyZU1hcHBlcl0gUmVtb3ZlIG1fdGV4dHVyZU1hcHBlciBmcm9tIFRleHR1cmVN
YXBwZXJMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNzdjMjYyZTA5
NGYuLjJmZGNmOWY5Y2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0
Nyw2ICsxNDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
VHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjA0OCw4
ICsyMDQ5LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtKQogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVu
dCB3aXRob3V0IGhpdHRpbmcgYW55IG5vZGVzCiAgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXco
KS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVkQXJl
YSA9IGNvcmVGcmFtZS0+dmlldygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3Jv
bGxlZEFyZWEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRh
LCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5p
bmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmlu
Z0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRy
KCkoZ2VzdHVyZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431873"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414893</attachid>
            <date>2020-11-26 03:59:44 -0800</date>
            <delta_ts>2020-11-26 04:55:37 -0800</delta_ts>
            <desc>Patch, v9 (squashed for testing)</desc>
            <filename>patch-v9.diff</filename>
            <type>text/plain</type>
            <size>320984</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li5kZTI1YmExZmFmODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODIgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRp
Y2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZs
YWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9y
ZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdElu
dGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
dmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1NpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclVzaW5n
Q29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29y
ZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldp
dGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xs
YmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0UG9z
dExheW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zm
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvT2Zmc2V0V2l0aEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVNYXJxdWVlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNv
bnRlbnRSZWN0SW50ZXJuYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZp
c2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVu
ZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpk
aWRVcGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJv
eVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZs
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Nj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRl
cnNlY3RSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3JvbGxDb3JuZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmll
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
c0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblBy
b2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFi
bGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFy
UmVsYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFk
anVzdGVkU2Nyb2xsRGVsdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9ja1Nj
cm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbiBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDogQWRk
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXJxdWVlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6CisgICAgICAgICogdGVz
dGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzY3JvbGxC
eVNpbXVsYXRpbmdXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisKIDIw
MjAtMTEtMjIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0ludGVncmF0aW9uXSBDb252ZXJ0IHNvbWUgcmVtYWluaW5nIElubGluZUJveCBhY2Nlc3Mg
dG8gdXNlIGlubGluZSBpdGVyYXRvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMzc4OWFhMzgzOTQw
Li43NTExNDE4NGUxYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ2Miw2ICsxNDYyLDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAog
ICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0
LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA3MjYyODkxZWNjNjMuLjk4M2M1ZjNkYzZjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTIyMTcsNiArMjIxNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1Jl
bmRlckxheWVyRmlsdGVycy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cAorcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVu
ZGVyTGF5b3V0U3RhdGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkxZDc0Yzc0NTIyNS4uYTA5NGUxNmJlMGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC02MDE1LDYgKzYwMTUsOCBAQAogCQkwRjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyog
U2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NT
RmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgwMEM0
MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
RmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQw
MEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5k
ZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjhCMjEzQjc2ODQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0
ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAw
M0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NTg2LDYgKzI5NTg4LDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8q
IFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4
QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1M0ZCODMyMTNCNzg2
NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovLAorCQkJCTBGNTNG
Qjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8sCiAJ
CQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywK
IAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywK
IAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJveExpc3QuY3BwICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggN2YyYmRhOGJlMTNjLi5hNjM4ZTFkZjhmNmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklu
bGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTAzLDcgKzM5MDQsNyBAQCBTY3JvbGxhYmxlQXJlYSog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUo
KSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAg
ICByZXR1cm4gYm94LmxheWVyKCkgPyBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51
bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkxNiw3ICszOTE3LDkgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNv
bnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9m
ZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94Lmxh
eWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBBU1NFUlQoYm94LmxheWVyKCkpOwor
ICAgIGlmICAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOwog
fQogCiAjaWYgRU5BQkxFKE1BVEhNTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBkNjFjN2Y2
OTU0MTIuLmVkMTk1YmIwM2M0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtOTIsNiArOTIs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCkBA
IC0xMzM0LDggKzEzMzUsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9sbExlZnQoaW50IG5ld0xl
ZnQpCiAgICAgICAgIGludCBjbGFtcGVkTGVmdCA9IGNsYW1wVG9JbnRlZ2VyKG5ld0xlZnQgKiBy
ZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhp
cykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICBy
ZW5kZXJlci0+c2V0U2Nyb2xsTGVmdChjbGFtcGVkTGVmdCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVy
ZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAg
ICB9CiB9CiAKQEAgLTEzNTgsOCArMTM1OSw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsVG9w
KGludCBuZXdUb3ApCiAgICAgICAgIGludCBjbGFtcGVkVG9wID0gY2xhbXBUb0ludGVnZXIobmV3
VG9wICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1
dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAg
ICAgICAgcmVuZGVyZXItPnNldFNjcm9sbFRvcChjbGFtcGVkVG9wLCBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwor
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPmxheWVyKCkgPyBy
ZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUp
OwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApp
bmRleCA5YjY3ZDI5N2UxOTEuLjg0ZGU5OGM4YmFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpA
QCAtMjM5MSw5ICsyMzkyLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNlbGVjdGlv
bihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAgICAgICAg
ICAgIGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAgICAgbGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdubWVudCwg
YWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAg
ICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxz
ZSk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVhcmFuY2Uo
KTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAgICAgICAgICAg
ICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlmeVJldmVh
bGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFkZjdkMTY0ZTJl
Li4yNjkxNmU2NWY3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1
ZWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5o
IgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAKQEAgLTE3NSw3ICsxNzYsOSBA
QCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBjb25z
dAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0KCkt
PmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVu
ZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAg
cmV0dXJuIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVs
ZElucHV0VHlwZS5jcHAKaW5kZXggMmRlNDNkYWQ1YTlmLi5hZWUxNmU5OTVjNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBA
IC0yNTMsOSArMjU0LDEzIEBAIHZvaWQgVGV4dEZpZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1
cigpCiAgICAgaWYgKCFpbm5lckxheWVyKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBp
bm5lckxheWVyU2Nyb2xsYWJsZSA9IGlubmVyTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFpbm5lckxheWVyU2Nyb2xsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYm9vbCBp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lPigqcmVuZGVyZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5l
ckxheWVyLT5zY3JvbGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3JvbGxUb09mZnNl
dChzY3JvbGxPZmZzZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9S
aWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsV2lkdGgoKSwg
MCk7CisgICAgaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNl
dCk7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1Z2dlc3Rpb25z
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNjVlYjIwOWQ0ZDM3Li41
YjFjYmMzY2EzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTgwLDYg
KzgwLDcgQEAKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM0MSw3
ICszNDIsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xv
c2luZ0JveChOb2RlKiBzdGFydE5vZGUsIGNvbnN0IFdoZQogCiAgICAgUmVuZGVyQm94KiBjdXJy
ZW50RW5jbG9zaW5nQm94ID0gJmluaXRpYWxFbmNsb3NpbmdCb3g7CiAgICAgd2hpbGUgKGN1cnJl
bnRFbmNsb3NpbmdCb3gpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1
cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJveExheWVy
ID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSA/IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICBhdXRvIHBs
YXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0Zm9ybUV2ZW50KCk7CiAgICAg
ICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7CiAgICAgICAgICAgICBpZiAocGxhdGZv
cm1FdmVudCkgewpAQCAtMTU2Miw3ICsxNTYzLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhh
bmRsZXI6OnNlbGVjdEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gK
ICAgICAgICAgICAgIGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxP
YmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVzaXplciA9
IGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9j
YWxQb2ludCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNv
cigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnJlbmRlcmVyKCkuc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vy
c29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCkBAIC0xOTEyLDkgKzE5MTMsOSBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICBpZiAoIWxheWVyKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKLSAgICAgICAgICAg
IGlmICghc2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7CisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVT
ZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAg
ICAgICAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggMzA1OGQ5MWRlNjVhLi4xNTYyYzZmMmExMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAKQEAgLTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9z
aXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU5NSw3ICsyNTk2LDEwIEBAIHZvaWQgRnJh
bWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCkKICAgICBpZiAoIWxh
eW91dENvbnRleHQoKS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1ZpZXdwb3J0Q29uc3RyYWluZWRP
YmplY3RzKCkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5y
ZW5kZXJWaWV3KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotICAg
ICAgICAgICAgcmVuZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7CisKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5sYXllcigp
KTsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpKTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkt
PnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMzIxMCw2ICszMjE0LDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUb0Fu
Y2hvcigpCiAKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiBhbmNo
b3Igbm9kZSByZWN0ICIgPDwgcmVjdCk7CiAKKyAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9IGFu
Y2hvck5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKGVuY2xvc2lu
Z0xheWVyICYmICFlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgZW5j
bG9zaW5nTGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8vIFNjcm9s
bCBuZXN0ZWQgbGF5ZXJzIGFuZCBmcmFtZXMgdG8gcmV2ZWFsIHRoZSBhbmNob3IuCiAgICAgLy8g
QWxpZ24gdG8gdGhlIHRvcCBhbmQgdG8gdGhlIGNsb3Nlc3Qgc2lkZSAodGhpcyBtYXRjaGVzIG90
aGVyIGJyb3dzZXJzKS4KICAgICBpZiAoYW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtMzg2Miw3ICszODcwLDExIEBAIFNjcm9sbGFi
bGVBcmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBp
ZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVM
YXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6
SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogSW50UmVj
dCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CkBAIC00
MzI2LDggKzQzMzgsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICAgICAgcmVuZGVy
ZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICByb290TGF5ZXItPnBhaW50KGNvbnRleHQs
IGRpcnR5UmVjdCwgTGF5b3V0U2l6ZSgpLCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyLCB7IH0s
IHNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPT0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6
QW55T3JpZ2luID8gUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9y
aWdpbiA6IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBY2Nlc3NpYmxl
T3JpZ2luT25seSwgZXZlbnRSZWdpb25Db250ZXh0KTsKLSAgICBpZiAocm9vdExheWVyLT5jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQotICAg
ICAgICByb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0
LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
Um9vdExheWVyID0gcm9vdExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGlmIChz
Y3JvbGxhYmxlUm9vdExheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAh
ZXZlbnRSZWdpb25Db250ZXh0KQorICAgICAgICAgICAgc2Nyb2xsYWJsZVJvb3RMYXllci0+cGFp
bnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwg
cmVuZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVudHMoY29udGV4dCwgZGlydHlS
ZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdh
dGlvbi5jcHAKaW5kZXggMzhmYjQ5NzFkMmEzLi44MDliYzE5MTM0NzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTUsOCBAQCBi
b29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24gZGly
ZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1cnNp
dmVseShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShJ
bnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMzJkMzJlNTliMjQyLi42ZTBmMTkwYmEzZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNSBAQCB2b2lk
IEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50UG9p
bnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5oYXNM
YXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAqZG93
bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRv
KiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVy
KCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRTY3Jv
bGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8g
U2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5ZXIu
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5zZXRD
dXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5cGUg
PSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2Vy
IDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRpZEVu
ZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAgc2Ny
b2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMg
Y2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlzc2lv
bigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggYWZk
NzZkMjU2ZWQwLi4wMDc5OTdlMmIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVu
dEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisjaW1w
b3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0Qm94
LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAg
LTc4NCw3ICs3ODUsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZv
ckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkKICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0dXJu
IGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNjcm9s
bGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCmluZGV4IDcz
OTMxOTY3NDg3NS4uNDIxYjMwNzVhZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCkBAIC05Miw3ICs5Miw3IEBA
IGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yT3ZlcmZs
b3dMYXllcihjb25zdCBSZW5kZXJMYXllCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBBU1NFUlQobV9wYWdlKTsKIAotICAgIHJldHVybiBsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCk7CisgICAgcmV0dXJuIGxheWVyLnNjcm9sbGFibGVBcmVhKCkgPyBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgOiBm
YWxzZTsKIH0KIAogU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxh
YmxlQ29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBjOGQ4MWVmMjQ4NjYuLjRkZjExN2E0
OTU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OSw2
ICs1OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRl
cmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAt
NTUzLDcgKzU1NCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKCkKIAogICAgIGZvciAoYXV0byogYmxvY2sgOiBi
bG9ja3NUb1VwZGF0ZSkgewogICAgICAgICBBU1NFUlQoYmxvY2stPmhhc092ZXJmbG93Q2xpcCgp
KTsKLSAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgp
OworICAgICAgICBibG9jay0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJsb2NrLT5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKICAgICAgICAgYmxvY2stPmNsZWFyTGF5b3V0T3ZlcmZsb3coKTsKICAgICB9
CiB9CkBAIC01ODQsOCArNTg3LDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnVwZGF0ZVNjcm9sbElu
Zm9BZnRlckxheW91dCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxh
eW91dCgpOworCisgICAgaWYgKCFsYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXll
cigpLT51cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXQoKQpAQCAtMTExMyw4ICsxMTIxLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAv
LyB6LWluZGV4LiBXZSBwYWludCBhZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRl
ciwgc28gdGhhdCB0aGUgc2Nyb2xsYmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNr
Z3JvdW5kL2JvcmRlci4KICAgICBpZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dy
b3VuZCB8fCBwaGFzZSA9PSBQYWludFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKQotICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHko
KSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJv
b3QoKnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAg
ICAgbGF5ZXIoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJv
dW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJ
bmZvLnJlY3QpKTsKKyAgICAgICAgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBzdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91
bGRQYWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3Vu
ZE9ubHkoKSkKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBh
aW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBS
ZW5kZXJCbG9jazo6cGFpbnRDb250ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtMjAwNyw3ICsyMDE1LDEyIEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IExheW91dFBvCiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJl
c3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUo
YWNjdW11bGF0ZWRPZmZzZXQpKSk7CisgICAgQVNTRVJUKGxheWVyKCkpOworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3JvbGxh
YmxlTGF5ZXItPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50
KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7
CiB9CiAKIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNTAz
LDEwICsyNTE2LDIzIEBAIGludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFz
ZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUg
Y29udGVudCBpbnNpZGUgdGhlbSBtb3ZlcykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwg
d2hpY2gganVzdCBib3R0b20tYWxpZ25zIHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1
cCBvbiBmaW5kaW5nIGEgYmFzZWxpbmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwg
b3IgaWYgd2UgYXJlIHNjcm9sbGVkCiAgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92
ZXJmbG93OmhpZGRlbiBibG9jayB0aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAg
ICAgYm9vbCBpZ25vcmVCYXNlbGluZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkg
fHwgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAg
OiAobGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNl
dCgpLngoKSAhPSAwKSkpKSB8fCAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkp
OwotICAgICAgICAKLSAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJh
c2VsaW5lID8gT3B0aW9uYWw8aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24p
OworICAgICAgICBhdXRvIGlnbm9yZUJhc2VsaW5lID0gW3RoaXMsIGRpcmVjdGlvbl0oKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIGlmIChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGlmIChkaXJl
Y3Rpb24gPT0gSG9yaXpvbnRhbExpbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFi
bGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpLnkoKTsKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250
YWxTY3JvbGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKTsKKyAg
ICAgICAgfTsKKworICAgICAgICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFz
ZWxpbmUoKSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7CiAg
ICAgICAgICAgICAvLyBIaXN0b3JpY2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFz
ZWxpbmVzLiBCdXQgd2UgY2FuJ3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKaW5kZXggYmIyMmYzNGZkM2YzLi5iZDcwZDYxZDQxNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zNDgsNyArMzQ4LDgg
QEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExh
eW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5hdXRvV3JhcCgp
ICYmIGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUg
d2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAgICAgIGlmIChs
YXllcigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVlKCktPmlzSG9y
aXpvbnRhbCgpKQorICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5t
YXJxdWVlKCktPmlzSG9yaXpvbnRhbCgpKQogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0g
MDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggMzA3
ZjliMmM3ZjJmLi45NTAyNjkxYWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMzE4LDExICszMTksMTMgQEAgdm9pZCBSZW5k
ZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKIAogICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3
ZSBoYXZlIGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2
YWx1ZSBpbnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KLSAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBT
Y3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7
Ci0gICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20o
KSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNjcm9sbFBvc2l0aW9uLnNj
YWxlKHpvb21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYm
IG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0
aXZlWm9vbSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigp
ID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgICAgIFNj
cm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3Np
dGlvbigpOworICAgICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZm
ZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNj
cm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5n
ZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBS
ZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExl
ZnQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6
c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxw
dHI7CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAs
MzEgKzU5NSwzOCBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxh
eWVyJiBsYXllcikKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBsYXllci5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdl
LndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisg
ICAgYXV0byYgc2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9y
KCk7CisgICAgc2Nyb2xsQW5pbWF0b3Iuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hl
ZWxFdmVudFRlc3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVm
dChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFt
cGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0Ns
aXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdo
ZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlv
bihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9w
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRl
ZFNjcm9sbCBhbmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXll
cigpKQogICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIo
KS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0
b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0K
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAo
KSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVs
RXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywg
YW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50
UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0
CkBAIC04MTQsMjQgKzgyNiwzMiBAQCBib29sIFJlbmRlckJveDo6Zml4ZWRFbGVtZW50TGF5c091
dFJlbGF0aXZlVG9GcmFtZShjb25zdCBGcmFtZVZpZXcmIGZyYW1lVmlldykgYwogCiBib29sIFJl
bmRlckJveDo6aW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgIWxheWVyKCktPmhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIGhhc092ZXJmbG93Q2xp
cCgpICYmIHNjcm9sbGFibGVMYXllciAmJiAhc2Nyb2xsYWJsZUxheWVyLT5oYXNPdmVybGF5U2Ny
b2xsYmFycygpCiAgICAgICAgICYmIChzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpT
Y3JvbGwgfHwgc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0byk7CiB9CiAKIGJv
b2wgUmVuZGVyQm94OjppbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewot
ICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNP
dmVybGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVy
Zmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3Zl
cmxheVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVy
Zmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwog
fQogCiBpbnQgUmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpbmNsdWRlVmVydGlj
YWxTY3JvbGxiYXJTaXplKCkgPyBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSBjb25zdAogewotICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/
IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBzY3JvbGxhYmxlTGF5ZXIt
Pmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6Omlu
dHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CkBAIC04MzksMTMgKzg1OSwxNiBA
QCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAog
ICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyOwogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgp
Lm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxi
YXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Ny
b2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzVmVydGlj
YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
CiAgICAgfQogCiAgICAgaWYgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIChzdHlsZSgp
Lm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIWNhblVzZU92ZXJsYXlTY3JvbGxi
YXJzKCkpKSB7Ci0gICAgICAgIEFTU0VSVChsYXllcigpICYmIGxheWVyKCktPmhhc0hvcml6b250
YWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsYWJsZUxheWVyLCBz
Y3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCgpOwogICAgIH0KIApAQCAtODU0LDggKzg3Nyw4IEBAIGludCBSZW5kZXJCb3g6OmludHJp
bnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyQm94OjpzY3Jv
bGxMYXllcihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAg
IFJlbmRlckxheWVyKiBib3hMYXllciA9IGxheWVyKCk7Ci0gICAgaWYgKGJveExheWVyICYmIGJv
eExheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpIHsKKyAg
ICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllcigpID8gbGF5ZXIoKS0+ZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxl
ICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKSB7CiAgICAgICAgIGlmIChzdG9wRWxlbWVudCkKICAgICAgICAgICAgICpzdG9w
RWxlbWVudCA9IGVsZW1lbnQoKTsKIApAQCAtODkyLDcgKzkxNSw4IEBAIGJvb2wgUmVuZGVyQm94
Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0CiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQog
ICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xs
SW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRp
cGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwo
ZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIGF1
dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwgPyBsLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyOworICAgICAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVy
U2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEsNiArOTQ1LDIwIEBAIGJv
b2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAg
ICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wg
UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHNj
cm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2Fs
T3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoc3R5bGUoKS5yZXNp
emUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9z
aXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2FuIGJlIHBy
b2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4gdGhhdCBj
YXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25z
dAogewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGlj
YWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5
ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBo
YXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQpAQCAtOTk3LDggKzEwMzUsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9z
Y3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5T
Y3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAg
ICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7
CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBA
IC0xMDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3Np
dGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAogICAgIEFTU0VSVChoYXNM
YXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07CisKKyAgICByZXR1cm4g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRl
ckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTc1LDkgKzE2MTcs
MTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJl
ZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWlu
dGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxpbmdNYXlSZXZlYWxC
YWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVy
biBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tn
cm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE4OTQsMTAgKzE5MzcsMTAg
QEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9p
bnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0
LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVy
VG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJh
cnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVjdC5jb250cmFjdChsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxheWVyKCktPmhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAgICBjbGlwUmVjdC5tb3Zl
KHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsK
KyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4gY2xpcFJlY3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2QwNzJkLi5kZjBlYTFjMDcx
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTU2LDYgKzU2LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1VzZWRaSW5kZXgoKSB8fCBo
YXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQogCisgICAgYm9vbCByZXF1
aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgYm9vbCBiYWNrZ3JvdW5k
SXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25z
dCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0aGUgYm9keSByZW5kZXJl
ciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSByb290LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYjk4
MjdjOGExNGQyLi5iYTVkY2ZhNDAzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTQ4OSw4ICs0
OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9u
Q29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250
YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RS
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9h
dFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJv
cmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAg
ICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3Np
bmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdD
bGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxh
dGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250
YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Ip
OwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
U3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChl
bmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3Jk
ZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAg
ICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0Jv
eC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNv
bnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9s
bGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwor
ICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgewor
ICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0g
ZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAg
ICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxl
RW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICB9
CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNm
b3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0
aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0Nywx
MSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5n
UmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3Ry
YWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZs
b2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxv
YXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xh
eWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVF
bmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQ
b2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgp
OwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNs
b3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9s
bGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9z
aW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYgc2Nyb2xsYWJsZUVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBzY3JvbGxhYmxl
RW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5nUmVjdC5zZXRMb2NhdGlv
bihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJPZmZzZXQsIHNjcm9sbE9m
ZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1JlY3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA1MjQzZWExYzFiMDQuLjFmYjkwZTFj
YTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRp
b25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9y
YXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5G
bG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzA0LDQwICszMDYsMjYgQEAg
UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVy
TGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAg
ICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBtX2luUmVzaXplTW9kZShm
YWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1Nl
bGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFs
c2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5P
dmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFs
UmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwg
bV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0
dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAg
LCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVy
c2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAg
ICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9o
YXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzQ29tcG9zaXRpbmdE
ZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2Vu
ZGFudHMoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxz
ZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKICAgICAs
IG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1faGFzM0RUcmFuc2Zvcm1l
ZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQog
ICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJ
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgot
ICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAg
ICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwg
bV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVy
TGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNjEsMTYgKzM0OSw2IEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZh
bHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZp
c2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVt
ZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2
ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2
YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRlckJveCgpKSB7Ci0gICAg
ICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0
aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAg
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9s
bFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJM
YXllcigpCkBAIC0zNzgsMjkgKzM1NiwxMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkK
ICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAgQVNTRVJUKG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRh
aW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHVu
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxl
bWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotCi0g
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlz
KTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24oKTsK
IAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KKyAgICBj
bGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVyRmlsdGVycygpOwogCiAg
ICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAtOTEzLDggKzg3MiwxMCBA
QCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gUmVuZGVy
TGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQogICAgICAgICBpZiAocGFyZW50LT5iZWhhdmVzQXNG
aXhlZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiAhcGFy
ZW50LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkpKQogICAgICAgICAgICAgZmxhZ3MuYWRkKFNl
ZW5GaXhlZExheWVyKTsKIAotICAgICAgICBpZiAocGFyZW50LT5oYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkKLSAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKTsK
KyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFNjcm9sbGFibGVMYXllciA9IHBhcmVudC0+c2Nyb2xs
YWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudFNjcm9sbGFibGVMYXllci0+aGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50U2Nyb2xsYWJsZUxheWVyLT5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgZmxhZ3Mu
YWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcgKzkxMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwg
Ym9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRy
eU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZs
YWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9u
SWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAt
PnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTU3LDcgKzkxOSw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5
TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlw
IHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNP
dmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9s
bGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBv
ZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zm
c2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0
ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Niw3ICs5MjgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAs
IE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9yIG1h
eSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNldEZyb21S
b290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7Cisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVk
SW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnRE
ZXBlbmRlbnRGbGFncygpOwpAQCAtMTAxMyw3ICs5NzUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlv
blNldAogICAgIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW5U
cmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdz
LmNvbnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1fYmVoYXZlc0FzRml4ZWQg
PSBmbGFncy5jb250YWlucyhTZWVuRml4ZWRMYXllcik7Ci0gICAgc2V0SGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5
ZXIpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5D
b21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgcmVmbGVjdGlv
bidzIHBvc2l0aW9uIGFuZCBzaXplLgogICAgIGlmIChtX3JlZmxlY3Rpb24pCkBAIC0xMDM2LDIw
ICs5OTksMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgZmxhZ3MuYWRkKFNl
ZW5GaXhlZExheWVyKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgZmxhZ3MuYWRkKFNl
ZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOwogCiAgICAgZm9yIChSZW5kZXJMYXllciogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQog
ICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsK
IAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91
ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAv
LyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3
b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0
aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJl
bmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAg
Ym9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2Vj
dHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg3LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0
UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXco
KS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlN
YXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIo
KS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNl
c3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRv
IG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAv
LyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBI
YXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQog
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJH
ZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJl
IG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTIwMiwx
MiArMTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0
LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBh
cyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlm
IChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
OwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQ
dXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5j
ZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjMxLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4q
IGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRl
cmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNs
b3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkp
IHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhl
IGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYg
KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAg
ICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFz
T3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50
U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRT
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25l
ZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsK
ICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihw
b3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5s
aW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDksMTQgKzE2NDQs
MTYgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBk
YXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQ
YXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5n
U2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAg
fSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChw
YXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxv
Y2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYSA9IHBhcmVudExh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9M
YXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOwor
ICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXItPmNv
bnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3Jv
bGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAg
IGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQogICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmICghbV9jb250ZW50
c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9s
bGluZ1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5LDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAgICBhdXRvKiBvd25lckVs
ZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAg
YXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
OwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAt
MTg1NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVu
ZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJldHVybiBvd25lclJlbmRl
cmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNy
b3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxh
eWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRv
KiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQogICAg
ICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0g
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gZW5j
bG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKQEAgLTE4Nzcs
NyArMTgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMp
OwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVC
b3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExh
eWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAgfQpAQCAtMTg4NSw1MCAr
MTgyMiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsK
LSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Nj
cm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5m
b3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsK
LX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2Vz
dG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBhcmVudCgpOwpAQCAtMjQ1
NCwxOSArMjM0Nyw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rv
cihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5
b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgp
LCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIo
KS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChy
ZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVT
VkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUo
T1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xs
c092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xs
aW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZs
b3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiAjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKIHsKQEAgLTI0OTYsMjg5
ICsyMzc2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
IAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4K
LWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5
ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRo
aXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdp
bm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gn
cy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQv
Y29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25zdCBpbnQgc3BlZWRSZWR1
Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3Bl
ZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAgICAgICAgYWRqdXN0ZWRE
ZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8
ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRh
IDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVk
RGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOwot
Ci0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBh
ZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiBJ
bnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xs
RGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xs
RnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsKLSAgICBJbnRQb2ludCBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigp
Lmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNr
IGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBX
aGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29o
ZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGlm
IChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlv
bi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFz
dEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9
IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0
aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdpZHRoKDApOwotICAgIGlm
IChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQot
ICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhl
IHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5k
ZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVy
ZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsg
ZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0gICAgICAg
IGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKLQot
ICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBu
ZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1h
aW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAg
ICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5w
YXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBm
cmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOwotCi0g
ICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Nj
cm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3
ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9n
cmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAgICAvLyBoYXZlIGFuIG92
ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQg
Y2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5z
Y3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAq
c2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgICAg
IC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQg
dG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVlKCkpKTsKLSAgICBt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAg
IFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICBz
ZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9s
bFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xs
IGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9z
aXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsK
LSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKLSAgICAgICAgc2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiks
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0
KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5n
KTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xs
T2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0
KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
Y29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0g
ICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlzIDw8ICIgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAgaWYgKGF1dG8qIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAg
ICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotI2VuZGlmCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3Jv
bGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLQotICAgIFNjcm9sbE9m
ZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0Owot
ICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3Jv
bGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBp
ZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
Y2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5n
KTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90
SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxU
eXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9u
KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3Vy
cmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsK
LQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Ci0g
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxP
ZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlv
dXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Ny
b2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVB
TShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRp
b24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAi
IDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0K
LSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghYm94
LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lv
bnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRk
ZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcg
dG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAg
ICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xp
ZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIGludCBzY3JvbGxY
T2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4g
bWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQg
Kz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJl
dFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2Fy
ZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0K
LSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOwotICAgICAgICAgICAg
bmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAg
ICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5l
d1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBGSVhNRTogTm90aGluZyBn
dWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24g
YXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4g
YSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBk
YXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRp
b24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZp
ZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMg
KGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBz
Y3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1
c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2Vz
dG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRl
clRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxh
eW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4K
LSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwot
Ci0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewotICAgICAgICAgICAg
Ly8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0
YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlv
bnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10
by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Un
cmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRp
bmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAg
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAg
ICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQotICAgICAgICAgICAgICAg
IC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0
ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAg
ICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNr
aW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gc3Rh
Y2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5
IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgotICAgICAgICByZW5kZXJl
cigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAg
ICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwot
ICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWlu
ZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxp
ZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0
TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVu
ZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91
dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZv
clJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VN
b3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFp
bnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50
Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQp
OwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29v
bkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNS
ZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAg
ICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVz
Y2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAg
ICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNj
cm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Yg
b3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAgICAgICByZW5kZXJlcigp
LnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7
Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZl
bnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0g
ICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCpl
bGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFt
ZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCku
dmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXll
ckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRB
bmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNl
LCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBl
eHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAgLTI4MjMsNyArMjQyMCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBh
YnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8q
IHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhp
c10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgewpAQCAt
MjgzMyw2ICsyNDMwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShj
b25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9OwogCiAgICAg
aWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8gRG9uJ3Qgc2Ny
b2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhl
IC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZl
bnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkg
UlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAtMjg0MywyNCAr
MjQ0MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExh
eW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBib3JkZXIgZWRn
ZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEuCiAg
ICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+Ym9yZGVyTGVm
dCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBk
aXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNjcm9s
bCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAgICAgICAgICAg
Ly8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHggb2Yg
bG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRvby4K
LSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVC
eShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCks
IDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBf
bHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAgIGV4
cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xsUGFkZGluZyhi
b3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlvdXRSZWN0IHJl
dmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCwg
aW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAKLSAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlv
bigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgp
IHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBhbmltYXRlZCA9IHNob3Vs
ZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25zLmJlaGF2aW9yKTsKLSAg
ICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFt
cGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRE
aWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAg
ICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAg
ICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3Vu
ZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxh
YmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVoYXZpb3IsIHJldmVhbFJl
Y3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0ID0gcmVzdWx0LnZhbHVl
KCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAgICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVt
ZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0byBwcm90
ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICAg
ICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNj
b3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52
aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgICAg
ICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwogCiAgICAg
ICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50
KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6
IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9IGVsZW1lbnQg
PyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUxLDIzICsyNTQzLDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBh
YnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5ZXItPnNjcm9sbFJlY3RU
b1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKLXsKLSAgICBpZiAo
Y29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7Ci0gICAgICAgIC8v
IE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBv
dXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBz
byB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAgIGlmIChSZW5k
ZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3Np
bmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGlu
Z0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9z
aXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMg
d2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAgICAgY29tcG9zaXRpbmdB
bmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xh
eWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9y
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogTGF5b3V0UmVjdCBSZW5k
ZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3Jv
bGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpIGNvbnN0
CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKTsKQEAgLTMxMTQsNyArMjY4OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAg
ZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7CiAgICAgCiAg
ICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0Lndp
ZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAg
aWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7CiAgICAg
ICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgp
KTsKICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3MTEsMTA5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJl
c2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xk
T2ZmCiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBD
U1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6
SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2UgaW1w
bGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAgICAgICBzdHlsZWRFbGVt
ZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJl
ci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAg
ICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlN
YXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1Vu
aXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdo
dCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5k
ZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlSGVp
Z2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhl
aWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9
Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8vIEZJWE1FIChSYWRhciA0
MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2Fy
eSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkK
LXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Ci19Ci0K
LVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKLXsK
LSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9s
ZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlV2hlZWxFdmVudEZv
clNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAg
aWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYgKHVzZXNBc3luY1Njcm9s
bGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVl
bEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50
ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1
c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBz
Y3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xs
YmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFj
ZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0
aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3Rk
OjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBz
dGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgp
KSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QK
LXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRp
bmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8g
RklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNj
cm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXpl
ID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0Lnko
KSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAg
IGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJl
YWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2gu
c2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZp
c2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAg
ICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNo
YWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zm
c2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0g
ICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBw
YWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJM
YXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3Jv
bGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgp
KTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJl
Y3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29u
c3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShz
Y3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRl
cmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IElu
dFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIo
JnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXll
cjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAg
SW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJh
ck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBv
aW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJl
bmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
Ojp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVy
biBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gt
PmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVp
Z2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50
c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQot
ICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRo
KCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWlu
KGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAg
cmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAg
IFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQot
ICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0No
YW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJl
bGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQo
KTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFn
ZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xp
ZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6
OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVu
IHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4K
LSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Ny
b2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQ
b3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5k
ZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0K
LQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRl
cmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAg
ICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChy
ZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRv
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDog
MDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndp
ZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3Jv
bGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25P
dmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIu
Z2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9u
T3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZl
Tm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3Jv
bGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6
ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAg
Ly8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJl
LgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsK
LSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9o
QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQot
ICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVy
U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0
LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1f
dkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAg
ICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgp
IC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9p
ZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAg
ICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0g
ICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAg
ICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9t
TGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQo
KSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsg
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVy
U2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXpl
KTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVy
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0g
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAg
ICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9s
bGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxi
YXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAg
IHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0K
LSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0lu
dFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAg
ICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsK
LSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSBy
ZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUg
aXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0g
ICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1v
dmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAg
ICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5k
ZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigp
LnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJl
cGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNp
emVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVy
biBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIo
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNo
YWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxi
YXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChy
ZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVy
ZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25j
YXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNl
dWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAg
ICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhp
cywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1l
bnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJl
Z3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlv
bik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAg
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53
aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5v
bk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Ny
b2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1f
dkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFz
Y3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxi
YXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92
ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIp
Ci17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFy
ID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xs
c092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBT
Y3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250
YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxi
YXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRl
IHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0g
ICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNp
dHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFu
ZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1
dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6
c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBl
bHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0K
LQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBz
Y3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXll
cjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJl
dHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcigp
Ci17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5j
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsK
LX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBI
VE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgp
KSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwot
ICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+
c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZs
b3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYg
KHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05v
ZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRv
KiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0
dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9s
bEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdz
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01v
Y2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewot
ICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNl
OjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7
Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXll
ciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNl
KSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYg
KHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3Mp
OwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBm
aWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRN
b2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0g
ICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29s
YXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAg
Ly8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0g
ICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNr
aW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0K
LQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6
dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxl
dmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZs
b3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYm
IChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hv
dWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250
cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxl
dmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFy
dGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9t
UmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1
dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1
dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVy
biBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAg
ICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBy
ZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAg
ICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAg
ICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0K
LSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxi
YXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5l
cikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3Ju
ZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJl
Y3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBj
b25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFw
cGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1
cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVp
Z2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMp
LT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1
c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0g
ICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJM
YXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3Zl
cmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7
Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZs
b3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAg
IExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAg
IGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJm
bG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQo
KSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5m
bGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0
Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7
Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxT
aXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkp
KTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20o
KSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAo
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3Jv
bGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQg
c2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5i
b3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVm
dE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAm
JiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJm
bG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJl
dHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxv
d1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29u
c3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVy
biBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewot
ICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9s
bEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQot
Ci1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxv
dyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBz
dHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHls
ZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0g
T3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0
YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3Zl
cmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFy
ID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAh
c3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhl
bWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93
ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBM
aXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBo
YXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
TGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92
ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0
aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYg
b3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJs
ZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihy
ZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXIt
PnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0
eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJh
cikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQot
ICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQg
YWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9I
b3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6
b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0g
Ym94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGlj
YWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9y
aXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkg
ewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlv
cigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFs
T3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRv
QmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAg
ICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCku
b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92
ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxi
YXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNj
cm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0
cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVy
ZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZh
bHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJP
YmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQg
JiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFp
blNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUg
cmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAg
ICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAg
ICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0g
ICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9z
Y3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGlu
dCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAg
ICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAg
ICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdl
U3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Ny
b2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQo
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChi
ZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVw
ZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQot
ICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2Fz
ZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsK
LSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8g
TGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4g
SW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNl
dHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUg
ZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlz
IGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24g
cG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8v
IG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2Vl
IDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0
QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlm
IChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Ny
b2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAg
ICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwot
Ci0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlv
blVwZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZl
cmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20g
dGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVy
ZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Cisg
ICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdo
dCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRl
ckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8g
em9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5o
ZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAotICAgIGlmIChjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0
aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICB1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3Vs
ZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9p
bnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJlbmRlckxheWVyOjpvdmVy
Zmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0
CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKLSAgICBpZiAocmVjdHMu
aG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICBhdXRv
JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIC8vIFNj
cm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0Jv
eFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBi
b29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5kZXJCb3guc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIg
PSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwogCi0gICAgaWYg
KHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5l
clJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRp
Y2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3Ju
ZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRv
bUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0
aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9Owor
ICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikgeworICAgICAgICBhdXRv
IHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRo
aWNrbmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxi
YXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9CiAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1Ms
IHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAh
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lk
dGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAg
aWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0i
X3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCi17Ci0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmls
dGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICBp
ZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGhh
c0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9w
IGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNv
bmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0g
ICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBh
aW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxz
ZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUg
b3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQg
d2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4s
Ci0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFu
dGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0g
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKGhh
c0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9z
KTsKIAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9z
aXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBh
aW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7CisgICAgaWYgKGlzb2xhdGVz
QmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJf
cyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsK
KyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdy
YXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAi
IDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkp
OwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRp
bmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChwYWludGluZ092ZXJsYXlD
b250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1f
Y2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJh
ciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRn
ZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3aWRnZXRzIGNhbiBtb3Zl
IHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBh
IGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRz
KS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRP
ZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJl
IGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0
LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0KLSAg
ICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
V2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxi
YXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9m
IHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9m
ZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwg
c2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNp
emVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zm
c2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsK
LSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5t
b3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJl
Y3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250
cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1f
c2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFp
bnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQK
LSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Ny
b2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHJlbmRlcmVy
KCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJl
Y3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAg
cmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxX
aWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKLSAg
ICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAg
IHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29y
bmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBjb3Ju
ZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKLSAg
ICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgfQor
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndp
ZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgp
IC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZs
b2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAg
ICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5l
ckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNv
cm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdl
KCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJm
bG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRl
ckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6
ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFp
bnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICBpZiAoY29udGV4
dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7
Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwg
cmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKLQotICAgIC8vIERyYXcg
YSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBh
bnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUg
cmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAgIGlmICghaGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICBjb250ZXh0LmNs
aXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJl
c2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxh
cmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkp
OwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAy
MTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7Ci0g
ICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAg
ICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKLSAg
ICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsK
KyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
KyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgpIC0gb3ZlcmZsb3dSZWN0
LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50
UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNzcsNDIgKzI4MjQsNiBAQCBib29sIFJlbmRl
ckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0
CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9j
YWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCi17Ci0g
ICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIu
Y29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQg
cGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJh
ci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMu
dmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJl
c3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpz
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Ci19Ci0KIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmln
aW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lv
bkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92ZXJsYXBUZXN0UmVxdWVz
dHM7CkBAIC00MjI4LDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAg
ICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWlu
dEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFt
YWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7
Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJ
bmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJl
Y3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpOwpAQCAtNDI2MSw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVj
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAg
ICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5n
IGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJl
IGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRo
YXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1
ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBs
YXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5z
KFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVy
LT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgYm9vbCB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8gbGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxzZTsKKyAgICAgICAgICAg
IGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVy
Zmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRl
clJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVy
KSkgewpAQCAtNDQ2Myw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3Vi
cGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBib29sJgogCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0
aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UK
ICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0gICAgYm9vbCBjb250ZW50
c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1l
bnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IHNjcm9sbGFibGVBcmVh
KCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIDogZmFsc2U7
CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZy
YW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xs
aW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcp
IHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMzNjgsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJh
cnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50aW5nT3Zlcmxh
eVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAg
ICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50
cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgfQogCiAgICAg
ICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBj
b2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8g
cmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIzNywxMSArMzg0MSwxMyBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29u
dHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBh
aW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAgICAgaWYgKGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRl
eHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxv
Y2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4
ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxvd0NvbnRy
b2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0lu
Zm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50
LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3JlQ2xpcChjb250
ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwogICAgIH0K
QEAgLTUyODAsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAg
ICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAg
ICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3Qp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxl
QXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRl
ckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0
LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU1MTEs
NyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRl
ckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9mZnNldEZyb21B
bmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAg
aWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVu
dHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2FuUmVzaXplKCkg
JiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0UmVzaXplcklu
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7
CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9p
bnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTg2LDM1ICs0MTkyLDYgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
IGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwg
TGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFn
bWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRl
ckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0
JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAg
aWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAg
ICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1h
eFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRG
cm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNp
emVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21C
b3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0
Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3Vu
ZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0
LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkg
PSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25z
dCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAg
ICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBw
ZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAg
IGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikg
JiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVk
UG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQo
aGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zv
cm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIq
IGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9y
bVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjA3NSw5ICs0
NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQog
ICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICBy
ZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKHNjcm9s
bGFibGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFibGVMYXllci0+c2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKCFz
Y3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1F
OiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAo
KSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5v
dCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwyMSArNDk1NCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFj
a2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjps
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tp
bmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsK
LX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRl
ckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFj
a2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0K
IGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVo
YXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9
ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTY0
MTksMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWlu
dEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBh
dGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tn
cm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAog
ewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnQoKSkKQEAgLTY1NDcsOSArNTEwNywxMCBAQCBib29sIFJlbmRlckxheWVyOjpz
aG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAoIWlzTm9ybWFsRmxvd09u
bHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKLSAg
ICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSB8fCBtX3Njcm9s
bGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAg
ICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVv
KCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0KCkKQEAgLTY2NjQsNyAr
NTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNv
bnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwg
aGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlv
bnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVh
LT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1Zpc3Vh
bGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApAQCAtNjY3
NCw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50
ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250
ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkg
fHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250
cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIApAQCAtNjY5OSwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlO
b25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJu
IGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1z
ZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBw
ZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxv
dyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3Zl
cmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9p
bmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBr
ZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAg
ICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkg
JiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9v
bCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFy
KGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVy
bGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1h
eSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3
ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFy
ICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNj
cm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJh
ciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9y
bWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3NTEsNiArNTI4MCw4
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9CiAKKyAgICB1cGRhdGVT
Y3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFu
ZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRz
LiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRo
ZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCArNTI5MywxNCBAQCB2b2lk
IFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBp
cyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNp
YmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFi
bGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hU
TUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1h
cnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYg
KCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1h
cnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwot
ICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwot
Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9y
RGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xs
YmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNj
cm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAg
ICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0
ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzMTUsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVl
ZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQg
dmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5n
ZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwot
ICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0
eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2Vu
ZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1LDk4
ICs1MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5j
ZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewot
ICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7
Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0
VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVW
aWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAm
PSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVz
dGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2li
bGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAg
IEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNT
Y3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAg
ICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRl
ZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAg
ICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJl
bW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChp
c1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAg
IHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1
bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAg
ICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxp
c3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShh
ZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0g
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNl
dWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+
c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJT
Y3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3Jv
bGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikp
OwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMg
cGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsK
LSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQot
ICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Ny
b2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVu
dChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0
dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRv
IHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXIt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVu
ZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAg
ICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9y
ZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9s
bGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAg
ICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50
IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1f
cmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXpl
ci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
bGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0
cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25z
dAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBu
dWxscHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5
ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7
CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1
ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9s
bGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9u
KCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsK
QEAgLTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0
ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVy
Q2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7CisgICAgICAgIGNsZWFy
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICBpZiAoIWJveC5y
ZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgY2xlYXJMYXllclNj
cm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT5jb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0
ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXll
cigpOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0
eWxlKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRl
Z3koKQogewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5IHVzZWQgdG8gcmVuZGVy
IHRoZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDM4LDcgKzU1MTEsNyBAQCBzdGF0
aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVudCgpKQogICAgICAgICBy
ZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5
ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAK
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkg
Y29uc3QKQEAgLTcwNjAsNiArNTUzMywxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpzaW11bGF0ZUZy
ZXF1ZW50UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50
RnJlcXVlbmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRhdGVUaW1lc3RhbXAoKSB9
OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQor
CiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiByZWFz
b24pCiB7CkBAIC03MjYyLDkgKzU3NDAsMTAgQEAgc3RhdGljIHZvaWQgb3V0cHV0UGFpbnRPcmRl
clRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBXZWJDb3JlOjpSZW4KICAg
ICAgICAgcmV0dXJuICItIjsKICAgICB9OwogCisgICAgYm9vbCBsYXllckhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkgPyBsYXllci5zY3JvbGxh
YmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSA6IGZhbHNlOwogICAg
IHN0cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRpbmdEZXN0aW5hdGlvblN0cmluZygpOwogICAgIHN0
cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkgPyAiYyIgOiAiLSIpOwot
ICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgPyAi
cyIgOiAiLSIpOworICAgIHN0cmVhbSA8PCAobGF5ZXJIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IgPyAicyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzVHJhbnNmb3JtZWRB
bmNlc3RvcigpID8gInQiIDogIi0iKTsKIAogICAgIHN0cmVhbSA8PCAiICI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGExNWQ1MWJmZmY1Yy4uYmU2MTk3NWExMGM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAg
KgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0
aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3Iu
aCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNs
dWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtNzUsNiAr
NzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVyQmFja2lu
ZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRlckxheWVyRmlsdGVy
czsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBSZW5kZXJNYXJxdWVl
OwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CkBAIC0x
NDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewogdXNp
bmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVyTGF5ZXIgZmluYWwgOiBw
dWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRI
X0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBjbGFzcyBSZW5k
ZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0
Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CisgICAgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJl
cidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJl
RGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5
ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykgeyBtX2xheWVyTGlzdE11dGF0aW9uQWxs
b3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkZXN0cm95KCk7
CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJvcGFnYXRlIGluIHBhaW50IG9yZGVy
ICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29tcG9zaXRpbmcgewpAQCAtNDAxLDYg
KzQwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRz
KCk7CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBJbmRpY2F0
ZSB0aGF0IHRoZSBsYXllciBjb250ZW50cyBuZWVkIHRvIGJlIHJlcGFpbnRlZC4gT25seSBoYXMg
YW4gZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIgY29tcG9zaXRpbmcgaXMgYmVpbmcgdXNlZC4KICAg
ICB2b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFpbnQoR3JhcGhpY3NMYXllcjo6U2hvdWxkQ2xpcFRv
TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlwVG9MYXllcik7CkBAIC00MTEsOCArNDIxLDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGlu
Z0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBi
b29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEwNyArNDQxLDI5IEBAIHB1
YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3Qo
bG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0
IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50
U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50
IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0g
ICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNj
cm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93
LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9
IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpIGZpbmFsOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKIAogICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKICAgICB2b2lkIHNjcm9s
bFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAg
ICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKIAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQg
YnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xs
VG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpV
bmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRp
b25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KTsKKyAgICB2
b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0
IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCiAgICAgLy8gRklYTUU6IFRoaXMg
Y2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3
YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KICAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzKSBjb25zdDsKIAotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIg
aXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQs
IGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNP
dmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92
QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZv
aWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBi
b29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9z
aXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxh
YmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
KSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsK
LSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsK
LSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5k
aWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAg
ICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVp
cmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAK
LSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwo
KSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAg
ICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5n
LCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJs
ZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsK
LSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92
ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0KLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0
aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsK
LQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogICAgIGJvb2wgaXNQb2lu
dEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBh
aW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsK
LQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
ID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29s
IGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2LDkgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib29s
IGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92
ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1l
bnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVySW5FbmNsb3NpbmdQYWdp
bmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIHsg
RXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihQ
YWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM4LDYgKzU2NSw4IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3Np
dGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllcklu
Q29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
Q29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBU
aGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIg
YXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygp
IGNvbnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9
IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wg
aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29s
IGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBI
aXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJl
aGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAg
ICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29u
c3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlw
ZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZs
b3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03
ODUsMTEgKzcxMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9u
KExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9u
OyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24p
IHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25z
dCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQg
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8v
IE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQg
aW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTksMTYgKzc4Miw2IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2lu
Zyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNB
c3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcjsgfQotICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJv
b2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0KICAgICAv
LyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29t
ZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJl
dHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+
IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xs
aW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVy
eSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3Vu
ZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAg
IGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBj
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhG
aWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVy
cygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wg
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgp
OwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZy
ZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMxLDcgKzgzNyw3
IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29u
IHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsK
ICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJl
YXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAg
IFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTEs
OSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIo
KTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91
dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVj
a0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNG
dWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDM5LDggKzk0Miw2
IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVu
ZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
ID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9p
bnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5
ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCBj
bGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmls
dGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxh
Zz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQ
YWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25h
bDxMYXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVy
cyhHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBA
IC0xMTAwLDY0ICsxMDAzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29u
dGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIp
IGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21l
bnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJh
Z21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXll
ciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3Qg
TGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxs
cHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChj
b25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wg
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBh
aW50aW5nTGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQot
ICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJl
Y3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENv
cm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIo
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJs
ZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlv
cikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFs
OwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJl
Y3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0
cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJv
b2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9v
bCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2Nr
U2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQg
b25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwot
ICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50
U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAg
dm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAg
ICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNl
c3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNDksNiBA
QCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50
byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91
dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0g
ICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZv
aWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVy
KCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXpl
cigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRh
dGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChi
b29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSAr
MTA1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29u
KEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0
Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7
Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQg
b3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29u
c3Q7Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0
IGhvcml6b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7
CkBAIC0xMjMwLDggKzEwNjksNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250
cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJm
bG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7
Ci0KICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAK
ICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg1
LDYgQEAgcHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBp
cyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3Rh
cnQgYW5kIHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXll
ciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdl
IGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNh
biBsZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9y
IGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVm
bGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcg
aW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAg
ICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBi
b29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2li
bGVDb250ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6
IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGlu
Z1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3
LDggKzExMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRh
bnQgOiAxOyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0
ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJv
b2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9o
YXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFu
Y2VzdG9yIDogMTsKQEAgLTEyODgsMTcgKzExMjAsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVk
IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdS
ZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVh
c29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAg
Ym9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0j
ZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNl
bmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6
IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAg
Ym9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEz
MzksMjUgKzExNjAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWln
aHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3Jv
bGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBh
cmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRo
IG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3Jv
bGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAg
SW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8
U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+
PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRl
Z3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsg
Ly8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2
YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90
b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBM
YXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcsMTAgKzExNzQsNiBAQCBw
cml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGlj
YXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVw
bGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3Rv
bSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxh
eWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90
IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRp
b25MYXllcjsKIApAQCAtMTM3OCw2ICsxMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFp
bnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAs
NiArMTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRl
ckxheWVyKik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5k
ZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDUxNGM5OGVjZWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgs
OCArNTgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5k
ZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxh
eWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBz
dGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNr
aW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRp
bGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBi
b29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVz
aXplKCk7CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAg
ICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAg
ICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxT
Y3JvbGxpbmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdl
IHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAg
ICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAg
ICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9s
bGluZzsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFj
a2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgpCiAgICAgICAgICAgICB0
aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2UpOwogICAgIH0KIAotICAg
IGlmIChtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBt
X3Njcm9sbGVkQ29udGVudHNMYXllcikgeworICAgIGlmIChtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKICAgICAg
ICAgaWYgKGF1dG8qIHRpbGVkQmFja2luZyA9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT50aWxl
ZEJhY2tpbmcoKSkgewogICAgICAgICAgICAgYXV0byB0aWxlQ292ZXJhZ2UgPSBjb21wdXRlT3Zl
cmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShtX293bmluZ0xheWVyKTsKICAgICAgICAgICAgIHRp
bGVkQmFja2luZy0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7CkBAIC03NzUsNyArNzc4
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogc3RhdGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFu
c2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsK
ICAgICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQo
KSkgewotICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3Jt
KCkgfHwgKGN1cnItPnNjcm9sbGFibGVBcmVhKCkgJiYgY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKS0+
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtOTcyLDcgKzk3NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2Vz
CiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgCiAgICAgYm9vbCBuZWVk
c0Rlc2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9IGZhbHNlOwotICAgIGJvb2wgdXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKTsKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogCiAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKSB7CiAgICAgICAgIC8vIElmIGl0J3Mgc2Nyb2xsYWJsZSwgaXQgaGFzIHRvIGJlIGEg
Ym94LgpAQCAtMTIyNywxMCArMTIzMCwxMyBAQCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2lu
Zzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAg
ICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IHNuYXBwZWRHcmFwaGljc0xheWVyKGNsaXBw
aW5nQm94T2Zmc2V0LCBjbGlwcGluZ0JveC5zaXplKCksIGRldmljZVNjYWxlRmFjdG9yKCkpLm1f
c25hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rv
ci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVh
KCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRS
ZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRl
ZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9s
bENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisK
KyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRl
ZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJl
Y3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0
U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUo
c2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAt
MTM2Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRy
eShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9s
bENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJv
eC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUo
c2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkp
KTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5z
Y3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZz
ZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5n
TGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIo
KTsKQEAgLTEzODEsNyArMTM5MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAg
IGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAh
PSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAg
ICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmlu
Z0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNp
emUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1f
c2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCAr
MTUwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVk
Q29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0g
ICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpV
c2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKKworICAgIGlmIChzY3JvbGxh
YmxlQXJlYS0+Y3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAg
ICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2Fu
dCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxs
IGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Ny
b2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAg
bV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1
ZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdl
IGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0
aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAg
ICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwog
ICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5p
c1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwog
ICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVy
UmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Ny
b2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xp
cERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9s
bE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Ny
b2xsT2Zmc2V0OworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5
LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5j
bGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAg
IGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIw
MjgsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNj
cm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFy
KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFy
KG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0
dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDUs
MTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIo
KSBjb25zdAogICAgIGlmICghaXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmlu
Z0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3Qo
KTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNj
cm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNj
cm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmlu
Z0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFy
ID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xs
YmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVM
YXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9y
U2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIwOTAsMTIgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVk
c0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxh
eWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUs
ICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
PSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAg
IGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9v
d25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNj
cm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNj
cm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEs
IEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFy
TGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3Jv
bGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgVmVydGlj
YWxTY3JvbGxiYXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5n
ZWQ7CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9p
ZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7
Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBpZiAoIW1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlm
ICghc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwx
NiArMjEyOSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZl
IHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92
ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXll
ci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXll
cigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0g
ICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Ny
b2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAm
JiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNj
cm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJ
bnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0
aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1
dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTE2LDEw
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0
KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAg
ICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGlu
ZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIt
Pm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9s
bE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZz
ZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5
UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkg
KyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVy
ZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMx
NjUsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3Jh
cGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZt
X293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29u
dGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVy
LmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQp
CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJl
YSgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXIt
PmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQp
CiAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50
aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRp
bmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIu
cGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7
CkBAIC0zNDIwLDE3ICszNDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENv
bnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAg
ICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9
IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
IHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xs
YmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlm
IChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAg
ICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRl
eHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7
CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXll
ciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9
IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVy
LnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisg
ICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5z
Zm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5t
b3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWlu
dFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zv
cm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwg
SW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5w
YWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFu
c2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29u
dGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJV
RwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBj
ZmM0YWIxNTI4ODYuLjUyMzU0NTYxMzlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8u
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xMzk3LDcgKzEzOTgsNyBAQCB2b2lkIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXll
ciYgbGF5ZXIsIFZlY3RvcgogICAgICAgICBpZiAobGF5ZXJCYWNraW5nLT5oYXNBbmNlc3RvckNs
aXBwaW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNraW5nLT5hbmNlc3RvckNsaXBwaW5nU3RhY2soKS0+
aGFzQW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAgICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sYXll
cnNDbGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVuZCgmbGF5ZXIpOwogCi0gICAgICAgIGlmIChsYXll
ci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5z
Y3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRyYXZlcnNhbFN0YXRlLm92ZXJmbG93
U2Nyb2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVyKTsKIAogICAgICAgICBsYXllckJhY2tpbmctPnVw
ZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAgLTIwMDEsNyArMjAwMiw3IEBAIHN0YXRpYyBBbmNl
c3RvclRyYXZlcnNhbCB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwgRnVuY3RpCiAKIHN0YXRpYyBib29sIGNyZWF0ZXNDbGlwcGluZ1Njb3BlKGNvbnN0IFJl
bmRlckxheWVyJiBsYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxh
eWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsK
IH0KIAogc3RhdGljIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNs
b3NpbmdDbGlwcGluZ1Njb3Blcyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRl
ckxheWVyJiByb290TGF5ZXIpCkBAIC0yMDA5LDcgKzIwMTAsNyBAQCBzdGF0aWMgVmVjdG9yPExh
eWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGNv
bnN0IFJlbgogICAgIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBjbGlw
cGluZ1Njb3BlczsKICAgICBjbGlwcGluZ1Njb3Blcy5hcHBlbmQoeyBjb25zdF9jYXN0PFJlbmRl
ckxheWVyJj4ocm9vdExheWVyKSwgeyB9IH0pOwogCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkg
fHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
cigpKQogICAgICAgICByZXR1cm4gY2xpcHBpbmdTY29wZXM7CiAKICAgICB0cmF2ZXJzZUFuY2Vz
dG9yTGF5ZXJzKGxheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJv
b2wgaW5Db250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCkgewpAQCAtMjA0MSw3ICsyMDQyLDcgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1hcChMYXllck92ZXJsYXBN
YXAmIG92ZXJsYXBNYXAsIGNvbnN0IFIKICAgICBhdXRvIGNsaXBwaW5nU2NvcGVzID0gZW5jbG9z
aW5nQ2xpcHBpbmdTY29wZXMobGF5ZXIsIHJvb3RSZW5kZXJMYXllcigpKTsKIAogICAgIExheW91
dFJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNl
c3RvcigpKSB7CisgICAgaWYgKGxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAg
Ly8gQ29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhlIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nIGFuY2VzdG9y
LCB0aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIGF1dG8m
IHNjcm9sbGluZ1Njb3BlID0gY2xpcHBpbmdTY29wZXMubGFzdCgpOwogICAgICAgICBhdXRvJiBz
Y29wZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUubGF5ZXI7CkBAIC0yODg5LDcgKzI4OTAsNyBAQCBW
ZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVB
bmNlc3RvckNsaXBwaW5nU3RhY2soYwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzQ29udGFp
bmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJm
bG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLnNj
cm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaGF2ZU5v
blNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVkaWF0ZUxheWVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgqY3VycmVudENsaXBwZWRMYXllciwgYW5jZXN0b3JM
YXllcik7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRl
cm1lZGlhdGVMYXllciA9IGZhbHNlOwpAQCAtMjkzMyw3ICsyOTM0LDcgQEAgU2Nyb2xsaW5nTm9k
ZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlE
KGNvbnN0IFJlbmQKIAogICAgIFNjcm9sbGluZ05vZGVJRCBjb250YWluZXJTY3JvbGxpbmdOb2Rl
SUQgPSAwOwogICAgIHRyYXZlcnNlQW5jZXN0b3JMYXllcnMoKmVuY2xvc2luZ0xheWVyLCBbJl0o
Y29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaXNDb250YWluaW5nQmxvY2tD
aGFpbiwgYm9vbCAvKmlzUGFpbnRPcmRlckFuY2VzdG9yKi8pIHsKLSAgICAgICAgaWYgKGlzQ29u
dGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5j
ZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBj
b250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBsYXllclNjcm9sbGluZ05vZGVJRChhbmNlc3Rvckxh
eWVyKTsKICAgICAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAg
ICAgfQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Nj
cm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRh
JiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3Jv
bGxhYmxlQXJlYSgpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBU
b0RhdGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMyNTIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRl
cgogICAgICAgICByZXR1cm4gbGF5ZXIuaXNDb21wb3NpdGVkKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwogfQogCiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
LCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVz
Y2VuZGFudHMsIGJvb2wgcGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZykgY29uc3QKQEAgLTMyNzMs
NyArMzI3NCw3IEBAIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvCiAgICAgfQogCiAgICAgLy8gSWYg
dGhpcyBsYXllciBzY3JvbGxzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgbGF5ZXIgdGhhdCBpdCB3
b3VsZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0byBnZXQgY29tcG9zaXRlZC4KLSAgICBpZiAoIXBh
aW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKCkpIHsKKyAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAgICAgICBhdXRvKiBwYWludERlc3RpbmF0aW9uID0g
bGF5ZXIucGFpbnRPcmRlclBhcmVudCgpOwogICAgICAgICBpZiAocGFpbnREZXN0aW5hdGlvbiAm
JiBsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGxheWVy
LCAqcGFpbnREZXN0aW5hdGlvbikgIT0gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZSkK
ICAgICAgICAgICAgIHJldHVybiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpPdmVyZmxvd1Nj
cm9sbFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3ICszMzExLDcgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWUKIAogICAgIGF1dG8qIGVuY2xvc2luZ092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3Np
bmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CiAKLSAgICBpZiAoZW5jbG9zaW5nT3Zl
cmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNs
b3NpbmdPdmVyZmxvd0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpICYmIGVuY2xvc2luZ092ZXJmbG93
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkgewogICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQogICAg
ICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2luZ092
ZXJmbG93TGF5ZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM0Miw3ICszMzQzLDcgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllcihjb25zdCBSZW5kZXIKIAogICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5z
aWRlIG9mIGEgdHJhbnNmb3JtLCB3aGljaCBzaG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KICAg
ICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3Rv
ciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGFuY2VzdG9yLT5zY3JvbGxh
YmxlQXJlYSgpICYmIGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYg
KGFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIGFuY2VzdG9yLT5pc0NvbXBvc2l0ZWQo
KSAmJiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4ICszMzk0LDEwIEBAIHN0YXRpYyBSZW5kZXJMYXll
ciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwKICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gJmludGVybWVkaWF0ZUxheWVyKQog
ICAgICAgICAgICAgc2F3SW50ZXJtZWRpYXRlTGF5ZXIgPSB0cnVlOwogCi0gICAgICAgIGlmIChh
bmNlc3RvckxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAg
ICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KGFuY2VzdG9yTGF5ZXIpOworICAg
ICAgICBpZiAoYXV0byogYW5jZXN0b3JMYXllclNjcm9sbGFibGVBcmVhID0gYW5jZXN0b3JMYXll
ci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXJTY3Jv
bGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7Cisg
ICAgICAgIH0KIAogICAgICAgICBhbmNlc3RvckxheWVyID0gYW5jZXN0b3JMYXllci0+cGFyZW50
KCk7CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLAog
CiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJT
Y3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0NvbXBvc2l0ZWRBbmNlc3Rvcihjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBjb21wb3NpdGVkQW5jZXN0b3IpCiB7Ci0g
ICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAo
IWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRp
b25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGJvb2wgY29tcG9zaXRlZEFuY2VzdG9ySXNJbnNp
ZGVTY3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0Myw3ICszNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29s
bGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVy
JiBsYXllciwKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgaXNQYWludE9y
ZGVyQW5jZXN0b3IpCiAgICAgICAgICAgICByZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0b3A7
CiAKLSAgICAgICAgaWYgKHNlZW5QYWludE9yZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Js
b2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpCisgICAgICAgIGlmIChzZWVuUGFpbnRPcmRlckFuY2VzdG9yICYmICFpc0NvbnRhaW5pbmdC
bG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3Rvckxh
eWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
ICAgICAgICAgICAgIGFwcGVuZE92ZXJmbG93TGF5ZXJOb2RlSUQoYW5jZXN0b3JMYXllcik7CiAK
ICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVyc2FsOjpDb250aW51ZTsKQEAgLTM0NTgsNyAr
MzQ2MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYgKGxheWVyLnJlbmRlcmVy
KCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5n
QmVoYXZpb3I6Ok5vbmU7CiAgICAgCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVy
LnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAg
ICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKQEAg
LTQ0NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBTCiAgICAgICAgIG1fY2xp
cExheWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQobm9kZUlEKTsKICNlbmRpZgogCi0gICAgbV9zY3Jv
bGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCBtYWtlV2Vha1B0cihsYXllcikpOworICAg
IEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBtX3Njcm9sbGluZ05vZGVUb0xh
eWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFrUHRyKCpsYXllci5zY3JvbGxhYmxlQXJlYSgpKSk7
CiAKICAgICByZXR1cm4gbm9kZUlEOwogfQpAQCAtNDQ3NSw4ICs0NDc5LDggQEAgdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNjcm9sbENvb3JkaW5hdGVkTGF5ZXJXaXRoUm9sZShS
ZW5kZXJMYXllciYgbGEKICAgICBhdXRvIHVucmVnaXN0ZXJOb2RlID0gWyZdKFNjcm9sbGluZ05v
ZGVJRCBub2RlSUQpIHsKICAgICAgICAgYXV0byBjaGlsZE5vZGVzID0gc2Nyb2xsaW5nQ29vcmRp
bmF0b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlEKTsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkTm9k
ZUlEIDogY2hpbGROb2RlcykgewotICAgICAgICAgICAgaWYgKGF1dG8gd2Vha0xheWVyID0gbV9z
Y3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQoY2hpbGROb2RlSUQpKQotICAgICAgICAgICAgICAg
IHdlYWtMYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7CisgICAgICAgICAgICBp
ZiAoYXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdl
dChjaGlsZE5vZGVJRCkpCisgICAgICAgICAgICAgICAgd2Vha1Njcm9sbGFibGVBcmVhLT5sYXll
cigpLnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVwZGF0ZSgpOwogICAgICAgICB9CiAKICAgICAgICAg
bV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5yZW1vdmUobm9kZUlEKTsKQEAgLTQ2NTcsOCArNDY2
MSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3Jv
bGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAv
LyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNo
b3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkp
OworICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlz
aWJsZVNpemUoKSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAg
ICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0Njg1
LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5
ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNr
Z3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAg
ICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5s
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NF
UlQoc2Nyb2xsYWJsZUFyZWEpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFj
a2luZygpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJ
RCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xs
Q29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAg
ICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpIH0pOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0p
OwogICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0NzMwLDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJl
bmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXll
cikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXll
ciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9s
bGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9k
ZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVT
Y3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hh
bmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3Rh
dGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9k
ZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlEOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCmluZGV4IGMxNTFl
MjNkMGVmNi4uMmNkNzFjYjhmM2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllclVwZGF0ZXIuaCIKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFj
ay5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvblNldC5oPgogCkBAIC02MzUsNyArNjM2LDcgQEAgcHJpdmF0ZToKICAgICBDb2xvciBtX3Zp
ZXdCYWNrZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9yb290RXh0ZW5kZWRCYWNrZ3JvdW5kQ29s
b3I7CiAKLSAgICBIYXNoTWFwPFNjcm9sbGluZ05vZGVJRCwgV2Vha1B0cjxSZW5kZXJMYXllcj4+
IG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXA7CisgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQs
IFdlYWtQdHI8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4+IG1fc2Nyb2xsaW5nTm9kZVRvTGF5
ZXJNYXA7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGVn
YWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcj4gbV9sZWdhY3lTY3JvbGxpbmdMYXll
ckNvb3JkaW5hdG9yOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi41NWYzZWFhMGNjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTAsMCAr
MSwxODQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxl
IG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1
YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxh
Lm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwu
aHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhl
IE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3Zl
LiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2Vz
ICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3Vy
CisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBk
ZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0
aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkg
dGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90
IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisg
KiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3Ig
dGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxh
eWVyKQorICAgIDogbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVy
Zmxvd1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFs
c2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKKyAgICAs
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAs
IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBt
X3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZh
bHNlKQorICAgICwgbV9sYXllcihsYXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVy
ID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA9PSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJl
YSh0aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsK
KworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSByZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJT
Y3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIo
SG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9s
bGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5w
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxD
b3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0g
bV9sYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdl
IHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3Jv
bGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBl
bGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9s
bFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJy
ZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdl
IGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVk
IG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRU
b3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3Vt
ZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30K
KyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRl
Rml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5w
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Mo
KSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNP
dmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxp
bmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsK
KyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNz
KHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQor
ICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsK
KyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNl
VGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5n
cygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGlu
ZygpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUg
bGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxp
bmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGlu
YXRlZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQ
b3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcG9z
dExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbi52YWx1ZSgpOworICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAo
IW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBz
Y3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24pKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0
aW9uKCk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
U2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3Jv
bGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxU
eXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBT
Y3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24o
Y29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBp
ZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30K
KworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVy
biBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3Jv
bGxPZmZzZXQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Ny
b2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFC
TEUoQVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVh
bSA8PCBtX2xheWVyIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRp
b24pOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3Jv
bGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zm
c2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcpCit7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBl
ZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xh
bXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xh
bXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwor
ICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3Jv
bGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9u
KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0
aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0g
Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBl
KTsKKworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7
CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9y
U3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5j
YW5jZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3Jv
bGxPZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJl
dmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1
cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwg
bV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xs
VHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlv
biBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkp
IHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRl
ZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAg
ICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9s
bERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNl
ZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNl
dCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAg
ICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0
LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRX
aWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAg
ICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Ny
b2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAg
ICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09m
ZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAg
fQorCisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0
aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Ny
b2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBn
ZXN0dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVl
ZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KKyAgICAg
ICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7CisgICAgICAg
ICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAg
ICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRp
b247CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIudmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3Np
dGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJz
IHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRl
IGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUg
ZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygp
LmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElm
IHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMg
b25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwoKTsKKworICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxl
VXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBs
YXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5
ZXIKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJl
cXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAg
ICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlv
bnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8v
IHdoZW4gdGhhdCBjb21wbGV0ZXMuCisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgeworICAgICAgICAgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2Fu
IGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1h
eSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dl
ciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkp
CisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRh
dGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xp
cCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmlu
dmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92
ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIuZnJhbWUoKSk7CisgICAgfQorCisgICAgRnJhbWUm
IGZyYW1lID0gcmVuZGVyZXIuZnJhbWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBy
ZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8v
IFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwor
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisKKyAgICBM
YXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIuaGFzUmVwYWludExheW91dFJlY3Rz
KCkgPyByZW5kZXJlci5yZXBhaW50TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVy
ZXIuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAg
ICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9y
UmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3Bh
dGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50
KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVyLnNldERlc2NlbmRhbnRzTmVlZFVwZGF0
ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50
ID0gbV9sYXllci5iYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwor
ICAgIH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVj
dC4KKyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAgICAgICByZW5kZXJlci5yZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8g
U2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBp
ZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVu
dC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOworCisg
ICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENo
YW5nZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRl
bnRzQ2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKG1f
bGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAgIGlmIChtX2xheWVyLmNvbXBvc2l0b3Io
KS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tp
bmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRh
bnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNv
bXBvc2l0aW5nQW5jZXN0b3IgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdD
b21wb3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBj
b21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0
aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3Np
dGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7CisgICAgICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRl
Q29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9z
aXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lu
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhp
cyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4K
KyAgICByZXR1cm4gbV9zY3JvbGxXaWR0aDsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVy
Qm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgp
IGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxI
ZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVl
ZVBvc2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNu
J3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KKyAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uID0gdHJ1ZTsKKyAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwor
ICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlv
bjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lN
YXJxdWVlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVuZGVyZXIuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyLnN0eWxlKCkubWFycXVl
ZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyLmlzQm94KCkp
IHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtl
VW5pcXVlPFJlbmRlck1hcnF1ZWU+KCZtX2xheWVyKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRh
dGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9t
YXJxdWVlID0gbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5z
Y3JvbGxzT3ZlcmZsb3coKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxl
KCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CisgICAgaWYgKHJlbmRlcmVy
LnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAhbV9sYXllci5pc0luc2lkZVNW
R0ZvcmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShP
VkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxz
T3ZlcmZsb3coKSAmJiAocmVuZGVyZXIuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5n
KCkgfHwgcmVuZGVyZXIuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Ny
b2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNl
dCkpOworfQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpLT5zY3Jv
bGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNj
cm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYg
KCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKHVzZXNBc3luY1Njcm9sbGlu
ZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JT
Y3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOworICAgIH0KKyNlbmRpZgor
CisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5n
KHdoZWVsRXZlbnQpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZp
c2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25z
dAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dD
b250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAg
ICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8g
dmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBv
c2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNw
YWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJh
clNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNo
OworCisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92
ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byBy
ZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Ny
b2xsT2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNl
dC55KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zm
c2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAg
ICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5o
ZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkg
PCAwKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVs
c2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hh
YmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lk
dGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lk
dGgoKSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXpl
KCk7CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVy
ZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7
Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAg
cmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVy
ZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3
KCZyZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJl
cigmcmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkg
Y29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJ
bnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7
Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3Qg
SW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwg
cGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXll
ci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsK
KworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91
bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6
ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAorewor
ICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBp
ZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNT
aXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgp
LndpZHRoKCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkK
KyAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVp
Z2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1Np
emU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNj
cm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0g
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsK
KyAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJl
dHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5j
aHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBh
Z2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8g
U2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cg
d2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5j
bGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1Jl
bmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7
CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7Cisg
ICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1
dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7
CisKKyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciog
c2Nyb2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNP
dmVybGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jp
em9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Cisg
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Ny
b2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25U
aGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAg
IGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6
Tm9uZTsKKyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhv
cml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwg
KGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2
ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXpl
OworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBv
bmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBj
b3JuZXJTaXplID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
ID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisg
ICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAg
ICBSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1f
aEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkK
KyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5l
clNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVj
dC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAg
cmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmICht
X3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9u
aW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisg
ICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgo
KSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZv
aWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVp
Z2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Cisg
ICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewor
ICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAg
ICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVj
dC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRv
bUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0
KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5l
clNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENv
cm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6
ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9p
ZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5l
cjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3Jv
bGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNl
dChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAg
ICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Ny
b2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93
c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxi
YXIgPT0gbV92QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9
IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5
ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5
ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50Lgor
ICAgIGlmICghYm94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92
QmFyLmdldCgpKQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9s
bGJhci5sb2NhdGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJl
cGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBh
aW50UmVjdCk7CisgICAgYm94LT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUlu
UmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENv
cm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cisg
ICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJl
Y3QpOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciog
c2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRl
bkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFy
KCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xs
YmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50
KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290
KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAg
ICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50
KQorICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Ny
b2xsYmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VS
VChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRl
cmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3Rv
bVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAg
ICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVu
dCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVn
dWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9u
KTsKKyAgICAgICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkp
CisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvciht
X2xheWVyLnBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lk
Z2V0LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sK
KyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkp
CisgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlv
bik7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIg
PSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9s
bGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0
aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdz
KCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xs
RWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3Jv
bGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Cisj
ZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25l
KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJh
ciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQg
dG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFy
KQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAg
ICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7Cisg
ICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0
ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5H
KQorICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAg
U2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVy
ZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVk
KCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Cisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3Rp
Y2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0
eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBv
bmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2Ug
bmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmICht
X2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikK
KyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
K3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBy
ZXR1cm4gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIu
aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQor
eworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1f
dkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAg
ICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVy
bGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5y
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYm
ICFtX2xheWVyLmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5
ZXIucmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMu
dmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+
c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAo
bV9oQmFyKSB7CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRG
cm9tUm9vdCk7CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9z
Y3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYg
KG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXpl
cik7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dU
b3AoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsK
KyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
KyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBv
dmVyZmxvd1JlY3QueSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5
ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitM
YXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25z
dAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlv
dXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gt
PmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1Jl
Y3QubWF4WCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9
IGZhbHNlOworCisgICAgbV9zY3JvbGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgp
IC0gb3ZlcmZsb3dMZWZ0KCkpOworICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVy
Zmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRP
dmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7
CisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAg
ICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7
CisgICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3Ao
KSAtIGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpCit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
fHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVy
Qm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxz
T3ZlcmZsb3dZKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVy
LnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJv
dW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0
aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4
aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5v
dmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxB
Y3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQ
c2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBi
b29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cg
PSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5
bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUu
aGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92
ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7
CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChi
b3gpOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRo
ZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29s
IGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOwor
ICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3co
KTsKKworICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1
c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
cmVuZGVyZXIuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikp
CisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAg
IC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdh
aW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhB
dXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250
YWxPdmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpv
bnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewor
ICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigp
KQorICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3Zl
cmZsb3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVo
YXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2Fs
T3ZlcmZsb3cpOworCisgICAgICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsK
KworICAgICAgICByZW5kZXJlci5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0
eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOworICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJs
b2NrPihyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFu
Z2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFy
Q2hhbmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlv
dXQoKTsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSBy
ZW5kZXJlci5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGli
bGVCb3goKSAmJiByZW5kZXJlci5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVy
RmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXll
ci5yZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBh
Z2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVu
dFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFy
LT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAg
ICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsK
KyAgICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91
bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Ny
b2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBz
KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZC
YXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQor
CisgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlz
IGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMp
Lgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJM
YXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAg
ICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVy
LnVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4g
Y2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAg
Ly8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlv
bi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9m
ZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAg
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQo
c2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkg
YmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBU
aGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRp
b24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAg
IC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4g
U2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAg
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAg
IGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAg
c2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2Up
OworI2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisK
KyAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkp
OworCisgICAgaWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5z
ZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXRO
ZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0
TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJ
bnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmlu
dGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVj
dHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9j
ZXNzLgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpw
YWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRp
bmdPdmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2
ZSBubyBvdmVyZmxvdy4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBpZiAoIXJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2
ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBq
dXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJz
CisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vj
b25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xs
IHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5k
IHR5IHNvIHRoYXQgdGhlCisgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVu
dGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNj
cm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNo
ZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQn
cyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBw
YWludCBpbnRvIGxheWVycy4KKyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9
IGRhbWFnZVJlY3Q7CisgICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQp
OworICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VS
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRp
bmdSb290ID0gbV9sYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlm
ICghcGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmll
dygpLmxheWVyKCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50
aW5nUm9vdC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGlu
ZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9j
YWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFy
IHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0
cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3
aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBk
b2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyku
CisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zm
c2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBp
biB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwg
ZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAg
aWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdl
IGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFy
IHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0
aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZz
ZXQsIGRhbWFnZVJlY3QpOworCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2Ug
aXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNv
bnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAg
ICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFs
aWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsK
KyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZz
ZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2lu
Y2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhh
c092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBh
aW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVz
aXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlm
IChyZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJ
bWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVh
a1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhp
UmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXpl
KCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdl
TG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIi
KS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2Ut
PnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0
aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAt
IGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAg
ICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3Jl
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigp
IC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXpl
Q29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5z
dHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCBy
ZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIt
PnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250
ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSBy
ZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2Vu
dC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRn
ZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1f
dkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsK
KyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAg
ICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSAr
IDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1Jl
Y3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hC
YXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
SW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6
Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2gg
dGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29u
dGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92
QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChT
Y3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIu
cGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVh
cmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0Fw
cGVhcmFuY2UoKTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhN
RTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxF
bGVtZW50PihtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5n
RWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBk
YXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgp
LCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xs
c092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAg
ICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xh
eWVyLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRT
aXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0
LCBwYWludGluZ0luZm8sIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVy
bGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5G
cmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQg
PSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6
ZXJSZWN0KSB7CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkpIHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBi
b3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5l
cigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4
WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJl
Y3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAg
SW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29y
bmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50
UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9t
UmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07
CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAt
LWkpIHsKKyAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdt
ZW50cy5hdChpKTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJS
ZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3Rz
LnJlc2l6ZXIpOworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0
cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRU
ZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21l
bnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5
ZXJCb3VuZHMubG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmco
KS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygp
LT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8g
T3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBM
aXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBo
YXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0g
TGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9
IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gt
PnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0
IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9t
YXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIo
KSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNh
bFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0
aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xs
LCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAg
IC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxl
IHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFs
U2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hC
YXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxT
Y3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93
OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJh
ci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
OworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRU
ZXN0aW5nKCk7CisgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZp
ZXcuZnJhbWUoKS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9
IG93bmVyLT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0
aW5nKCk7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJs
ZVRvSGl0VGVzdDsKKyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NF
UlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAo
IW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3Zl
ZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBm
cmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFi
bGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJh
dGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBh
Y2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgor
ICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVt
b3ZlZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVs
bHB0cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJ
WE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENv
cm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxD
b3JuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51
bGxwdHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXpl
ciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0
eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJl
c2l6ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7
CisgICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklY
TUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAg
bV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0
aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShX
VEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xs
YmFyUmVsYXRlZFN0eWxlKCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7CisgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVy
U3R5bGUoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9s
bGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAg
ICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91
Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRl
cmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVu
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgp
IHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFu
ZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1h
ZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkg
JiYgbV9sYXllci5iYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAg
IC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9t
eHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJv
d3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGlu
dCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYg
KGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8
aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVs
dGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0
ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEo
Y29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQo
KSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Q
b2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtu
b3duTW91c2VQb3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sg
aWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdo
ZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hl
cmVudAorICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYg
KGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
LnkoKSA8IDApCisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNl
UG9zaXRpb247CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gLSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0g
U2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRo
ZSBzcGFjZSBmb3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYg
KGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisg
ICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRq
dXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlv
ciBiZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxFeHBvc2VSZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyLmFsbG93c0N1cnJlbnRT
Y3JvbGwoKSk7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7Cisg
ICAgQVNTRVJUKGJveCk7CisKKyAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3Ro
aXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQorICAgIHsKKyAg
ICAgICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpCisgICAgICAgICAgICAm
JiBlbGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhiZWhhdmlvciwgZWxlbWVudCk7CisgICAg
ICAgIHJldHVybiB1c2VBbmltYXRlZFNjcm9sbGluZyA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBB
bmltYXRlZFNjcm9sbDo6Tm87CisgICAgfTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUo
cm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVk
U2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAg
ICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwg
YmVoYXZpb3IpOworICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxP
ZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsK
KworICAgICAgICBhdXRvIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0
OworICAgICAgICBsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZm
ZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVR
dWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJh
bnNmb3JtcykuYm91bmRpbmdCb3goKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2
ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkK
K3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGlu
ZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVyLnBhcmVudCgpKQorICAgICAgICByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1w
KCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJl
c3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3
U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpz
Y3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8g
dGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRy
eQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNl
dCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5p
c1plcm8oKSAmJiByZW5kZXJlci5wYXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5j
bHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwg
c2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyZXIuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxl
ZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1
dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMg
dGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAg
IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9s
bCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMg
b3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NF
UlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAg
IExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdl
b21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7Cisg
ICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYg
KCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxs
cHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNl
c3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhh
c1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhP
dmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjps
b2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QK
K3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAi
ICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0
aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjMzMGU0MzlhOWJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApA
QCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRo
aXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96
aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxl
ZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25z
IG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9z
ZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9m
IHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBs
aWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1
c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRl
IHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJl
cGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVp
cmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91
IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2Ug
eW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUg
TVBMIG9yIHRoZSBHUEwuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyTWFycXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YShSZW5kZXJMYXllciYpOworICAgIHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEo
KTsKKworICAgIFJlbmRlckxheWVyJiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAg
IFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7
IH0KKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JE
ZXN0cm95TWFycXVlZSgpOworCisgICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRo
KCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5T
Y3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRo
b2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQg
c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEq
KiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Ny
b2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29u
c3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNj
cm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7
CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRl
ZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9z
aXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVz
ZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50
IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSks
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0K
KyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3co
KSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigp
IHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsg
fQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxi
YXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9u
OyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2gg
c2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkg
c2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3Jv
bGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAg
Ym9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3Jv
bGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJv
b2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9p
bnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50
U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAg
ICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNj
cm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAv
LyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1l
dGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFp
bGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Ny
b2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisK
KyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Cisg
ICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBo
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNl
bmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5k
U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkg
Y29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAg
IGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZp
bmFsOworCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3Qg
SW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgSW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Cisg
ICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5h
bChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVj
dEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29u
c3QgZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7Cisg
ICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQg
PSBudWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
CisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYK
KyAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7
CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50
U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXpl
KCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgp
IGNvbnN0IGZpbmFsOworCisgICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29u
c3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGhh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3I7IH0KKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNl
dENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisg
ICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisK
KyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAg
ICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
cmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNv
bnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xh
bXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlv
dXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0
UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1cGRh
dGVSZXNpemVyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcgb24g
eDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7
CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0
cmVlLgorICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7
CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsK
KyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
OiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAg
IGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91
ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Njcm9s
bEhlaWdodDsKKworICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0aW9u
IG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBw
YWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNj
cm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Ny
b2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1f
cmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7
IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQz
NmUuLjUyMjAyNTliZWVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg4
Miw3ICs4ODMsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1
ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAg
IGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFy
aWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpp
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9z
aW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2lu
Z0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJlbmRl
ckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2Li45
YTQ4MWE5N2FmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
YXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHAKQEAgLTYwLDcgKzYwLDggQEAgUmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJM
YXllciogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywg
JlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFpbnNT
Y3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCkpOworICAgIGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJN
YXJxdWVlKCkgPSBkZWZhdWx0OwpAQCAtMTczLDkgKzE3NCw5IEBAIHZvaWQgUmVuZGVyTWFycXVl
ZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAgICAg
ICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAs
IG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNs
YW1wZWQpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9P
ZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG1fc3Vz
cGVuZGVkID0gZmFsc2U7CiAgICAgICAgIG1fc3RvcHBlZCA9IGZhbHNlOwpAQCAtMjQ0LDEyICsy
NDUsMTUgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICBpZiAobV9sYXll
ci0+cmVuZGVyZXIoKS52aWV3KCkubmVlZHNMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7
CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAg
ICAgICBtX3Jlc2V0ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAg
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKQEAgLTI3Miw3ICsyNzYsNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6
OnRpbWVyRmlyZWQoKQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAg
ICBpbnQgY2xpZW50U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+
cmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJC
b3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRW
YWx1ZUZvckxlbmd0aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVu
dCgpLCBjbGllbnRTaXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRh
bCgpID8gbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0
KCkueSgpKTsKKyAgICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
T2Zmc2V0KCkueSgpKTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVt
ZW50ID8gaW5jcmVtZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAg
ICAgICAgICAgIG5ld1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkg
KzI5Myw5IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAog
ICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0
KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bv
cyk7CiAgICAgZWxzZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9wdGlv
bmFsPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29u
dGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKFRl
eHRTdHJlYW0mIHN0cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJlYW0g
PDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8o
UillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSlt
b3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHls
ZSwgKCspRGlydHkgbGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShO
KWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRils
b2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwp
YXllciwgaGFzTGF5ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0
eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBAIC0x
MTE1LDEwICsxMTE1LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3Qo
VGV4dFN0cmVhbSYgc3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFzTGF5
ZXIoKSkgewogICAgICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFt
IDw8ICItIjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0
aGlzKS5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJT
IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVsc2UK
KyAgICAgICAgc3RyZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAgICAg
ICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
aW5kZXggYjkxNTkyMmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3Qg
OiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJP
YmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255
bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQg
dGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1v
dXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2NWMu
LjI1N2FmYmUxOTA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gq
IHN0YXJ0Qm94LCBjb25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0g
ICAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1l
bnQoKS0+cmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxh
eWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikp
CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5k
ZXJlci0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAg
ICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQ
b2ludCk7CiB9CiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewot
ICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+
bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNh
bChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQor
ICAgIGF1dG8qIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigp
OworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJs
ZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rp
b24sIHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAy
MGZlODIuLmY1ODhlODY5ZTA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC02MDAsMTQgKzYwMSwxNiBAQCBzdGF0aWMgdm9p
ZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNv
bnN0IExheW91dFJlYwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAg
ICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0g
ICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxX
aWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJC
b3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0g
bGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAi
IDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Ny
b2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICAg
ICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAg
ICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eSgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5
ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
V2lkdGgoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJv
eCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAgICAg
ICAgfQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJh
clRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7CiAgICAgICAgIGlmICghc2Nyb2xsYmFy
VGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCmluZGV4IGIxMDMzZGEwNzkz
MC4uNjkxZTc1NTg3ZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgpAQCAtMzMyLDggKzMzMywxMCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxlY3Rp
b25SZWN0KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgfQogCi0gICAgaWYg
KGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpCi0gICAgICAgIGxheWVyKCktPnBh
aW50UmVzaXplcihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQ
YWludE9mZnNldCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigp
LT5jYW5SZXNpemUoKSkgeworICAgICAgICBBU1NFUlQobGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KSk7CisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50UmVzaXplcihwYWlu
dEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBh
aW50SW5mby5yZWN0KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRPdmVybGFw
VGVzdFJlc3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCBhZDYzN2ZmNDRmOTYuLmZlNWNlNDA1OTYxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTU4LDYgKzE1OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1l
bnVMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTE4MzMsNyArMTgzNCw4IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVu
dChFbGVtZW50JiBlbGVtZW50LCBkb3ViCiAgICAgICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRB
bmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgICAgIHNjcm9sbGFibGVBcmVhID0gYm94LmxheWVy
KCk7CisgICAgICAgIEFTU0VSVChib3gubGF5ZXIoKSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVh
ID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgfQogICAgIAogICAgIGlmICgh
c2Nyb2xsYWJsZUFyZWEpCkBAIC0yODU0LDggKzI4NTYsMTAgQEAgRXhjZXB0aW9uT3I8U2Nyb2xs
YWJsZUFyZWEqPiBJbnRlcm5hbHM6OnNjcm9sbGFibGVBcmVhRm9yTm9kZShOb2RlKiBub2RlKSBj
b25zdAogCiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpKQogICAgICAg
ICAgICAgc2Nyb2xsYWJsZUFyZWEgPSAmZG93bmNhc3Q8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gu
bGF5ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQm94Lmxh
eWVyKCkpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJCb3gubGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZE5vZGVUeXBlRXJyb3IgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCmluZGV4IDVjNDk5M2JhZTAyOC4uYjk2OGFmYTFkY2ViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMTEtMjYgIE5pa29sYXMgWmltbWVy
bWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAgICAgICAgU2VwYXJhdGUgc2Nyb2xs
aW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxheWVyOgorICAgICAgICBUaGUgZ29h
bCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cgaGFuZGxpbmcKKyAgICAgICAgb3V0
IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBpbnRlcmZhY2UgYW5kCisgICAgICAg
IG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0aGF0IGRvIG5vdCBuZWVkCisgICAg
ICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4KKworICAgICAgICBXSVAgcGF0Y2gs
IHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAgICAqIERPTS9ET01IVE1MLm1tOgor
ICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6
YWRqdXN0Rm9ySU9TQ2FyZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAo
LVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIw
LTExLTIxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBhbiBFeHBlcmltZW50YWwgRmVhdHVyZXMgZm9yIHdoZWVsIGV2ZW50IGdlc3R1cmVzIGJl
Y29taW5nIG5vbi1ibG9ja2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpp
bmRleCA4NTg0YzIzMWZlZjguLjVjYzVmMDU2M2I0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUwubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtMTExLDEx
ICsxMTIsMTQgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zmc2V0
OihpbnQpeSBhZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlciku
bGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBp
ZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0gICAgbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6
OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBX
ZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdl
YkNvcmU6OlNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6
OlVuY2xhbXBlZCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogfQog
CiAtICh2b2lkKWFic29sdXRlUG9zaXRpb246KGludCAqKXggOihpbnQgKil5IDooaW50ICopdyA6
KGludCAqKWgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmlu
ZGV4IDNmZWExNjA4MzkyZi4uMTJkMTU5ZWM4ZmZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTk1LDYgKzk1LDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvUHJpbnRDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyZWREb2N1bWVudE1h
cmtlci5oPgpAQCAtNzM4LDkgKzczOSwxMCBAQCAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlz
aWJsZTooRE9NUmFuZ2UgKilyYW5nZQogI2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFy
dE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikg
ewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0
cnVlKTsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVM
YXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9k
ZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRS
ZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1v
ZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVk
LCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6
OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgIGxh
eWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0Q2Fy
ZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFuY2UoKTsKICAgICAgICAgfQpAQCAtNzU4LDkgKzc2MCwx
MCBAQCAtICh2b2lkKV9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTooRE9NUmFuZ2UgKilyYW5nZSB3
aXRoSW5zZXQ6KENHRmxvYXQpaW5zZXQKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+
cmVuZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwg
aW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9z
c09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIAogICAgICAgICAg
ICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFt
ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDYyMzZhMTFiZjI5Ni4uNThkZGUw
NWQ3MDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MjAtMTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisK
KyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRl
ckxheWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZs
b3cgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0
cyBpbnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBl
cyB0aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxv
dy4KKworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAg
ICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisKIDIwMjAt
MTEtMTkgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAg
ICAgW1RleHR1cmVNYXBwZXJdIFJlbW92ZSBtX3RleHR1cmVNYXBwZXIgZnJvbSBUZXh0dXJlTWFw
cGVyTGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggZjc3YzI2MmUwOTRm
Li4yZmRjZjlmOWNiOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC0xNDcs
NiArMTQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXll
ci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRy
ZWVBc1RleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KQEAgLTIwNDgsOCAr
MjA0OSwxMCBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQ
YXJhbSkKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGRpcmVjdGx5IGhpdCB0aGUgZG9jdW1lbnQg
d2l0aG91dCBoaXR0aW5nIGFueSBub2RlcwogICAgICAgICAgICAgY29yZUZyYW1lLT52aWV3KCkt
PnNjcm9sbEJ5KGxvZ2ljYWxTY3JvbGxEZWx0YSk7CiAgICAgICAgICAgICBzY3JvbGxlZEFyZWEg
PSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xs
ZWRBcmVhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwg
JnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoIShVcGRhdGVQYW5uaW5n
RmVlZGJhY2tQdHIoKSAmJiBCZWdpblBhbm5pbmdGZWVkYmFja1B0cigpICYmIEVuZFBhbm5pbmdG
ZWVkYmFja1B0cigpKSkgewogICAgICAgICAgICAgQ2xvc2VHZXN0dXJlSW5mb0hhbmRsZVB0cigp
KGdlc3R1cmVIYW5kbGUpOwo=
</data>
<flag name="commit-queue"
          id="431875"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414894</attachid>
            <date>2020-11-26 04:55:37 -0800</date>
            <delta_ts>2020-11-26 06:27:20 -0800</delta_ts>
            <desc>Patch, v10 (squashed for testing)</desc>
            <filename>patch-v10.diff</filename>
            <type>text/plain</type>
            <size>324435</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li5iMWIzYTI2NzYzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODUgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRp
Y2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZs
YWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9y
ZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdElu
dGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
dmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1NpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclVzaW5n
Q29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29y
ZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldp
dGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNl
c0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092
ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092
ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVl
TGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2Jq
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFp
bnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjogY29uc3QpOgorCiAyMDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmlu
ZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDM3ODlhYTM4Mzk0MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE0NjIsNiArMTQ2Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45
ODNjNWYzZGM2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3
NDUyMjUuLmEwOTRlMTZiZTBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjAxNSw2ICs2MDE1LDggQEAKIAkJMEY0Q0RFQUEy
M0Q5MUE4QTAwMjUxQjAyIC8qIFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNj
cm9sbFR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNC
MUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NGaWx0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjUzRkI4MzIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3
Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ckxheWVyRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIx
M0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlckxheWVyRmlsdGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTU4Niw2ICsyOTU4OCw4IEBACiAJCQkJMEY1M0ZCODky
MTNCNzY4NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkz
QzI0NEZFNEEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAor
CQkJCTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcCAqLywKKwkJCQkwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oICovLAogCQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJM
YXlvdXRTdGF0ZS5jcHAgKi8sCiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRl
ckxheW91dFN0YXRlLmggKi8sCiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRl
ckxpbmVCb3hMaXN0LmNwcCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEz
Yy4uYTYzOGUxZGY4ZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAK
ICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcg
QEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFi
bGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5k
SGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyAr
MzkxNyw5IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTog
aXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92
ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNT
RVJUKGJveC5sYXllcigpKTsKKyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5s
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvT2Zmc2V0KHBvaW50KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggZDYxYzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKQEAgLTkyLDYgKzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRv
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUcmVlVXBkYXRlci5oIgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRT
Y3JvbGxMZWZ0KGludCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRv
SW50ZWdlcihuZXdMZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAg
ICAgICAgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xs
QmVoYXZpb3I6OkF1dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Ny
b2xsOjpObzsKICAgICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVk
KTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkp
Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVk
U3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJl
ci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRj
aGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVs
ZW1lbnQ6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9
IGNsYW1wVG9JbnRlZ2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5n
KFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmlt
YXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRv
cCwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5p
bWF0ZWQpOwotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5
ZXIoKSkKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxh
dGNoZWRTdGF0ZSh0cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJl
bmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVh
ckxhdGNoZWRTdGF0ZSh0cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBA
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25z
dCBTY3JvbAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXll
ciogbGF5ZXIgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdM
YXllcigpKSB7CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAg
ICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZl
YWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9s
bGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAg
ICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBh
Z2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5j
bGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1l
bnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVl
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3Bw
CmluZGV4IDBhZGY3ZDE2NGUyZS4uMjY5MTZlNjVmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgog
CkBAIC0xNzUsNyArMTc2LDkgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50Ojpy
ZW5kZXJNYXJxdWVlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVy
KCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5k
ZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5Zi4uYWVl
MTZlOTk1YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIgpAQCAtMjUzLDkgKzI1NCwxMyBAQCB2b2lkIFRleHRGaWVsZElucHV0
VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0
dXJuOwogCisgICAgYXV0byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOworICAgIGlmICghaW5uZXJMYXllclNjcm9sbGFibGUpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRvd25jYXN0PFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKTsKLSAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7Ci0gICAgaW5uZXJM
YXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAgICBTY3JvbGxPZmZzZXQgc2Ny
b2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllclNjcm9sbGFi
bGUtPnNjcm9sbFdpZHRoKCksIDApOworICAgIGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxU
b09mZnNldChzY3JvbGxPZmZzZXQpOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAg
ICAgY2xvc2VTdWdnZXN0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IDY1ZWIyMDlkNGQzNy4uNWIxY2JjM2NhM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRl
ICJSZW5kZXJGcmFtZVNldC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCkBAIC0zNDEsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVu
dEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKIAog
ICAgIFJlbmRlckJveCogY3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5jbG9zaW5nQm94
OwogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlmIChSZW5kZXJM
YXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7CisgICAgICAg
IGlmIChhdXRvKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkgPyBjdXJy
ZW50RW5jbG9zaW5nQm94LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewog
ICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxh
dGZvcm1FdmVudCgpOwogICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwogICAg
ICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKQEAgLTE1NjIsNyArMTU2Myw3IEBAIE9wdGlv
bmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2Fz
dDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKICAgICAgICAg
ICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVk
SW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJl
c2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBz
b3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVy
LT5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/
IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTkxMiw5ICsxOTEzLDkgQEAgU2Nyb2xsYWJsZUFy
ZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAg
ICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5
ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBp
ZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIt
PmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDMwNThkOTFkZTY1YS4uMTU2MmM2ZjJhMTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1OTUsNyAr
MjU5NiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bGluZygpCiAgICAgaWYgKCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNW
aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiBy
ZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRn
ZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxh
eWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgICAgICAgICBBU1NFUlQo
cmVuZGVyVmlldy0+bGF5ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3Jv
bGwoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxNCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6c2Nyb2xsVG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICIgYW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byog
ZW5jbG9zaW5nTGF5ZXIgPSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
OworICAgIGlmIChlbmNsb3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgIGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCk7CisKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0
aGUgYW5jaG9yLgogICAgIC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNp
ZGUgKHRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjIsNyAr
Mzg3MCwxMSBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KGJvb2wqKSBjb25zdApAQCAtNDMyNiw4ICs0MzM4LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExh
eWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2
aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAg
aWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50
UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJz
KGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVSb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0
LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRl
bnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEz
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOTQsNyArMzk1LDggQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIs
IEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0
Mi4uNmUwZjE5MGJhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5
LDE0ICs4MTksMTUgQEAgdm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRG
b3JOb2RlKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVy
IHx8ICFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVy
TGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVj
dD4oKnJlbmRlcmVyKS5sYXllcigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
LT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUg
PSBsYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxU
eXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMpOwotICAgIGxheWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlv
bik7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAg
YXV0byBvbGRTY3JvbGxUeXBlID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgp
OworICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xs
ID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwor
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7
CiAKLSAgICBsYXllci5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMg
Y2FsbCB0aGlzPworICAgIHNjcm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1F
OiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxH
ZW9sb2NhdGlvblBlcm1pc3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCmluZGV4IGFmZDc2ZDI1NmVkMC4uMDA3OTk3ZTJiMGE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1w
b3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJS
ZW5kZXJMYXllci5oIgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lt
cG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAi
UmVuZGVyV2lkZ2V0LmgiCkBAIC03ODQsNyArNzg1LDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRl
ckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94Pigm
Ym94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRl
biBpbiB0ZXJtcyBvZiBTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAppbmRleCA3MzkzMTk2NzQ4NzUuLjQyMWIzMDc1YWYwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNw
cApAQCAtOTIsNyArOTIsNyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRl
c1Njcm9sbGluZ0Zvck92ZXJmbG93TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZQogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZXR1cm4gbGF5ZXIu
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpID8gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpIDogZmFsc2U7CiB9CiAKIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2Nyb2xsYWJsZUNvbnRhaW5lck5vZGVJRChjb25zdCBSZW5kZXJPYmplY3Qm
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhk
ODFlZjI0ODY2Li40ZGYxMTdhNDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWVudUxpc3QuaCIKQEAgLTU1Myw3ICs1NTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRB
bmRDb21taXRVcGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBm
b3IgKGF1dG8qIGJsb2NrIDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5oYXNPdmVyZmxvd0NsaXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKyAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBibG9jay0+
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91
dE92ZXJmbG93KCk7CiAgICAgfQogfQpAQCAtNTg0LDggKzU4NywxMyBAQCB2b2lkIFJlbmRlckJs
b2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT51cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmICghbGF5ZXIoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAog
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKQEAgLTExMTMsOCArMTEyMSw4IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCiAgICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0
aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8v
IHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWlu
dFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9j
a0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tn
cm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWlu
dEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNu
YXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJs
ZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZv
LnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVk
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5y
ZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAx
NSwxMiBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFp
bmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXll
cigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1
bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRl
c3QoKSBjb25zdApAQCAtMjUwMywxMCArMjUxNiwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2Vs
aW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExp
bgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRj
aGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAg
ICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2
ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0
aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9s
bFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAo
bGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5
ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkg
IT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBs
YXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290
KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFz
ZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2Nr
QmFzZWxpbmUoZGlyZWN0aW9uKTsKKyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlz
LCBkaXJlY3Rpb25dKCkgLT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJv
b3QoKSAmJiAhaXNSdWJ5UnVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+bWFycXVlZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
YWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKS54KCk7CisgICAgICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNl
bGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9j
a0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVk
RmxleGlibGVCb3goKSkgewogICAgICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhp
cyBjaGVjayBmb3IgYWxsIGJhc2VsaW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2
MWQ0MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cApAQCAtMzQ4LDcgKzM0OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmlu
c2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAo
IXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEg
aG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdp
ZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIo
KS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAg
ICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYm
IHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAg
IG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3guY3BwCmluZGV4IDMwN2Y5YjJjN2YyZi4uNTA4YTkyMzMwOWExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0
aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOCwxMSAr
MzE5LDEzIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBm
YWN0b3IgY2hhbmdlcyBhbmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5l
ZWQgdG8gYWRqdXN0IHRoYXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3Jk
aW5hdGUgc3BhY2UuCi0gICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xk
U3R5bGUgJiYgb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVa
b29tKCkpIHsKLSAgICAgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigp
LT5zY3JvbGxQb3NpdGlvbigpOwotICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdT
dHlsZS5lZmZlY3RpdmVab29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAg
ICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigp
LT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
ICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
KSB7CisgICAgICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZh
Y3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29t
KCk7CisgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb24pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5l
c3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEs
MTIgKzU3NCwxNCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQg
UmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxh
YmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9
CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6
IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYg
c2Nyb2xsYWJsZUxheWVyKSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkg
OiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0
SWZOZWVkZWQoKQpAQCAtNTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2
ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJl
bmRlcmVyKCkucGFnZSgpOwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygp
KQogICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IocGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Ny
b2xsYWJsZUxheWVyKTsKKworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxBbmltYXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5k
ZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVB
cmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIo
KS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1h
dGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRT
Y3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVy
Zmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBz
ZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQ
b3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlm
ICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+
c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODE0LDI0ICs4MjYsMzIgQEAgYm9vbCBSZW5kZXJCb3g6
OmZpeGVkRWxlbWVudExheXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFt
ZVZpZXcpIGMKIAogYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUo
KSBjb25zdAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFs
YXllcigpLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJl
dHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVM
YXllci0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZs
b3c6OkF1dG8pOwogfQogCiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxi
YXJTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSAmJiAhbGF5ZXIoKS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsK
KyAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3Jv
bGxhYmxlTGF5ZXItPmhhc092ZXJsYXlTY3JvbGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCku
b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09
IE92ZXJmbG93OjpBdXRvKTsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJX
aWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUo
KSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250
YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkg
OiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgp
ID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQog
CiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApA
QCAtODM5LDEzICs4NTksMTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9n
aWNhbFdpZHRoKCkgY29uc3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFj
YW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBs
YXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChz
Y3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFj
YW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBs
YXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHNjcm9sbGFibGVMYXllciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllci0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzcsOCBAQCBp
bnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBi
b29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBz
dG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAg
IGlmIChib3hMYXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpKSB7CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/
IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYg
KGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQp
CiAgICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTEw
LDEzIEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwg
PSBsYXllcigpOwogICAgIGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJs
ZSA9IGwtPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICAgICAgLy8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9z
aXRpb24gd2hlbiBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0Vu
ZCkuCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAg
ICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5l
RGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIp
OworICAgICAgICAgICAgc2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dp
Y2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Ny
b2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9s
bChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCks
IHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkKKyAgICAgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxU
b1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQog
ICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9s
bGVkKSB7CkBAIC05MjEsNiArOTQ1LDIwIEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0
aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5
bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5h
bWVkLiBvdmVyZmxvdzpoaWRkZW4gY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHll
dCB0aGlzIHJldHVybnMgZmFsc2UgaW4gdGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJl
UHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJv
b2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9v
bCBSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXll
cigpICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1
dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTk3LDggKzEwMzUsOCBAQCBS
ZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJj
ZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBv
aW50KHNvdXJjZSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICBzY3JvbGxhYmxlQXJl
YS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5V
c2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xs
UG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVy
biB7IDAsIDAgfTsKIAogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIo
KS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICBy
ZXR1cm4geyAwLCAwIH07CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3Np
dGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93
Q2xpcCgpIGNvbnN0CkBAIC0xNTc1LDkgKzE2MTcsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1
dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNr
Z3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigp
ICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFx
dWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0
aCk7CiB9CiAKQEAgLTE4OTQsMTAgKzE5MzcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92
ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUK
ICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVy
TGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwog
CiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlm
IChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJl
Y3QubW92ZShsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwot
ICAgICAgICBjbGlwUmVjdC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KHJlbGV2YW5jeSksIGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5
KSk7CisgICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxT
Y3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qo
c2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9s
bGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9
CiAKICAgICByZXR1cm4gY2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
aW5kZXggM2NkODBiY2QwNzJkLi5kZjBlYTFjMDcxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0
eWxlKCkuaGFzQXV0b1VzZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRp
b25zKCk7CiAgICAgfQogCisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVh
KCkgY29uc3Q7CiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1
cm5zIGZhbHNlIGZvciB0aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9w
YWdhdGVkIHRvIHRoZSByb290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggYjk4MjdjOGExNGQyLi5iYTVkY2ZhNDAzNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRl
ck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6Y29tcHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25W
aWV3cG8KICAgICAgICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3Jv
bGxpbmdBbmNlc3RvciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iu
bG9jYXRpb24oKSAtCiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3gu
Ym9yZGVyTGVmdCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAg
ICAgICAgIGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBp
bmdCb3gucGFkZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAh
PSBjb250YWluaW5nQmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxv
Y2spIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdM
YXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICAgICAgY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0g
c2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAg
ICB9CiAgICAgICAgIGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0
TG9jYXRpb24oY29udGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwog
ICAgIH0KICAgICBjb25zdHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJl
Y3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhT
dGlja3lQb3NpdGlvblZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAg
ICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0
U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGlu
Z0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9y
ZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBp
ZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAg
IHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBw
aW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9T
Y3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFz
c3VtZSB0aGF0IHx0aGlzfCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRp
dmVUb1Njcm9sbGluZ0FuZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29u
c3QKIAogICAgICAgICBGbG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBw
aW5nQm94LmxvY2FsVG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkp
LmJvdW5kaW5nQm94KCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9h
dFBvaW50KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlw
cGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9m
ZnNldDsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAg
ICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJh
ck9mZnNldCA9IDA7Ci0gICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigp
ICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBw
aW5nQm94LmxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUpOworICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAm
JiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgJiYgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAg
ICBzY3JvbGxiYXJPZmZzZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVy
dGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAg
ICAgY29uc3RyYWluaW5nUmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54
KCkgKyBzY3JvbGxiYXJPZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJu
IGNvbnN0cmFpbmluZ1JlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCA1MjQzZWExYzFiMDQuLjFmYjkwZTFjYTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTgg
TmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
Q29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVw
bGljYS5oIgpAQCAtMzA0LDQwICszMDYsMjYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1f
bm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3Qo
ZmFsc2UpCiAgICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChm
YWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2Up
CiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRl
UmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAg
ICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNv
bnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkK
ICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFz
VmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAg
ICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChm
YWxzZSkKICAgICAsIG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9o
YXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCi0gICAgLCBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3Rvcihm
YWxzZSkKICAgICAsIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9p
bnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpO
b25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9O
b3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lm
IEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQog
I2VuZGlmCkBAIC0zNjEsMTYgKzM0OSw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5k
ZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1f
dmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVD
b250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpW
aXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5l
bGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3Jv
bGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAg
ICAgICAgaWYgKHJlbmRlckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0g
ZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1f
c2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAg
IH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzgsMjkgKzM1NiwxMCBA
QCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAg
ICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ry
b3llZCgpOwogCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwot
Ci0gICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBv
c2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
LQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53
aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24p
CiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7
Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsK
ICAgICBjbGVhckxheWVyRmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJh
Y2tpbmcoKSkgewpAQCAtOTEzLDggKzg3MiwxMCBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVw
ZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gUmVuZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQog
ICAgICAgICBpZiAocGFyZW50LT5iZWhhdmVzQXNGaXhlZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVy
KCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiAhcGFyZW50LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9y
KCkpKQogICAgICAgICAgICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKIAotICAgICAgICBp
ZiAocGFyZW50LT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgICAgIGZsYWdzLmFkZChT
ZWVuQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFNj
cm9sbGFibGVMYXllciA9IHBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAg
aWYgKHBhcmVudFNjcm9sbGFibGVMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
KCkgfHwgcGFyZW50U2Nyb2xsYWJsZUxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpCisgICAgICAgICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5n
TGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcg
KzkxMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlv
dXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNl
dDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9z
aXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVk
KCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9t
ZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhp
cywgcGFyZW50KCkpOwpAQCAtOTU3LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0
CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xl
YXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRy
b2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYg
KGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRv
RmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAg
LTk2Niw3ICs5MjgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8g
YXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBs
YXllci4KICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJv
b3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5k
ZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwog
ICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAxMyw3
ICs5NzUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJH
ZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIG1faGFzVHJhbnNmb3JtZWRB
bmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW5UcmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2hh
czNEVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVk
TGF5ZXIpOwogICAgIG1fYmVoYXZlc0FzRml4ZWQgPSBmbGFncy5jb250YWlucyhTZWVuRml4ZWRM
YXllcik7Ci0gICAgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRh
aW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsK
IAogICAgIC8vIFVwZGF0ZSB0aGUgcmVmbGVjdGlvbidzIHBvc2l0aW9uIGFuZCBzaXplLgogICAg
IGlmIChtX3JlZmxlY3Rpb24pCkBAIC0xMDM2LDIwICs5OTksMTUgQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBP
cHRpb25TZXQKICAgICAgICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKICAgICB9CiAKLSAg
ICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKSkKICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIp
OwogCiAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGls
ZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0g
ICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2Ug
U2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAg
ICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAg
IG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQo
KSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVk
UG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBj
b21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5
LDI3ICsxMDg3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAg
IHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBB
U1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3Jv
bGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1z
KTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jt
cyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAg
Z2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0K
LSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9m
IHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmll
d3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dD
bGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5
TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21l
IGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTIwMiwxMiArMTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdl
b21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBz
dGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAg
ICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9v
bCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247
Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21h
cnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVl
ZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAg
IGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4
ICsxNjMxLDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9u
U2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBv
c2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJl
bmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9u
ZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVy
J3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0
U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBv
c2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVk
UGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0g
dG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRp
b24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50
LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9z
aXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zm
c2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigp
KS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpKTsKQEAgLTE3MDksMTQgKzE2NDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxh
Z3MKICAgICAgICAgQVNTRVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXll
ciA9IHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNP
dmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBh
cmVudCgpLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50
TGF5ZXJTY3JvbGxhYmxlQXJlYSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJU
KHBhcmVudExheWVyLT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNj
cm9sbGluZ1Njb3BlID0gcGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAg
ICB9CiAKLSAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Nj
b3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQog
ICAgICAgICAgICAgbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3Bl
KCk7CiAgICAgfSBlbHNlIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5
LDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmlu
Z0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVu
ZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxh
eWVyKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KCkgY29uc3QKIHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRv
Y3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVy
ZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIm
IGxheWVyKQogICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQog
Ci1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9j
a0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAog
ewotICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWlu
aW5nQmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVy
SW5Db250YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAg
ICBpZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRl
ckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwog
fQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0Zy
YW1lQm91bmRhcmllcykgY29uc3QKQEAgLTE4NzcsNyArMTgxNCw3IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5j
bHVkZVNlbGYsCiAgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1
ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4g
Y29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4
dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVC
b3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1
dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVC
b3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0Nv
bnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAo
aXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBu
ZXh0TGF5ZXI7CiAgICAgfQpAQCAtMTg4NSw1MCArMTgyMiw2IEBAIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVk
ZVNlbGYsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zv
cm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3Jv
bGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQo
KSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkg
Y29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3Zl
cmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBp
ZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5n
Tm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1
dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Ny
b2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5U
aHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjplbmNsb3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJM
YXllciogY3VyciA9IHBhcmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0Nyw2IEBAIExheW91dFNpemUg
UmVuZGVyTGF5ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0
b3JMYXllciwgQ29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3Jk
cyhhbmNlc3RvckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewot
ICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNP
dmVyZmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQot
ICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCku
c3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5n
cygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBi
b29sIFJlbmRlckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYgdG91Y2hFdmVudCkKIHsKQEAgLTI0OTYsMjg5ICsyMzc2LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2
YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYg
YmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBv
bmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNl
c0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNv
b3JkaW5hdGVkU2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGlu
dCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlz
IGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemls
bGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1s
Izg1Ni4KLSAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0
ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3Rl
ZERlbHRhID4gMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0g
MTsKLSAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVs
dGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRv
dWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IElu
dFNpemUmIGRlbHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEo
ZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBz
b3VyY2VQb2ludCkKLXsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsK
LSAgICAKLSAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBv
c2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhl
IHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQg
cHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngo
KSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAg
ICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAg
IEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0K
LSAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFk
aXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAg
ICAgIGRlbHRhLnNldFdpZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNj
cm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7
Ci0KLSAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsK
LX0KLQotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2Rl
IGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRT
aXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRl
bHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxp
bmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICBy
ZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5l
Q2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Nj
cm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zm
c2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAg
ICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNh
bid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9s
bCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3Jv
bGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxP
ZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Ny
b2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQg
b24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQg
ZG9lc24ndAotICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRo
YXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Ny
b2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1l
cyBvd25lckVsZW1lbnQ/IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17
Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0g
ICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9
IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24o
aW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgs
IG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBv
c2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQ
b3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0
ZWRTY3JvbGw6OlllcykKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihw
b3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRl
ckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJ
bnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0
aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewot
I2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICp0aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwg
cG9zaXRpb24pOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGlu
YXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xs
VHlwZSwgY2xhbXBpbmcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBy
ZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNsYW1wZWRTY3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0
YXR1cyhTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAg
IGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRD
dXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3Jv
bGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Ny
b2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlv
clN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikK
LSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5l
d1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0g
ICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQ
b3NpdGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09
IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3Np
dGlvbiA9IHBvc2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5
IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBj
bGVhciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNv
bmFibGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9s
bFdpZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBT
Y3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0
aW9uKTsKLSAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAg
ICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewot
ICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAg
ICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAg
ICBzY3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNl
dCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRY
KHNjcm9sbFhPZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlv
bkZyb21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAot
ICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxC
ZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikg
ewotICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRv
KCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVy
ZS4KLSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRv
IG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlm
IChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVD
b21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJl
bmRlclZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUg
cG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxh
eWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVw
ZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBk
YXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZp
ZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAv
LyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5
ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hl
ZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRp
bmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5n
IGxheWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9u
cyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0g
ICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9z
aXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAg
ICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZm
ZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJl
IGEgc2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEg
ZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5k
SGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0
ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFVwZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRp
Y3VsYXIgcmVnaW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJl
bmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRp
ZExheW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9
IHJlbmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhl
IGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBM
YXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVj
dHMoKSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJl
bmRlcmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7
Ci0KLSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChy
ZWN0Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRG
b3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVR
dWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigp
LmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92
ZUV2ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2Vv
bWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5n
KCktPm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1
c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWly
ZXNSZXBhaW50KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Ny
b2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCku
YWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxz
T3ZlcmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsK
LSAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0
YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFt
ZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsK
ICAgICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0
IHNjcm9sbGluZy4KQEAgLTI4MjMsNyArMjQyMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lk
CiAKICAgICBMYXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3
JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBw
YXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8g
c2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xs
QmVoYXZpb3IgYmVoYXZpb3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDMwLDggQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJl
Y3QsIGJvb2wgaW5zaWQKICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkg
eworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVB
cmVhKCk7CisKICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBs
YXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0
eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBo
aWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwpAQCAtMjg0MywyNCArMjQ0MiwxNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9v
bCBpbnNpZAogICAgICAgICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0
aXZlIHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3Zl
QnkoLUxheW91dFBvaW50KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAK
LSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkg
eworICAgICAgICBpZiAoYm94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2Rl
OiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4g
VGhlIHZpc2libGUgcmVjdAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNp
ZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFy
dCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVj
dC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAg
ICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBM
YXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94
LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJn
ZXRSZWN0VG9JbmNsdWRlU2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9z
ZVJlY3QpOwogICAgICAgICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2Uo
bGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25Y
LCBvcHRpb25zLmFsaWduWSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxP
ZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3Vu
ZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVk
U2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAg
ICAgICAgICAgYXV0byBhbmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxl
bWVudCgpLCBvcHRpb25zLmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAg
ICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3Zl
KC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRS
ZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhw
b3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAg
ICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0
aW9uKG9wdGlvbnMuYmVoYXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAg
ICAgICAgICBuZXdSZWN0ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50
TGF5ZXIpIHsKICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSBy
ZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBh
c3NlcnRpb24gZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBi
ZWluZyBkZXN0cm95ZWQuCiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJ
bk1haW5UaHJlYWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5
b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9T
RG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9
IG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnRE
b2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAg
UmVuZGVyQm94KiByZW5kZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51
bGxwdHI7CkBAIC0yOTUxLDIzICsyNTQzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVj
dFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAg
ICAgICAgcGFyZW50TGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4
ZWQsIG9wdGlvbnMpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21w
b3NpdGluZ0xheWVycygpKSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMg
Z3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVl
ZAotICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJz
IGZyb20gdGhlcmUuCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3Rv
ciA9IHN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAg
ICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAg
IGNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5
cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5
IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcu
Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVk
VXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNv
bXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6
Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNv
bnN0IExheW91dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0
LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3Qg
U2Nyb2xsQWxpZ25tZW50JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZp
ZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4OSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JS
ZXNpemluZyhtaW5pbXVtU2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9m
ZnNldCA9IExheW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZz
ZXQuaGVpZ2h0KCkgLyB6b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdp
ZHRoKC1uZXdPZmZzZXQud2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdp
ZHRoKC1hZGp1c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3
MTEsMTA5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNl
V2lkdGggKyBkaWZmZXJlbmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9
CiAKLSAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhl
aWdodCgpKSB7Ci0gICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVu
dCkpIHsKLSAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVt
ZSBleHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NTQ3PikuCi0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9y
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElu
bGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJn
aW5Cb3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9
Ci0gICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChp
c0JveFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRk
aW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0
b3I7Ci0gICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkp
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlv
dXQoKTsKLQotICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0
b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0
aGUgY3Vyc29yIGluIHZpZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXll
cjo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJ
REZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCi0gICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05v
ZGVJRCgpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5k
ZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5j
bHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVo
YXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3Jv
bGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwot
ICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJl
dHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgo
KSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWln
aHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVy
TGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJ
TkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNj
cm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0g
ICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zm
c2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9m
ZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRp
b24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0
SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVp
Z2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkg
LSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYg
KHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9m
ZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxP
ZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAg
ICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndp
ZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQot
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNB
Y3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNB
Y3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5l
clJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBz
Y3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7
Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21S
ZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0
IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwot
ICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBy
ZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQ
b2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICBy
ZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRv
Q29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVy
TGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAg
IEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZy
b21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAg
ICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBv
aW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAg
cmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUlu
dFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElu
dFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6
ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lk
dGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkp
OwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBj
b250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlz
aWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNp
emVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVD
b250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxl
U2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2Nr
PihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAg
ICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVy
OjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0
YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xs
KCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwo
KTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAg
Ly8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBo
b3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50
KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2lu
dCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZl
bnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewot
ICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJC
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMg
c2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNs
dWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
PSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05v
bk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAg
ICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigp
OwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9
IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0
KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVy
ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29s
IHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxi
YXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYm
IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlz
IHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50
U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRy
b2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVj
dCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hp
ZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0g
ICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hp
ZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgo
KSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9
IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VW
ZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgo
dmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJl
Y3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7
Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJl
Y3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZl
cnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3Qg
PSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Ny
b2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAg
ICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRD
b3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07
Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xs
Q29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikg
ewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Ny
b2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJl
Y3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9s
bGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVy
dGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hC
YXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9s
bGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
IXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNj
cm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+
c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVk
c0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQg
aW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAg
IGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFy
LmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
ci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFp
bnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2Rl
KHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJl
Y3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVj
dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5l
cikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAg
aWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3Qp
OwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5
U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhv
cml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVu
ZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkp
IHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWlu
aW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09
IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRv
d1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNj
cm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIo
cmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRl
ckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVy
ZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNN
b25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0g
ICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQp
OwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikK
LXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFy
KCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRh
dGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxi
YXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBj
b25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
c2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICho
YXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250
YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xs
RWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/
IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNp
dHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jp
em9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGlj
aXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5n
IG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAg
V2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlm
IChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJh
cikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYg
KGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9s
bGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAg
ICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiBy
ZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25z
RW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlO
b25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAg
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVs
YXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNy
ZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5k
IGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgot
ICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYg
KG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJs
ZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkK
LSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAg
ICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJl
bmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8g
RklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxI
VE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5y
ZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNs
b3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Ny
b2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVj
dCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNv
bnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Nj
cm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9s
bFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1i
b29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5h
ZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1
ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6
ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gn
LCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWls
ZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0Jh
Y2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZp
bHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBp
ZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWls
ZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwot
ICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8ICht
X3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rpbmco
KSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19
Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIK
LSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1J
bnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlD
b3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2Fs
UG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Ny
b2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJ
bnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYm
ICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0g
ICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0g
ICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwot
ICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikK
LSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJC
b3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9j
YXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBh
YnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19
Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
cmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAg
Y29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
OwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFk
IHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWln
aHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAot
ewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3Jp
dGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0K
LQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQot
TGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dS
ZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3Zl
cmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVp
Z2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAg
IGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAt
IGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91
bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xs
T3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92
ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9
IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9s
bHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
JiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0lu
dChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhh
c1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
YXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92
ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9t
YXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNj
cm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYg
KGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRh
bE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVy
dGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxi
YXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hC
YXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92
ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVy
ZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5h
YmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRv
IGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRk
ZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9
IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9y
aXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBh
dXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVw
ZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7
Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxv
dzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1
dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAg
ICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlm
IChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAg
ICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNj
cm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAg
ICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAg
ICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCku
cGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkg
JiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGli
bGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkp
OwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBz
dGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5k
VG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xs
YmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Ny
b2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+
c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0K
LSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50
KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6
OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xs
YmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0
UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlz
IGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMp
Lgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xs
T2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0K
LSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBv
ZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hh
bmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlz
SFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBh
dCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAg
ICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNo
IHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2Fy
ZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQg
ZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBp
c3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXdu
IG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250
ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4g
Zm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNj
cm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9m
ZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQg
IT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7
Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBz
ZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIGlmIChyZXNpemUg
IT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAg
aWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAg
Ly8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAg
IHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5U
b3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZh
Y3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5p
dCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8g
MF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAg
ICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVk
RWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRU
b0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOwogICAgIH0KIAotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAg
ICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQu
dXBkYXRlTGF5b3V0KCk7CiAKLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBG
SVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRv
dyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3
LgogfQogCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChj
b25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250
cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250
cm9sc1JlY3RzKCk7CiAKLSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChpczxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9y
ZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFw
cGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7
CiAKLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3Qp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJP
blRoZUxlZnQgPSByZW5kZXJCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXpl
KCkgIT0gUmVzaXplOjpOb25lOwogCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIE92ZXJmbG93Q29udHJv
bFJlY3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJT
aXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Cisg
ICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRp
b25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7
IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6
ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigp
IC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVz
aXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChoYXZlUmVzaXplcikgeworICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9s
bGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICByZXN1bHQu
cmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNr
bmVzcyB9KTsKKyAgICB9CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0
cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGlu
IHRoZSBVSSBwcm9jZXNzLgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
OwotI2VuZGlmCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5k
KCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlz
KSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkp
OwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRp
bmdPdmVybGF5Q29udHJvbHMpCi17Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2
ZSBubyBvdmVyZmxvdy4KLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVy
bGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0
cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcg
ZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzCi0gICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwg
dGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8g
dGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3Mg
dGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRo
ZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRo
YXQgdGhlIAotICAgIC8vIHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUg
UmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3Zlcmxh
eVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5l
Y2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50
byBsYXllcnMuCi0gICAgICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VS
ZWN0OwotICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAg
ICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWls
ZGVyLmFwcGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKIAotICAgICAgICBSZW5kZXJMYXllciog
cGFpbnRpbmdSb290ID0gZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAo
IXBhaW50aW5nUm9vdCkKLSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmll
dygpLmxheWVyKCk7CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290
LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBT
dHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0g
c3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hl
Y2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3
aWNlLgotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAg
ICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dDsKLQotICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdl
IG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21l
dGltZXMKLSAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAo
bW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250
YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0
IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQg
dGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkK
LSAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92
QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFp
bnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3
aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhl
IHdheSB1cCB0byB0aGUKLSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxD
b3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0g
ICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhl
IHNjcm9sbCBjb3JuZXIuCi0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRP
ZmZzZXQsIGRhbWFnZVJlY3QpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
LXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KQorSW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJ
bnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3Jv
bGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlm
ICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRh
dGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KG1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0
KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVy
bGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhp
bmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAg
ICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAg
ICBhdXRvIHJlc2l6ZUNvcm5lciA9IHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVD
b3JuZXI7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJS
ZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRy
PEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNp
emU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49
IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVy
SW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNv
cm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3Ju
ZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNp
emVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVh
UmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSBy
ZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6
ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAg
Y29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJS
ZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0Lnko
KSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0
KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAg
ICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2Uo
KnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVy
U2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0g
ICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVj
dChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUs
IGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VS
ZWN0KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gp
OworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkp
OworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1Jl
Y3QueCgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25z
dAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsK
LSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXpl
ckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsSGVpZ2h0KCk7CiAKLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMo
KSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJ
bnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJl
c2l6ZXJBYnNSZWN0KTsKLQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIg
KDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAg
IC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0
aGlzIGZyYW1lLgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8
IG1faEJhcikpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQpOwotICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAg
ICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJn
ZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwg
bGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFw
cGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVj
dChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVy
Zmxvd1JlY3QubWF4WSgpIC0gb3ZlcmZsb3dSZWN0LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAg
LTQxNzcsNDIgKzI4MjQsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250
cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJv
bHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJl
Y3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUp
IHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhp
dCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJl
c3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRl
c3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMo
bG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdl
dCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsK
LSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17
Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllcik7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0
U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVy
RmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwg
RXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRl
c3RSZXF1ZXN0TWFwIG92ZXJsYXBUZXN0UmVxdWVzdHM7CkBAIC00MjI4LDE3ICsyODM5LDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVz
dWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFy
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qs
IE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1
YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJ
bmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExh
eW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBw
YWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsK
LQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZv
aWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXND
bGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDI2MSw3ICsyODYxLDgg
QEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3Zl
cmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMg
aXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAgICAgICAvLyBjb250YWlu
aW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAgICAgICAgZm9yIChSZW5k
ZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhp
cyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAg
ICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRP
dmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
KQorICAgICAgICAgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpID8gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5z
KFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICAgICAgICAgIGlmIChsYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXll
ci0+cmVuZGVyZXIoKS5zdHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJ
c0luQ29udGFpbmluZ0Jsb2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQ2Myw3ICszMDY0LDggQEAg
Ym9vbCBSZW5kZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZl
IHRvIGRpc2FibGUgc3VicGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBz
dWJmcmFtZXMgb25jZSB3ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9s
bGluZyB0aHJlYWQuCi0gICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwg
KHJlbmRlcmVyKCkuZnJhbWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyA9IHNjcm9sbGFibGVBcmVhKCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZygpIDogZmFsc2U7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5
UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcpIHx8IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAg
IGJvb2wgaXNab29taW5nID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdl
U2NhbGVGYWN0b3IoKTsKICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRz
U2Nyb2xsQnlQYWludGluZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250
cyA9IGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMz
NjgsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChw
b3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8s
IGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092
ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3Zl
cmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAg
ICAgICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxl
QXJlYS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250
cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAg
ICAgICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1l
LCBwYWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRz
LgpAQCAtNTIzNywxMSArMzg0MSwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xp
cHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lk
IFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQo
bV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5
ZXJGcmFnbWVudHMpIHsKICAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1w
dHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQs
IGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAg
ICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91
dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlv
bigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2lu
dCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJC
b3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAg
ICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRy
dWUpOwogICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QpOwogICAgIH0KQEAgLTUyODAsNyArMzg4Niw3IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0
UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNl
Y3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52
aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAg
ICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNp
YmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRl
c3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRU
ZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU1MTEsNyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxh
eWVyKiBjb250CiAgICAgICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAg
IExheW91dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQ
b2ludCkpIHsKKyAgICBpZiAoY2FuUmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Nj
cm9sbGFibGVBcmVhLT5oaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBo
aXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsK
ICAgICB9CkBAIC01NTg2LDM1ICs0MTkyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5G
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVu
dCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0
SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50
UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90
dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1p
blhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91
bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAw
LCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAg
fQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3Qu
bWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAg
IHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNl
dEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgp
IH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9
IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVu
dCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91
bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVj
dC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNv
bnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBv
aW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBm
cmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExh
eW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2Nh
dGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91
YmxlKiB6T2Zmc2V0KQogewpAQCAtNjA3NSw5ICs0NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQogICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IHNjcm9sbGFibGVBcmVhKCk7CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Js
b2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24o
KSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmVjdC5t
b3ZlQnkoLXNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFi
bGVMYXllci0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJz
ZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlv
dXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9y
LgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3Qo
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwy
MSArNDk1NCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QK
ICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAK
LUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVy
TGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBt
X2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxw
dHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5l
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JT
Y3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dp
dGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0
CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5n
KCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTY0MTksMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRl
ckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWlu
dEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJG
bGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVy
biBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBi
b29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdM
YXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1NDcsOSAr
NTEwNywxMCBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkg
Y29uc3QKICAgICBpZiAoIWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gaGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBoYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxl
Um93KCkKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSB8fCBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBy
ZW5kZXJlcigpLmlzVGFibGVSb3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkK
ICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1ZpZGVvKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5p
c0VtYmVkZGVkT2JqZWN0KCkKQEAgLTY2NjQsNyArNTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
Omhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29u
dGVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJv
eERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAg
IHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAobV9zY3Jv
bGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwog
fQogCiBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRS
ZXF1ZXN0KiByZXF1ZXN0KSBjb25zdApAQCAtNjY3NCw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkg
Y29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUo
KS5vcGFjaXR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigp
LmlzUmVuZGVyUmVwbGFjZWQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAo
cmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9z
Y3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJl
cXVlc3QpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY5OSwzOCArNTI2MCw2IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVl
c3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMo
KnJlcXVlc3QpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZs
b3cgYXJlIGEgYm94IGNvbmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMg
aGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRv
IGRvLgotICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCku
b3ZlcmZsb3dYKCk7Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJm
bG93WSgpOwotCi0gICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFy
IHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9s
bGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpv
bnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBI
b3Jpem9udGFsU2Nyb2xsYmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0g
Ym94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5
bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxi
YXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3Jv
bGxiYXIpKTsKLSAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNj
cm9sbGJhcik7Ci0gICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9s
bGJhcik7Ci0KLSAgICAvLyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xs
YmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVu
IHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChz
ZWUgYnVnIDExOTg1KS4KLSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJh
ciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRF
bmFibGVkKHRydWUpOwotCi0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFy
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93
KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVy
TGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQogewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxG
bG93T25seSgpKTsKQEAgLTY3NTEsNiArNTI4MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxl
Q2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
CiAjZW5kaWYKICAgICB9CiAKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8g
RklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhy
b3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8g
bGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkg
ewpAQCAtNjc2MiwxOCArNTI5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAg
ICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAg
IGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2
aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAg
ICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5z
dHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5k
ZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBt
X21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21h
cnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQot
ICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5
bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXll
ciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBv
bmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5n
TGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzMTUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQog
ICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3Vz
dG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJh
cikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAg
ICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5l
clN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0
ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAg
dXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1LDk4ICs1MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0
VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkp
Ci0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25l
ci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9s
bGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRl
ZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAg
Ci0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Ny
b2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0g
ZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFk
ZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBv
c2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5
IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9s
bGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3Zl
IG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0K
LQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJl
bmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xs
YmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAg
aWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigp
LmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5k
ZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENv
cm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmlu
aXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0
U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Ny
b2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENv
cm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHls
ZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNj
cm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQ
c2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsK
LQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXpl
ciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1l
bnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBz
aG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBh
cmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXpl
cikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICgh
bV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVs
bHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRl
ckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rp
b24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMg
PSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6
ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJl
YSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
PigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAg
IH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2Uo
KQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsKQEAgLTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1f
ZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKSB7CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
PihyZW5kZXJlcigpKTsKKyAgICBpZiAoIWJveC5yZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVB
cmVhKCkpIHsKKyAgICAgICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBt
X3Njcm9sbGFibGVBcmVhLT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBt
X3Njcm9sbGFibGVBcmVhLT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRy
KTsKKyAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgbV9zY3JvbGxhYmxlQXJl
YS0+dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogewogICAgIC8vIFJlbmRlckxheWVy
RmlsdGVycyBpcyBvbmx5IHVzZWQgdG8gcmVuZGVyIHRoZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1v
ZGUsCkBAIC03MDM4LDcgKzU1MTEsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVy
Q3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVu
dCA9IGxheWVyLnBhcmVudCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJu
IGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNs
b3NpbmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNw
YXJlbnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcwNjAsNiArNTUzMywxMSBA
QCB2b2lkIFJlbmRlckxheWVyOjpzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKQogICAgIFNpbmdsZVBh
aW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciwgcGFnZSgpLmxh
c3RSZW5kZXJpbmdVcGRhdGVUaW1lc3RhbXAoKSB9OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyOjpFdmVu
dFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiByZWFzb24pCiB7CkBAIC03MjYyLDkgKzU3NDAsMTAg
QEAgc3RhdGljIHZvaWQgb3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYg
c3RyZWFtLCBjb25zdCBXZWJDb3JlOjpSZW4KICAgICAgICAgcmV0dXJuICItIjsKICAgICB9Owog
CisgICAgYm9vbCBsYXllckhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGxheWVyLnNj
cm9sbGFibGVBcmVhKCkgPyBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoKSA6IGZhbHNlOwogICAgIHN0cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRp
bmdEZXN0aW5hdGlvblN0cmluZygpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRp
bmdEZXNjZW5kYW50KCkgPyAiYyIgOiAiLSIpOwotICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgPyAicyIgOiAiLSIpOworICAgIHN0cmVhbSA8PCAo
bGF5ZXJIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPyAicyIgOiAiLSIpOwogICAgIHN0
cmVhbSA8PCAobGF5ZXIuaGFzVHJhbnNmb3JtZWRBbmNlc3RvcigpID8gInQiIDogIi0iKTsKIAog
ICAgIHN0cmVhbSA8PCAiICI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmlu
ZGV4IGExNWQ1MWJmZmY1Yy4uYmU2MTk3NWExMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdo
dCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01
MSw3ICs1Miw2IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJl
YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRy
eU1hcDsKIGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9z
aXRvcjsKIGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE7CiBjbGFzcyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNs
YXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7CkBAIC0xNDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Ny
b2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMgewogdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRf
dDsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIp
OwotY2xhc3MgUmVuZGVyTGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xh
c3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXll
cik7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckxheWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJC
YWNraW5nOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJp
ZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5k
ZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5
ZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhKCkgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5z
dXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVl
biBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wg
ZmxhZykgeyBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkZXN0cm95KCk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2Ug
ZmxhZ3MgcHJvcGFnYXRlIGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0g
Y2xhc3MgQ29tcG9zaXRpbmcgewpAQCAtNDAxLDYgKzQwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGFibGVBcmVhKCk7CisKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBsYXllciBjb250ZW50cyBu
ZWVkIHRvIGJlIHJlcGFpbnRlZC4gT25seSBoYXMgYW4gZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIg
Y29tcG9zaXRpbmcgaXMgYmVpbmcgdXNlZC4KICAgICB2b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFp
bnQoR3JhcGhpY3NMYXllcjo6U2hvdWxkQ2xpcFRvTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlw
VG9MYXllcik7CkBAIC00MTEsOCArNDIxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0g
ICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQo
KTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNv
bnN0OwpAQCAtNDMzLDEwNyArNDQxLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0g
ICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAg
aW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMg
dGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNp
dmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEg
PSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBl
ID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1w
aW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsK
IAogICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0
ZWRTY3JvbGw6Ok5vKTsKICAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNj
cm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsK
IAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9s
bFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xs
T2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNl
dFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAg
IHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQg
c2Nyb2xsVG9YT2Zmc2V0KGludCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSk7
CiAKICAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNj
cm9sbGFibGUuCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydz
IGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3Jv
bGxhYmxlQXJlYS4KICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKIAotICAgIHZvaWQg
YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZp
bmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3Jk
aW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBh
YnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVP
cHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wg
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
bik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxh
YmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsg
fQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9s
bGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVw
ZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7
IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNp
bGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkg
ZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0
ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUg
bGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRo
ZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0
aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8g
YmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0K
LSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250
cm9scygpIGNvbnN0OwogICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBs
b2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZz
ZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAot
ICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlD
b250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAg
dm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xs
KGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2
LDkgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
dHlsZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChi
b29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFz
Q29tcG9zaXRlZExheWVySW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBl
bnVtIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRM
YXllcnMsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2Rl
KSBjb25zdApAQCAtNjM4LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25z
dDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NG
cmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJl
bmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2gg
Y2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxh
eWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBA
IHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0
ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25D
b250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7
CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVy
LCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xp
cCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODUsMTEgKzcxMyw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9z
dGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9j
a1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0g
cG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9
Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVy
ZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBo
YXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04
NTksMTYgKzc4Miw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJh
Y2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQg
PSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQotICAgIHZvaWQgc2V0SGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0KICAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3Jv
bGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIu
IFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4g
Ym94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9
CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5
LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNv
b3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNv
bnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQot
ICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3Jv
bGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxi
YXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCBy
ZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3
LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93
QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVu
dGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVx
dWVudGx5KCk7IH0KIApAQCAtOTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNz
IEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2Us
IFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJl
Z2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXll
clBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAg
ICAgPSAxIDw8IDEsCkBAIC0xMDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBP
cHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAot
ICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBj
b25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRy
ZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUp
IGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVh
ckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsK
KwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29u
dGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBM
YXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZl
Qm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFs
Q29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMTAwLDY0ICsxMDAzLDEzIEBAIHByaXZh
dGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZp
bHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVy
KiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBu
dWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0g
ICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAg
Ym9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2Fs
T3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29u
c3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAotICAg
IC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRh
dGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0
aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGlu
Z05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxi
YXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVl
bEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJh
cnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkg
Y29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAg
dm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRp
ZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJy
aWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3Jv
bGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3Qg
U2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNl
dChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwo
KSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRT
dGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNDksNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQg
YSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhj
b25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUo
KTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVy
U3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZv
cm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXpl
ckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lk
IHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdE
ZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24g
cmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25z
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9CiAKLSAgICBM
YXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0Jv
dHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dD
b250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7CiAgICAg
ICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0xMjMwLDggKzEwNjksNiBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8Q29tcG9zaXRp
bmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJW
aWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBLZWVw
cyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2
ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAgYm9vbCBtX2lu
UmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsK
ICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5v
IHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hp
bGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBl
bmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJl
Zm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibGVuZCku
CiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJp
dCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29s
IG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMg
OiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNE
aXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAgICBib29sIG1f
dmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVE
ZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsK
ICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1f
YmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDggKzExMTEsNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJbiB0aGUgei1vcmRlciB0
cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6
IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIElu
IHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsK
ICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEyODgsMTcgKzEx
MjAsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
biA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0
aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzksMjUgKzExNjAsMTEgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXpl
OwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxT
aXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBv
ZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+
IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Ny
b2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFy
a2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAg
IE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGlu
Z1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAg
IAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9u
ZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQg
bV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3Np
dGlvbjsKQEAgLTEzNjcsMTAgKzExNzQsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0
ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9y
ZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAg
Ly8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVy
LgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAg
ICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9p
bnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBh
Z2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJl
bmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3OCw2ICsxMTgx
LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+
IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2Jh
Y2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1f
c2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRG
cmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiArMTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50
T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNob3dMYXllclRy
ZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEu
aXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDE2Y2Fk
ZTgwNWFhOS4uMDUxNGM5OGVjZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2luY2x1ZGUgIlJlbmRl
ckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292
ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogICAg
IFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xp
dmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1c2VNaW5pbWFs
VGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRC
YWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkp
CisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VG
b3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFj
a2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgICAg
ICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNj
cm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpA
QCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJh
Y2tpbmdDb3ZlcmFnZSgpCiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFn
ZSh0aWxlQ292ZXJhZ2UpOwogICAgIH0KIAotICAgIGlmIChtX293bmluZ0xheWVyLmhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllcikgewor
ICAgIGlmIChtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHRpbGVkQmFja2luZyA9
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT50aWxlZEJhY2tpbmcoKSkgewogICAgICAgICAgICAg
YXV0byB0aWxlQ292ZXJhZ2UgPSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSht
X293bmluZ0xheWVyKTsKICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VGlsZUNvdmVyYWdl
KHRpbGVDb3ZlcmFnZSk7CkBAIC03NzUsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogc3Rh
dGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Ny
b2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5
ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+aGFz
VHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQor
ICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgKGN1cnItPnNjcm9sbGFibGVBcmVh
KCkgJiYgY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTcyLDcgKzk3
NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0
IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdl
ZCA9IHRydWU7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9
IGZhbHNlOwotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVy
Lmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICBib29sIHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwogCiAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIElmIGl0
J3Mgc2Nyb2xsYWJsZSwgaXQgaGFzIHRvIGJlIGEgYm94LgpAQCAtMTIyNywxMCArMTIzMCwxMyBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVj
dCA9IHNuYXBwZWRHcmFwaGljc0xheWVyKGNsaXBwaW5nQm94T2Zmc2V0LCBjbGlwcGluZ0JveC5z
aXplKCksIGRldmljZVNjYWxlRmFjdG9yKCkpLm1fc25hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSB7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21w
b3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5k
cyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRS
ZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9y
UmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0
ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3Ig
PSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3Jv
bGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsK
ICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250
YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3Vu
ZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRh
aW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJC
b3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRT
aXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCks
IHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworCisg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAog
ICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5MSw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciog
Y29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5n
ZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAg
ICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQor
ICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxX
aWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNj
cm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94
T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVu
dFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJs
ZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9s
bGFibGVBcmVhKTsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+Y3VycmVudFNjcm9sbFR5cGUo
KSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBw
ZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRz
IG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0
TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBv
c2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVh
LT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zm
c2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBv
c2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29u
dGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwot
ICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9s
bGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQs
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2Vv
bWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVy
LT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlm
IChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5
LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBl
bnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmln
aW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgt
c2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjgsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxi
YXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
bV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJC
YWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3Jv
bGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDUsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVuZGVy
Qm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNj
cm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVy
dGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFy
ID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNh
bFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2
ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
OwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
QEAgLTIwNjUsMTAgKzIwOTAsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXll
cnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIs
IG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBp
ZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAg
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7
CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
ICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlk
Q2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9v
bCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhh
c1Njcm9sbGJhcnMoKSkKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3Jv
bGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2
aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiArMjEyOSwxNSBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAg
ICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAg
IGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisg
ICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsK
ICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29u
dGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxl
TGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVy
KCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMu
dmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+
dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Ny
b2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRz
TGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTE2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBo
CiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVj
dCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3Qu
bW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9M
YXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNl
dEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVu
dHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0
KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29u
dGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRD
bGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
R3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAg
ICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFp
bnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRl
eHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBAIC0zNDIwLDE3ICszNDU0LDI2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3Jh
cGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0g
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIo
bV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFp
bnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRl
eHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIo
c2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3Qp
OwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigp
KSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNj
cm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9u
KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xp
cCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigp
KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQ
b2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25p
bmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlw
KTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJ
bnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3Jt
ZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNl
dElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBjZmM0YWIxNTI4ODYuLjQ3ZTJiZTJhMzExMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBs
aWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CkBAIC0xMzk3LDcgKzEzOTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
QmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3RvcgogICAgICAgICBp
ZiAobGF5ZXJCYWNraW5nLT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNr
aW5nLT5hbmNlc3RvckNsaXBwaW5nU3RhY2soKS0+aGFzQW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAg
ICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sYXllcnNDbGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVu
ZCgmbGF5ZXIpOwogCi0gICAgICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNj
cm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgICAgIHRyYXZlcnNhbFN0YXRlLm92ZXJmbG93U2Nyb2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVy
KTsKIAogICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAg
LTIwMDEsNyArMjAwMiw3IEBAIHN0YXRpYyBBbmNlc3RvclRyYXZlcnNhbCB0cmF2ZXJzZUFuY2Vz
dG9yTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgRnVuY3RpCiAKIHN0YXRpYyBib29s
IGNyZWF0ZXNDbGlwcGluZ1Njb3BlKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICBy
ZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVy
biBsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKIH0KIAogc3RhdGljIFZlY3RvcjxMYXllck92
ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGluZ1Njb3Blcyhjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpCkBAIC0yMDA5
LDcgKzIwMTAsNyBAQCBzdGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3Vu
ZHM+IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGNvbnN0IFJlbgogICAgIFZlY3RvcjxMYXllck92
ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBjbGlwcGluZ1Njb3BlczsKICAgICBjbGlwcGluZ1Nj
b3Blcy5hcHBlbmQoeyBjb25zdF9jYXN0PFJlbmRlckxheWVyJj4ocm9vdExheWVyKSwgeyB9IH0p
OwogCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAg
ICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gY2xpcHBp
bmdTY29wZXM7CiAKICAgICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGxheWVyLCBbJl0oY29uc3Qg
UmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaW5Db250YWluaW5nQmxvY2tDaGFpbiwg
Ym9vbCkgewpAQCAtMjA0MSw3ICsyMDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmFkZFRvT3ZlcmxhcE1hcChMYXllck92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFIKICAg
ICBhdXRvIGNsaXBwaW5nU2NvcGVzID0gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMobGF5ZXIsIHJv
b3RSZW5kZXJMYXllcigpKTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxh
eWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYgKGxheWVyLnNj
cm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAgLy8gQ29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhl
IGNvbXBvc2l0ZWQgc2Nyb2xsaW5nIGFuY2VzdG9yLCB0aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIGF1dG8mIHNjcm9sbGluZ1Njb3BlID0gY2xpcHBpbmdT
Y29wZXMubGFzdCgpOwogICAgICAgICBhdXRvJiBzY29wZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUu
bGF5ZXI7CkBAIC0yODg5LDcgKzI4OTAsNyBAQCBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBwaW5nU3RhY2soYwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JM
YXllci5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAg
ICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JM
YXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoaGF2ZU5vblNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVk
aWF0ZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgq
Y3VycmVudENsaXBwZWRMYXllciwgYW5jZXN0b3JMYXllcik7CiAgICAgICAgICAgICAgICAgICAg
IGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllciA9IGZhbHNlOwpAQCAt
MjkzMyw3ICsyOTM0LDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmQKIAogICAgIFNjcm9sbGlu
Z05vZGVJRCBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIHRyYXZlcnNlQW5jZXN0
b3JMYXllcnMoKmVuY2xvc2luZ0xheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9y
TGF5ZXIsIGJvb2wgaXNDb250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCAvKmlzUGFpbnRPcmRlckFu
Y2VzdG9yKi8pIHsKLSAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0
b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYg
KGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgp
ICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBs
YXllclNjcm9sbGluZ05vZGVJRChhbmNlc3RvckxheWVyKTsKICAgICAgICAgICAgIHJldHVybiBB
bmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAgICAgfQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlv
bihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAg
aWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5z
Y3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5jYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChxdWVyeURh
dGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMy
NTIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
ck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRlcgogICAgICAgICByZXR1cm4gbGF5ZXIuaXND
b21wb3NpdGVkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogfQogCiBJbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdS
ZWFzb24oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5k
YW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIGJvb2wgcGFpbnRzSW50b1By
b3ZpZGVkQmFja2luZykgY29uc3QKQEAgLTMyNzMsNyArMzI3NCw3IEBAIEluZGlyZWN0Q29tcG9z
aXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvCiAgICAgfQogCiAgICAgLy8gSWYgdGhpcyBsYXllciBzY3JvbGxzIGluZGVwZW5k
ZW50bHkgZnJvbSB0aGUgbGF5ZXIgdGhhdCBpdCB3b3VsZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0
byBnZXQgY29tcG9zaXRlZC4KLSAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYg
bGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKKyAgICBpZiAoIXBhaW50
c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAg
ICAgICBhdXRvKiBwYWludERlc3RpbmF0aW9uID0gbGF5ZXIucGFpbnRPcmRlclBhcmVudCgpOwog
ICAgICAgICBpZiAocGFpbnREZXN0aW5hdGlvbiAmJiBsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxh
dGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGxheWVyLCAqcGFpbnREZXN0aW5hdGlvbikgIT0gU2Ny
b2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBJbmRpcmVj
dENvbXBvc2l0aW5nUmVhc29uOjpPdmVyZmxvd1Njcm9sbFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3
ICszMzExLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxl
U3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWUKIAogICAgIGF1dG8qIGVuY2xvc2lu
Z092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRl
U2VsZik7CiAKLSAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVy
Zmxvd0xheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAo
ZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5zY3JvbGxh
YmxlQXJlYSgpICYmIGVuY2xvc2luZ092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPmhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoZW5jbG9zaW5n
QWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQogICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJh
dGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMzM0Miw3ICszMzQzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBSZW5kZXIKIAog
ICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNmb3JtLCB3aGljaCBz
aG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5
ZXIucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewot
ICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgaWYgKGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4
dCgpICYmIGFuY2VzdG9yLT5pc0NvbXBvc2l0ZWQoKSAmJiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5p
c0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4
ICszMzk0LDEwIEBAIHN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9s
bGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGFuY2VzdG9y
TGF5ZXIgPT0gJmludGVybWVkaWF0ZUxheWVyKQogICAgICAgICAgICAgc2F3SW50ZXJtZWRpYXRl
TGF5ZXIgPSB0cnVlOwogCi0gICAgICAgIGlmIChhbmNlc3RvckxheWVyLT5oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KGFuY2VzdG9yTGF5ZXIpOworICAgICAgICBpZiAoYXV0byogYW5jZXN0b3JMYXll
clNjcm9sbGFibGVBcmVhID0gYW5jZXN0b3JMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAg
ICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJl
bmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7CisgICAgICAgIH0KIAogICAgICAgICBhbmNlc3Rv
ckxheWVyID0gYW5jZXN0b3JMYXllci0+cGFyZW50KCk7CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3
LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLAogCiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9y
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0Nv
bXBvc2l0ZWRBbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxh
eWVyJiBjb21wb3NpdGVkQW5jZXN0b3IpCiB7Ci0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwg
IWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcigp
KQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAg
IGJvb2wgY29tcG9zaXRlZEFuY2VzdG9ySXNJbnNpZGVTY3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0
Myw3ICszNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRP
dmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGlzQ29u
dGFpbmluZ0Jsb2NrQ2hhaW4gJiYgaXNQYWludE9yZGVyQW5jZXN0b3IpCiAgICAgICAgICAgICBy
ZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0b3A7CiAKLSAgICAgICAgaWYgKHNlZW5QYWludE9y
ZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChzZWVuUGFpbnRP
cmRlckFuY2VzdG9yICYmICFpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIGFwcGVuZE92ZXJmbG93
TGF5ZXJOb2RlSUQoYW5jZXN0b3JMYXllcik7CiAKICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJh
dmVyc2FsOjpDb250aW51ZTsKQEAgLTM0NTgsNyArMzQ2MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5n
QmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlv
bmluZ0ZvCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkKICAg
ICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAgICAgCi0gICAg
aWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxh
eWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25p
bmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhp
cy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKQEAgLTQ0NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGlu
Z05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVy
TGF5ZXImIGxheWVyLCBTCiAgICAgICAgIG1fY2xpcExheWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQo
bm9kZUlEKTsKICNlbmRpZgogCi0gICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9k
ZUlELCBtYWtlV2Vha1B0cihsYXllcikpOworICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJl
YSgpKTsKKyAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFr
UHRyKCpsYXllci5zY3JvbGxhYmxlQXJlYSgpKSk7CiAKICAgICByZXR1cm4gbm9kZUlEOwogfQpA
QCAtNDQ3NSw4ICs0NDc5LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNj
cm9sbENvb3JkaW5hdGVkTGF5ZXJXaXRoUm9sZShSZW5kZXJMYXllciYgbGEKICAgICBhdXRvIHVu
cmVnaXN0ZXJOb2RlID0gWyZdKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsKICAgICAgICAgYXV0
byBjaGlsZE5vZGVzID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlE
KTsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkTm9kZUlEIDogY2hpbGROb2RlcykgewotICAgICAg
ICAgICAgaWYgKGF1dG8gd2Vha0xheWVyID0gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQo
Y2hpbGROb2RlSUQpKQotICAgICAgICAgICAgICAgIHdlYWtMYXllci0+c2V0TmVlZHNTY3JvbGxp
bmdUcmVlVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAoYXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEg
PSBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCisgICAgICAgICAg
ICAgICAgd2Vha1Njcm9sbGFibGVBcmVhLT5sYXllcigpLnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVw
ZGF0ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5y
ZW1vdmUobm9kZUlEKTsKQEAgLTQ2NTcsOCArNDY2MSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJh
aW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Ny
b2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciog
YW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVk
cyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0g
ICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExh
eW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikg
eworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNp
emUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0KIAogICAg
IExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIu
cmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0Njg1LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQs
IFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCks
IHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
fSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworCiAgICAg
ICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIo
KSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwg
bGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xs
YWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0
NzMwLDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNj
cm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9s
bGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsK
IAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJH
ZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05v
ZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VG
bGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAg
ICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3
Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gbmV3Tm9kZUlEOwpAQCAtNTAzNSwxMSArNTA0NywxNCBAQCB2b2lkIExlZ2FjeVdl
YktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRl
ckxheWVyJiBsYQogICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNT
RVJUKGJhY2tpbmcpOwogCi0gICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVy
dGljYWxTY3JvbGxiYXIgPSAhbGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Ny
b2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKTsKKyAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50
LmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJh
Y2tpbmctPnNjcm9sbENvbnRhaW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+
c2Nyb2xsZWRDb250ZW50c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIu
cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBh
bGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVy
dGljYWxTY3JvbGxiYXIpOwogfQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjMTUxZTIzZDBlZjYu
LjJjZDcxY2I4ZjNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KIApAQCAtNjM1LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgQ29sb3IgbV92aWV3QmFja2dy
b3VuZENvbG9yOwogICAgIENvbG9yIG1fcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogCi0g
ICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVuZGVyTGF5ZXI+PiBtX3Njcm9s
bGluZ05vZGVUb0xheWVyTWFwOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBXZWFrUHRy
PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwOwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExlZ2FjeVdlYktp
dFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I+IG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGlu
YXRvcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDA1MmE5Yzc1ZTYzNS4uYzdmYzY2YzcwMTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCkBAIC0xNzYsOCArMTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBz
Y3JvbGxTbmFwQ29udGFpbmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUs
IG5ld1N0eWxlKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5
ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0g
ICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAg
ICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zm
c2V0cygpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJl
bmRlcmVyKCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZy
YW1lVmlldygpOwogICAgICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBA
IC0xOTUsOCArMTk2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNj
cm9sbFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0
cmljdG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigp
LT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxh
eWVyKCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBP
ZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxT
bmFwU3RhdGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkg
fHwgc2Nyb2xsU25hcEJveC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVmM2VhYTBj
Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0wLDAgKzEsMTg0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKKyAgICA6IG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAs
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorICAgICwgbV9oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coZmFsc2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKKyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhmYWxzZSkKKyAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCisgICAgLCBt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldChmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIp
Cit7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsK
KyNlbmRpZgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQor
ICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbik7CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
IGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVB
cmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVy
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3Np
dGlvbigpCit7CisgICAgYXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50
KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXll
ci5yZW5kZXJCb3goKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhl
IHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVk
LgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBv
c2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKKyAgICAg
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24pOworICAgIH0KKworICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGlu
ZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBp
ZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hF
dmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVy
LmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkg
fHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLnJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNm
b3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblBy
b2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9s
bGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKK30KKworLy8gRklYTUU6IHRoaXMg
aXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5jb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xh
eWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAg
IGlmICghcG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBT
Y3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9
IGZhbHNlOworICAgIH0KKworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRp
b24udmFsdWUoKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
blNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNj
cm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Ny
b2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNj
cm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVk
QmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25O
YXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9u
cygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+
c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3Jv
bGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShz
Y3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNj
cm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xs
VHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sK
KyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3
U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFt
cFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRp
b24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlm
IChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsK
KworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxU
byAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMg
dXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2Vy
KSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Ig
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNv
ZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVt
b3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhP
ZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0
aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBj
YXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsK
KyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09m
ZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0
aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTog
Tm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQg
cG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhy
ZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZp
ZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMg
KGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBz
Y3JvbGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1
c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2Vz
dG9yLgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRl
clRyZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxh
eW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4K
KyAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwor
CisgICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAg
Ly8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0
YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlv
bnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10
by1kYXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Un
cmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRp
bmcgbGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAg
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAg
ICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEg
Y29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIp
LAorICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0
aGUgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJl
bnQgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWlu
dFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9u
cywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4K
KyAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50
UmVnaW9ucygpOworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVy
LmZyYW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
LmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBi
ZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9
IHJlbmRlcmVyLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91
dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50
Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENv
bnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
KyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25J
blF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVw
YWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAg
ICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
bV9sYXllci5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7CisgICAgICAgIHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVk
c1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVk
dWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWlu
dCkKKyAgICAgICAgcmVuZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIHJlY3RGb3JSZXBhaW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNj
cm9sbC1yZWxhdGVkIERPTSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Nj
cm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkK
KyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAg
IHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkK
K3sKKyAgICBpZiAobV9sYXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5
ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVk
IHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAg
IC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVy
ZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXll
ci5zdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAg
ICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBt
X2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0
byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3Jv
bGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFu
dHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAg
ICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgp
KTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0
ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFt
X21hcnF1ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRv
IHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisg
ICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247CisgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJx
dWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhh
dmlvcjo6Tm9uZSAmJiByZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVl
KQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9s
YXllcik7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
Ym9vbCBpc1Zpc2libGUgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dT
Y3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092
ZXJmbG93KCkgJiYgIW1fbGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQor
ICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0
eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCku
YWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2xheWVyLmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2xheWVyLmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxD
b29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkg
eworICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9s
bGluZ05vZGVJRCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKK30KKworSW50UmVj
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBW
aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJh
clNwYWNlOworICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNs
dXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Ny
b2xsYmFySW50cnVzaW9uKCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJs
ZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZp
c2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwg
dmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50KCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJh
bmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4
aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4K
KyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAg
ICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFj
aGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3Jv
bGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkp
KTsKKworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRX
aWR0aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRo
KCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVX
aWR0aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJl
dGNoOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJlY3QpOworfQorCitJ
bnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRSZWN0KTsK
KyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4g
cmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQ
b2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0Nv
bnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5t
b3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplKCkgY29uc3QK
K3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFi
b3gpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShyb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVp
Z2h0KCkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJs
ZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9
IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250
ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRI
ZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdo
dCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXpl
Q2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246
OlNjcm9sbGJhcnNDaGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91
bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRz
TGF5b3V0KCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1l
VmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNj
cm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRP
dmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRp
ZEVuZFNjcm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
RW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpkaWRVcGRhdGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hl
biB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQu
CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNs
aWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9s
UmVjdHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkg
Y29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBB
U1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lk
ZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1Jl
Y3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3Jv
bGxiYXIoKSk7CisKKyAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIg
PyBtX2hCYXItPmhlaWdodCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
PSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07
CisKKyAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3Zl
cmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAg
IGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVy
ZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJz
QXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVO
b25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxi
YXIpKTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0
aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAg
ICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
OiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5z
aGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsK
KyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5z
aGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0
aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFy
UmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0
aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFy
UmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFy
UmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQu
dmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVj
dCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVm
dENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAg
fTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3Jv
bGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVy
KSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUs
IHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Cisg
ICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWlu
dFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Cisg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29y
bmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAg
IG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Ny
b2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4g
c2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxT
Y3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1l
bnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2Rl
KCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcik7CisgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRl
ckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVy
ZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAg
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBh
Z2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRk
Q2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNj
cm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBt
X3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
c2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xs
YmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAg
ICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3Jv
bGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFz
VmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9s
bGJhcikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxi
YXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0
eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9s
bGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0
ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1
cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXll
ciA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAg
ICBpZiAobmV4dExheWVyLT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVC
b3goKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAorewor
ICAgIGlmICghbV92QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAg
ICAgICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53
aWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9s
cygpCisgICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFu
Y3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGlj
aXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2hCYXItPmhlaWdodCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFy
IHx8IG1fc2Nyb2xsQ29ybmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpw
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7
CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBpZiAobV92QmFyKSB7CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zm
c2V0RnJvbVJvb3QpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXIt
PnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBp
ZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3Qo
cmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVz
aXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKworTGF5
b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0
Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5tYXhZKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3Zl
cmZsb3dMZWZ0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9
IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAg
UmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOwor
CisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsV2lk
dGggPSByb3VuZFRvSW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAgICBt
X3Njcm9sbEhlaWdodCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9w
KCkpOworCisgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJm
bG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZs
b3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3Zl
cmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAg
ICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3Jv
bGxhYmxlVG9wT3ZlcmZsb3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
JiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Ny
b2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVy
ZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisK
KyAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94
KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9s
bGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMp
Cit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9u
OjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxv
d1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0g
T3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9s
bGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7
CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNT
Y3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBh
eGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3Zl
cmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93
ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpT
Y3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFy
cygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9s
YXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBh
cnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFy
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0
aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZs
b3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyBy
ZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2Fi
bGUuCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKG1f
aEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92
ZXJmbG93KTsKKyAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVy
ZXIuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJs
ZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBi
ZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVk
IG9yIHJlbW92ZWQuCisgICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6
b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0
b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxP
dmVyZmxvdyk7CisKKyAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpv
bnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+
aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBtX2xh
eWVyLnVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVwYWlu
dCgpOworCisgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJm
bG93OjpBdXRvIHx8IHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1
dG8pIHsKKyAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAg
ICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVu
ZGVyZXIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAgICAg
ICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJh
ckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAg
ICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9p
bk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAgICAg
IGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNCb3go
KSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVh
ckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0KKwor
ICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBp
ZiAobV9oQmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3Rl
cChjbGllbnRXaWR0aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVp
Z2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgbV9zY3JvbGxIZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29k
ZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gq
IGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxPZmZz
ZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigp
OworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRo
YXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxl
IGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94
LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8g
YmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisg
ICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3Ig
cHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNj
cm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhl
IGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxh
dGVkIGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXgg
YW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBk
cmF3biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2Ug
Y29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3
OTc+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3Jv
bGxPZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRp
b25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
KQorICAgICAgICBtX2xheWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7
CisKKyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOworCisgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2Nh
bFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBj
b25zdAoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Ny
b2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNPdmVy
Zmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29u
dHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBh
aW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkg
d2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMg
dGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8v
IHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRo
YXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBw
YWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVy
IHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVu
LiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8vIHNl
Y29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQg
aXQgcmlnaHQuCisgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9
IHBhaW50T2Zmc2V0OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUg
c2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAg
IGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFy
ICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2Nh
bERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAg
ICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hl
Y2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3
aWNlLgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAg
ICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dDsKKworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ug
bm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0
aW1lcworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nICht
b3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRh
aW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQg
d2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0
aGVtLgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQor
ICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZC
YXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWlu
dChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdp
dGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUg
d2F5IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8v
IFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3Jv
bGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWlu
dFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFi
c1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewor
ICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYg
d2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUg
d2hhdCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAg
ICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBh
YnNSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZv
cm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZXNpemVyQ29ybmVyUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0
U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElt
YWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNv
cm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXpl
clNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVy
U2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVz
aXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJl
Y3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgp
ICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAg
ICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgq
cmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJT
aXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZs
b2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVz
aXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3Ju
ZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6
Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNp
emVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFy
ZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBh
aW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisg
ICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYg
dGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBl
eGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYg
KCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAg
IGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2Vy
Q29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExh
eW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0
KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhf
dD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNv
cm5lcikpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIu
Y2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRl
cmVyLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0
cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxD
b3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJh
ciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAg
ICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAg
cmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5p
c0FjdGl2ZSgpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5y
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVs
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXllci5yZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBI
VE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4obV9sYXllci5lbmNsb3NpbmdF
bGVtZW50KCkpIHx8ICFtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5lbmNsb3NpbmdF
bGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVy
LnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdD
b29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5p
bWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxB
bmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5
U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXI6OkxheWVy
UGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbygmbV9sYXllciwgZW5jbG9zaW5nSW50UmVjdChkYW1h
Z2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsK
KyAgICBtX2xheWVyLnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBSZW5kZXJMYXll
cjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0
TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYg
KGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byBib3JkZXJCb3hS
ZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuYm9yZGVy
Qm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisK
KyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdt
ZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJ
bnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0
LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1h
eFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhY
TWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgp
LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVy
RnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVy
RnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8g
cmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJl
Y3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNp
emVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgp
KSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0
TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFj
a2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5n
TWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxv
dygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0
LgorICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBz
Y3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlm
IChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1
cm47CisKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7
CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisg
ICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJM
YXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFs
cmVhZHkgcHJlc2VudC4KKyAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
IHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSk7CisgICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGlj
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBX
aXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZp
c2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90
aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAg
ICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBv
bGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0g
T3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisg
ICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9s
ZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBP
dmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAg
ICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJs
ZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNpYmxlVG9I
aXRUZXN0ID0gcmVuZGVyZXIudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkp
CisgICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25l
ci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9s
bGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRl
ZE9yUmVtb3ZlZCA9IGZhbHNlOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlm
IChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
KSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOwor
ICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVt
b3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRo
ZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNv
IGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2
ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1l
bnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAg
IGF1dG8gY29ybmVyID0gcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJl
ci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwg
JmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikg
eworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdU
Rk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUg
YSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50
KCZyZW5kZXJlcik7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNv
cm5lcikpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xs
Q29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5l
ciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
UmVzaXplclN0eWxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xs
YmFyKHJlbmRlcmVyKTsKKyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0Ns
aXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6
OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBp
ZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZN
b3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBh
IGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5k
ZXJlcik7CisgICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYg
KCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChu
dWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpCit7CisgICAg
aWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92
QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7CisgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cit9CisKKyNpZiBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAg
Ly8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJl
IGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVu
dCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cjsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7
CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxz
ZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworLy8gRklYTUU6IHRo
aXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLmlzQ29tcG9zaXRlZCgpICYmIG1fbGF5ZXIuYmFja2luZygpLT5oYXNT
Y3JvbGxpbmdMYXllcigpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERl
bHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRj
aGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291
cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBp
bnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmlu
Z0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAg
ICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQo
c3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChh
ZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVs
dGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQorewor
ICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJj
ZVBvaW50KQoreworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBtX2xheWVy
LnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9u
KCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBv
c2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhl
IHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQg
cHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngo
KSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAg
ICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAg
IEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisK
KyAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFk
aXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAg
ICAgIGRlbHRhLnNldFdpZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNj
cm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7
CisKKyAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsK
K30KKworT3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU2Nyb2xsUG9zaXRpb24oU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IsIGNvbnN0IExheW91dFJl
Y3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAg
ICBBU1NFUlQobV9sYXllci5hbGxvd3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgYXV0
byBzaG91bGRVc2VBbmltYXRlZFNjcm9sbCA9IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3Jv
bGxCZWhhdmlvciBiZWhhdmlvcikKKyAgICB7CisgICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3Jv
bGxpbmcgPSAhbV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Nj
cm9sbEluUHJvZ3Jlc3MoKQorICAgICAgICAgICAgJiYgZWxlbWVudCAmJiB1c2VTbW9vdGhTY3Jv
bGxpbmcoYmVoYXZpb3IsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdXNlQW5pbWF0ZWRTY3Jv
bGxpbmcgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgIH07
CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3Qp
LmxvY2F0aW9uKCkpKTsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxkVXNl
QW5pbWF0ZWRTY3JvbGwoYm94LT5lbGVtZW50KCksIGJlaGF2aW9yKTsKKyAgICAgICAgc2V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
LCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmlt
YXRlZCk7CisgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRT
Y3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7CisKKyAgICAgICAgYXV0byBsb2NhbEV4cG9z
ZVJlY3RTY3JvbGxlZCA9IGxvY2FsRXhwb3NlUmVjdDsKKyAgICAgICAgbG9jYWxFeHBvc2VSZWN0
U2Nyb2xsZWQubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxv
Y2FsRXhwb3NlUmVjdFNjcm9sbGVkKSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwg
U2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChy
ZW5kZXJlci5wYXJlbnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRl
cmVyLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJl
bmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVs
dGE7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAg
ICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0
IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5p
bmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIucGFyZW50
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVz
LgorICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IG1fbGF5
ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJlbmRlcmVyLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRl
QXV0b3Njcm9sbFJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBi
ZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZl
IGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2Rl
IHRoYXQgY2FuIGJlIHNjcm9sbGVkLgorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuc2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAg
ICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2Fu
dCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpCit7CisgICAgQVNTRVJUKCZtX2xheWVyID09IG1fbGF5ZXIucmVu
ZGVyZXIoKS52aWV3KCkubGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
Iik7CisKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsK
KyAgICBtX2xheWVyLnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFw
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21l
dHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIGlmICgmbV9sYXllciAhPSBtX2xheWVyLnJlbmRl
cmVyKCkudmlldygpLmxheWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1Rv
QW5jZXN0b3IobV9sYXllci5wYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5
IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3Jk
ZXIgdG8KKyAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIG1f
bGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIFJlbmRl
ckxheWVyOjpJc092ZXJmbG93U2Nyb2xsKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgbV9sYXllci5yZW5kZXJlcigp
LmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3Nh
Z2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOworfQorCitTdHJpbmcg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIuZGVidWdEZXNjcmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmIzMzBlNDM5YTliYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBM
Iikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91
bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwi
KSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJl
CisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUg
dGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQ
TCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxl
dGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
IGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEws
IGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlck1hcnF1ZWU7
CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgZmluYWwgOiBwdWJsaWMgU2Nyb2xs
YWJsZUFyZWEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4
cGxpY2l0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImKTsKKyAgICB2aXJ0
dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBSZW5kZXJMYXllciYgbGF5
ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9CisKKyAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9CisgICAgdm9pZCB1cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKKyAgICB2b2lkIGNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKworICAgIHZv
aWQgc3RvcmVTY3JvbGxQb3NpdGlvbigpOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNl
bmRpZgorCisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Ny
b2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZO
ZWVkZWQoKTsKKworICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxI
ZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBv
aW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNj
cm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3Qg
SW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpOworCisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0
ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRp
b24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmlt
YXRlZFNjcm9sbDo6Tm8pOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVl
LgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9s
bE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQo
aW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwg
eSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
IH0KKworICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0
IHsgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9
CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpv
bnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
KTsKKworICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2
b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVz
UmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVl
IHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9v
ayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAg
Ym9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMg
bGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdzsgfQorCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092
ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBo
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAg
ICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZv
aWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxi
YXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVs
bHB0cik7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEpOworCitwdWJsaWM6CisgICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0
aW9uIG92ZXJyaWRlIFNjcm9sbGFibGVhQXJlYSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBh
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmlu
YWw7CisKKyAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBm
aW5hbDsKKworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5n
ZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBm
aW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9m
ZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQg
ZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJM
YXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2li
bGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAg
IFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIElu
dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVk
ZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Cisg
ICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFu
ZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5h
bDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3Jp
cHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNp
emUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xs
VHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQpIGZpbmFsOworCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQor
ICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
ID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisKKyAgICBib29sIGNvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsK
KyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAgdm9pZCB1cGRhdGVBbGxTY3JvbGxiYXJS
ZWxhdGVkU3R5bGUoKTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAg
IExheW91dFVuaXQgb3ZlcmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93
Qm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpP
dmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNv
bnN0OworCisgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7CisKKyAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAg
Ly8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0
U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25z
dCBTY3JvbGxQb3NpdGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFy
JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3Zl
cmZsb3cpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3Zl
cmZsb3dTY3JvbGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpOworCisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRp
b24oU2Nyb2xsQmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZzsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTY3Jv
bGxDb3JuZXJTdHlsZSgpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKK3ByaXZh
dGU6CisgICAgLy8gTWluaW11bSBwYWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1f
c2Nyb2xsSGVpZ2h0KQorICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAg
IGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEgOiAxOworICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IgOiAxOyAvLyBJbiB0aGUgbGF5ZXItb3JkZXIgdHJlZS4KKyAgICBib29sIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gOiAxOworICAgIGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOwor
CisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQg
bV9zY3JvbGxXaWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXll
ciYgbV9sYXllcjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNj
cm9sbFBvc2l0aW9uIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxh
eWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisK
KyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBS
ZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisg
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJl
bmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlLi41MjIwMjU5YmVlYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVB
cmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAg
aWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXIt
PmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6
OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wg
UmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyAr
ODk3LDEwIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSgpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3RvcigpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5
ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJv
dW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5Ni4uOWE0ODFhOTdhZjA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRl
ck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXll
cihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVk
KQogewotICAgIGxheWVyLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxz
ZSk7CisgICAgQVNTRVJUKGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Ny
b2xsYWJsZUFyZWEoKS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OwogfQogCiBSZW5kZXJNYXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3
Myw5ICsxNzQsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9z
dXNwZW5kZWQgJiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwg
MCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChT
Y3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5
ZXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0
YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBt
X3N0b3BwZWQgPSBmYWxzZTsKQEAgLTI0NCwxMiArMjQ1LDE1IEBAIHZvaWQgUmVuZGVyTWFycXVl
ZTo6dGltZXJGaXJlZCgpCiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRz
TGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5
ZXIpOworCiAgICAgaWYgKG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hP
ZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9m
ZnNldChtX3N0YXJ0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xs
VG9ZT2Zmc2V0KG1fc3RhcnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxU
b1lPZmZzZXQobV9zdGFydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIs
NyArMjc2LDcgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9v
bCBwb3NpdGl2ZSA9IHJhbmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jp
em9udGFsKCkgPyByb3VuZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
KSA6IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAg
ICAgICAgIGludCBpbmNyZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAg
ICBpbnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNl
dCgpLngoKSA6IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJy
ZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQo
KS54KCkgOiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5l
d1BvcyA9ICBjdXJyZW50UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1l
bnQpOwogICAgICAgICBpZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1p
bihuZXdQb3MsIGVuZFBvaW50KTsKQEAgLTI4OSw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlck1hcnF1
ZWU6OnRpbWVyRmlyZWQoKQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0g
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9s
YXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0
Li4xMTA1MTE3MjNhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xMDAxLDcgKzEwMDEsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVj
dDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGlj
IHZvaWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAg
c3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTils
aW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9h
dGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5
ZXIsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAg
c3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0Zp
KFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBB
bm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxl
QXJlYSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAg
ICBzdHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNSwxMCArMTExNSwxNCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBt
YXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAg
aWYgKGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8
ICJMIjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwog
CiAgICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uMDExMzg0
MWU2YzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAs
NiArMTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyQmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0
aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2Fs
bHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKaW5kZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTM5NywxOSArMzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVs
ZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQm
IHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0
byogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9
IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xs
YWJsZSA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVy
U2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAm
JiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50
LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYm
IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9s
bGFibGUgPSBsYXllciA/IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5z
Y3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJl
bmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggN2MwMWYwMjBmZTgyLi5mNTg4ZTg2OWUwNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpA
QCAtNjAwLDE0ICs2MDEsMTYgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAg
ICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAo
bGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIg
PDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0
aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5y
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVh
KCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngo
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAg
dHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsK
KyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWln
aHQoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwogICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5
ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyV2lkZ2V0LmNwcAppbmRleCBiMTAzM2RhMDc5MzAuLjY5MWU3NTU4N2Y2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMzMiw4ICszMzMs
MTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCku
ZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNh
blJlc2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRl
eHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVj
dCk7CisgICAgaWYgKGxheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpIHsKKyAgICAgICAg
QVNTRVJUKGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZElu
dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgfQogfQog
CiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBw
ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWQ2MzdmZjQ0Zjk2Li5m
ZTVjZTQwNTk2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2
ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCkBAIC0xODMzLDcgKzE4MzQsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91Ygog
ICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94Lmxh
eWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg1NCw4
ICsyODU2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3Jv
bGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVu
ZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRv
d25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlw
ZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA1YzQ5OTNiYWUwMjgu
LmI5NjhhZmExZGNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEu
Y29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXll
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1
bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5n
L292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFt
bGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5
ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcv
b3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3Rpbmcu
CisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQg
c2V0U2Nyb2xsWE9mZnNldDpzY3JvbGxZT2Zmc2V0OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxE
T01SYW5nZVRvVmlzaWJsZTpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdl
VG9WaXNpYmxlOndpdGhJbnNldDpdKToKKwogMjAyMC0xMS0yMSAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYW4gRXhwZXJpbWVudGFsIEZlYXR1
cmVzIGZvciB3aGVlbCBldmVudCBnZXN0dXJlcyBiZWNvbWluZyBub24tYmxvY2tpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5kZXggODU4NGMyMzFmZWY4Li41Y2M1ZjA1
NjNiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCkBAIC01Myw2ICs1
Myw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV0FLV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJl
YWRNZXNzYWdlLmg+CiAjZW5kaWYKQEAgLTExMSwxMSArMTEyLDE0IEBAIC0gKHZvaWQpc2V0U2Ny
b2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9mZnNldDooaW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6
KEJPT0wpYWRqCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikK
KyAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotICAg
IGxheWVyLT5zY3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNv
cmU6OlNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVu
Y2xhbXBlZCk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQo
V2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIGlmIChhZGp1
c3RGb3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIH0KIAogLSAodm9pZClhYnNvbHV0ZVBvc2l0aW9u
OihpbnQgKil4IDooaW50ICopeSA6KGludCAqKXcgOihpbnQgKiloCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzZmVhMTYwODM5MmYuLjEyZDE1OWVj
OGZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBA
IC05NSw2ICs5NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAg
QEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICNl
bHNlCiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3Np
bmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RU
b1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhl
ZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Ny
b2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgIF9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAg
ICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNl
KCk7CiAgICAgICAgIH0KQEAgLTc1OCw5ICs3NjAsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFu
Z2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAg
ICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0
byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAg
ICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAg
ICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3Jl
OjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNl
bGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGln
blRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZO
ZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwot
ICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxz
ZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyhmYWxzZSk7CiAKICAgICAgICAgICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShz
ZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZwppbmRleCA2MjM2YTExYmYyOTYuLjU4ZGRlMDVkNzA0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1h
bm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGlu
ZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBPdmVyaGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwg
aXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBv
ZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBt
YWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAg
ICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBz
cXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAg
ICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIwLTExLTE5ICBGdWppaSBIaXJvbm9yaSAgPEhp
cm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtUZXh0dXJlTWFwcGVyXSBSZW1vdmUg
bV90ZXh0dXJlTWFwcGVyIGZyb20gVGV4dHVyZU1hcHBlckxheWVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuY3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4uMmZkY2Y5ZjljYjk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9Qb3B1cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1l
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIwNDksMTAgQEAgYm9vbCBXZWJWaWV3Ojpn
ZXN0dXJlKFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBt
aWdodCBkaXJlY3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMK
ICAgICAgICAgICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVs
dGEpOwogICAgICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2
ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsK
KyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsQnlS
ZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3JvbGxlZEFyZWEpOworICAgICAgICB9
CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgQmVnaW5QYW5u
aW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkpIHsKICAgICAgICAg
ICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxlKTsK
</data>
<flag name="commit-queue"
          id="431877"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414900</attachid>
            <date>2020-11-26 06:27:20 -0800</date>
            <delta_ts>2020-11-26 06:47:20 -0800</delta_ts>
            <desc>Patch, v11 (squashed for testing)</desc>
            <filename>patch-v11.diff</filename>
            <type>text/plain</type>
            <size>326920</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li5iMWIzYTI2NzYzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODUgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRp
Y2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZs
YWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9y
ZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdElu
dGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
dmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1NpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclVzaW5n
Q29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29y
ZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldp
dGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNl
c0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092
ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092
ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVl
TGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2Jq
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFp
bnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjogY29uc3QpOgorCiAyMDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmlu
ZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDM3ODlhYTM4Mzk0MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE0NjIsNiArMTQ2Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45
ODNjNWYzZGM2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3
NDUyMjUuLmQ4MDhkMzdjMzhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA3Myw2ICs0MDczLDcgQEAKIAkJQkNFQTQ4NzYw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzOTA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzQjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0MTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRo
ZW1lTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0VBNDg0ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLzsgfTsKIAkJQkNF
QTQ4OEEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyVGhlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjAxNSw2ICs2MDE2LDggQEAKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8q
IFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENT
U0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyRmls
dGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTREQ0UzMTg4MTA1MUQw
MDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yOTU4Niw2ICsyOTU4OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8q
IFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAv
KiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4
OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTNGQjgzMjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLywKKwkJCQkwRjUz
RkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovLAog
CQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8s
CiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8s
CiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAq
LywKQEAgLTM0MDUzLDYgKzM0MDU4LDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY1M0ZCODQyMTNCN0E2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1
Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIw
RjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEzYy4uYTYzOGUxZGY4ZjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcgQEAgU2Nyb2xsYWJsZUFy
ZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxh
YmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7
CisgICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRv
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyArMzkxNyw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3Jv
bGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJv
eC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5sYXllcigp
KTsKKyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYx
YzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYg
KzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJl
bmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9s
bFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2Vy
KG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9y
OjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxl
Y3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2
NGUyZS4uMjY5MTZlNjVmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc2
LDkgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5Zi4uYWVlMTZlOTk1YzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgpAQCAtMjUzLDkgKzI1NCwxMyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERp
ZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0
byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgIGlmICghaW5uZXJMYXllclNjcm9sbGFibGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDog
aW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7Ci0gICAgaW5uZXJMYXllci0+c2Nyb2xsVG9P
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFdpZHRo
KCksIDApOworICAgIGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXQpOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgY2xvc2VTdWdnZXN0
aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDY1ZWIyMDlkNGQz
Ny4uNWIxY2JjM2NhM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04
MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNl
dC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0z
NDEsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVF
bmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKIAogICAgIFJlbmRlckJveCog
Y3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5jbG9zaW5nQm94OwogICAgIHdoaWxlIChj
dXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogYm94TGF5ZXIg
PSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBib3hM
YXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkgPyBjdXJyZW50RW5jbG9zaW5nQm94
LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICAgICAgYXV0
byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwog
ICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwogICAgICAgICAgICAgaWYgKHBs
YXRmb3JtRXZlbnQpIHsKQEAgLTE1NjIsNyArMTU2Myw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29s
IHNoCiAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6
ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0
LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVD
dXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApAQCAtMTkxMiw5ICsxOTEzLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXll
cikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewor
ICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+
c2Nyb2xsYWJsZUFyZWEoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDMwNThkOTFkZTY1YS4uMTU2MmM2ZjJhMTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1OTUsNyArMjU5NiwxMCBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYg
KCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhp
cy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5
ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxNCwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIg
YW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIg
PSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmIChlbmNs
b3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBT
Y3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAg
IC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjIsNyArMzg3MCwxMSBAQCBTY3Jv
bGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIElu
dFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApA
QCAtNDMyNiw4ICs0MzM4LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwg
eyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNz
aWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkK
LSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVSb290TGF5ZXIt
PnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZp
b3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRp
cnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEzNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk1LDgg
QEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVj
dXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0Mi4uNmUwZjE5MGJhM2Qy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTUgQEAg
dm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+
aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0g
KmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5s
YXllcigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50
U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9s
bCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxh
eWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIu
c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxU
eXBlID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNjcm9sbGFi
bGVMYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6
VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXllci5k
aWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPworICAg
IHNjcm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3
YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1p
c3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4
IGFmZDc2ZDI1NmVkMC4uMDA3OTk3ZTJiMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgor
I2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVyTGlz
dEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0Lmgi
CkBAIC03ODQsNyArNzg1LDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkp
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJl
dHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiBT
Y3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRl
eCA3MzkzMTk2NzQ4NzUuLjQyMWIzMDc1YWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtOTIsNyArOTIs
NyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0Zvck92
ZXJmbG93TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
IDogZmFsc2U7CiB9CiAKIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGVJRChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li40ZGYx
MTdhNDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
QEAgLTU1Myw3ICs1NTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2Nr
IDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0Ns
aXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKKyAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBibG9jay0+bGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAg
ICAgfQogfQpAQCAtNTg0LDggKzU4NywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKKworICAgIGlmICghbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKQEAgLTExMTMsOCArMTEyMSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9i
b3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUg
YmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0Jh
Y2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYm
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmls
aXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRo
aW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0g
ICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgp
LCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBh
aW50SW5mby5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tn
cm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3Zl
cmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZv
aWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAxNSwxMiBAQCBib29sIFJl
bmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRT
aXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAt
MjUwMywxMCArMjUxNiwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9u
dEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAo
dGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdl
bGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdp
dmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxi
YXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBh
biBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0g
ICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVl
ZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAg
ICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxP
ZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1
bigpKTsKLSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25v
cmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0
aW9uKTsKKyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5
UnVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7
CisgICAgICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9y
ZUJhc2VsaW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVj
dGlvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkg
ewogICAgICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxs
IGJhc2VsaW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0
OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRo
cyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dy
YXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJx
dWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBp
ZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5p
c0hvcml6b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXll
ci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0
aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IDMwN2Y5YjJjN2YyZi4uNTA4YTkyMzMwOWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOCwxMSArMzE5LDEzIEBAIHZvaWQg
UmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBh
bmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRo
YXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0g
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAg
ICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlv
bigpOwotICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVa
b29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzY3JvbGxQb3NpdGlv
bi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVm
ZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAg
ICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxl
LmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAg
ICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24p
OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBj
aGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBp
bnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3Jv
bGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJC
b3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lk
IFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAt
NTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5k
ZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgp
OwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICByZXR1
cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3Io
cGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsK
KworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmlt
YXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdl
LndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9z
aXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3As
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRp
b24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBj
b25zdApAQCAtODE0LDI0ICs4MjYsMzIgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExh
eXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9v
bCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVyZmxv
d0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQog
CiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRv
KTsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZl
cnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXpl
KCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94
OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTks
MTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29u
c3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIs
IHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXll
ciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzcsOCBAQCBpbnQgUmVuZGVyQm94Ojpp
bnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6
c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsK
LSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAm
JiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7
CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xs
YWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAq
c3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTEwLDEzIEBAIGJvb2wgUmVu
ZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAg
IGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24g
TWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2lu
ZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQg
PSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dh
cmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAg
c2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwg
bXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVj
dGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Ny
b2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEs
NiArOTQ1LDIwIEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
Qm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVh
KCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVh
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9y
dENvbnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpo
aWRkZW4gY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMg
ZmFsc2UgaW4gdGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5
U2Nyb2xsZWQoKSBjb25zdAogewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyQm94Ojpj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
OworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTk3LDggKzEwMzUsOCBAQCBSZW5kZXJCb3gqIFJlbmRl
ckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQg
UmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAo
bGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJv
bVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xs
YmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVy
Qm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAog
ICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07
CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBM
YXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBA
IC0xNTc1LDkgKzE2MTcsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNL
bm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdl
dEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dy
b3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE4
OTQsMTAgKzE5MzcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5z
ZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVy
UmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJh
Y3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVj
dC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxh
eWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAg
ICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChy
ZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4g
Y2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2Qw
NzJkLi5kZjBlYTFjMDcxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1Vz
ZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQog
CisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
bG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0
aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBy
b290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggYjk4MjdjOGExNGQyLi5iYTVkY2ZhNDAzNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cu
aCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0
ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAg
RmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9
IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAg
ICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1Rv
cCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxv
Y2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAgIGNv
bnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25z
dHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZp
ZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxv
Y2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdD
bGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVm
dCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0Ns
aXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9u
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRh
aW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdD
bGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlz
fCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0Fu
ZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBG
bG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9D
b250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7
CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xs
T2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0g
ICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAg
ICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAg
ICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlw
cGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYgc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5n
UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJP
ZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1Jl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA1MjQzZWEx
YzFiMDQuLjFmYjkwZTFjYTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9i
ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5M
LgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVu
aWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzA0
LDQwICszMDYsMjYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3RE
aXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBt
X2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUp
CiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRU
cmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxz
ZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3Rh
dHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0
eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJs
ZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRh
bnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAs
IG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNG
aXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0
cnVlKQogICAgICwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9u
Q29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWdu
T2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVh
c29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0g
ICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNjEs
MTYgKzM0OSw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRl
ckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24u
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzgsMjkgKzM1NiwxMCBAQCBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92
ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNp
emVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVy
RmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAt
OTEzLDggKzg3MiwxMCBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4gUmVuZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQogICAgICAgICBpZiAocGFy
ZW50LT5iZWhhdmVzQXNGaXhlZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0
aW9uZWQoKSAmJiAhcGFyZW50LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkpKQogICAgICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKIAotICAgICAgICBpZiAocGFyZW50LT5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNj
cm9sbGluZ0xheWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFNjcm9sbGFibGVMYXllciA9
IHBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudFNjcm9s
bGFibGVMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50U2Ny
b2xsYWJsZUxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcgKzkxMCw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5
b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
cyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsK
LSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAg
ICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpA
QCAtOTU3LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIg
b3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsK
IAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAg
ICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQog
ICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21l
dHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Niw3ICs5MjgsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1h
cCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0
RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAg
ICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNl
dEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAxMyw3ICs5NzUsOCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldAogICAgIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdz
LmNvbnRhaW5zKFNlZW5UcmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2hhczNEVHJhbnNmb3JtZWRB
bmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1f
YmVoYXZlc0FzRml4ZWQgPSBmbGFncy5jb250YWlucyhTZWVuRml4ZWRMYXllcik7Ci0gICAgc2V0
SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3Np
dGVkU2Nyb2xsaW5nTGF5ZXIpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdz
LmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKIAogICAgIC8vIFVwZGF0
ZSB0aGUgcmVmbGVjdGlvbidzIHBvc2l0aW9uIGFuZCBzaXplLgogICAgIGlmIChtX3JlZmxlY3Rp
b24pCkBAIC0xMDM2LDIwICs5OTksMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOwogCiAgICAgZm9yIChS
ZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0
cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVk
LCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVl
ZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBi
dXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBk
YXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
OwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigp
LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVk
KCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4
ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg3LDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xl
YXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBS
ZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAg
UmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRo
aXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVz
aE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTog
d2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4g
b3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5l
ZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAg
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93
U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3
aGVyZQpAQCAtMTIwMiwxMiArMTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAg
Ly8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0
c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBh
Ym92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAog
ICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5w
b3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjMxLDEwIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9u
ZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUo
KS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBz
dWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNl
dC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVk
UGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+
cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8
UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZs
b3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAg
LTE3MDksMTQgKzE2NDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNT
RVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxl
QXJlYSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxv
Y2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFBvc2l0aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
cGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9CiAKLSAgICBpZiAo
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQogICAgICAgICAgICAgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNl
IGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5LDkgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBj
b25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAg
ICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJl
dHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRv
KiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigp
KQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykg
Y29uc3QKQEAgLTE4NzcsNyArMTgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAg
aWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29u
c2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExh
eWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Ny
b2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAg
fQpAQCAtMTg4NSw1MCArMTgyMiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlz
SW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRv
ci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5p
c1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdU
cmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBh
cmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0Nyw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9m
ZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAg
ICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVy
LCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNp
YmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFj
Y2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
IHsKQEAgLTI0OTYsMjg5ICsyMzc2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2
ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNT
Y3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVy
IHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xs
aW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9s
bERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBt
YXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gv
c291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25z
dCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lu
bmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAg
ICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNx
cnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlm
IChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVk
RGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQot
ewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSks
IGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsK
LSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBv
ZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBv
c2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBv
c2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtu
b3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
ID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRl
bHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUg
Y2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdp
ZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFu
U2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6
IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNl
OwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5l
Q2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUo
KTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVk
QnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9m
ZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRB
cmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3Jv
bGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAg
ICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3Jv
bGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkg
JiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tp
cHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3Jv
bGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0
aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAg
ICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1
bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEp
Ci0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3
YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/
IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgy
MzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBw
bHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZh
bHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRp
b24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRp
b24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcs
IEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAg
IHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNj
cm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhp
bXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0
aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZl
QW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsK
LQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDog
c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlw
ZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xs
VHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5n
KSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxP
ZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhh
dmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
cHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNT
Y3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFt
cGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNl
dCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAh
PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChp
cyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVz
ZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9u
OwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZv
ciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMg
Y29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCBy
ZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAg
ICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAg
IHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xs
WE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9z
aXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09
IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQp
OwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3
T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9s
bFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBG
SVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNo
YW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8g
VGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1h
aW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcg
PSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91
ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUg
aW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGlu
ZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNv
bXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0
aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0
IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93
U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdl
dFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikg
ewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBo
aWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAg
ICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1
bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBp
biB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQg
Y29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlv
biBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6
LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxr
IGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
aW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50
UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25z
LCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgot
ICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVu
dFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJl
cigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJh
bWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RG
b3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1
YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAg
IGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
ZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwt
cmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9v
bCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAg
LTI4MjMsNyArMjQyMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUo
Y29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRS
ZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0
ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZp
b3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDMwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQK
ICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAg
ICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJl
c3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8g
VGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNs
aWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwpAQCAtMjg0MywyNCArMjQ0MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9W
aXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAg
ICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3Jv
bGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50
KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAo
Ym94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAg
ICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRi
IGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVj
dAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJh
ci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1l
IHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0
UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxF
eHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRl
U2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAg
ICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxv
Y2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWdu
WSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZl
YWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBh
bmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25z
LmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6
ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9s
bE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXRE
aWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VU
cmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVo
YXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0
ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAg
ICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0
LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMg
d2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQu
CiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2Ny
aXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+
Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5k
ZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUx
LDIzICsyNTQzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygp
KSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBj
b250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyBy
ZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0g
ICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29u
dGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51
cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRl
ZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3
aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAg
ICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRh
dGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21w
b3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQog
TGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZp
eGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50
JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVt
U2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNp
emUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQu
d2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9s
ZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3MTEsMTA5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJl
bmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAgICBpZiAocmVz
aXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91
dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwot
ICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJv
dW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8v
IEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2lu
ZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZp
ZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
b2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9k
ZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFu
ZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYg
KHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZv
clNjcm9sbGluZyh3aGVlbEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJs
ZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJz
IHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAg
ICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8g
dmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBv
c2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNw
YWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJh
clNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFy
ZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25z
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJl
dGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3Qg
bW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0
byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAo
c2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xs
T2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0g
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54
KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAg
IGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxl
V2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRT
aXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVu
ZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5
KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Ny
b2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0Owot
ICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFp
bmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBy
ZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQ
b2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2lu
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXco
JnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmll
d1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1z
Y3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwg
cm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5
ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lk
dGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUg
PSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29u
dGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0
SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWln
aHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24g
cmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNv
bjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5k
ZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5z
ZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCku
c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3Jv
bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5v
dGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxl
Y3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENo
cm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1do
ZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRl
ckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUg
Ym9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBz
bmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIo
KSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hC
YXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZC
YXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxi
YXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAg
ICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNj
cm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wg
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9p
ZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3Zlcmxh
eUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikp
OwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBj
b3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAg
ICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7
Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJl
Y3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJl
Y3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAg
fQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJh
ck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRv
KGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwg
Y29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBj
b3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0
KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xz
UG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50
UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29y
bmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNv
cm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVy
UmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAo
c2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1
bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xs
YmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNz
KCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJU
aGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNl
dChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dD
b250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRv
IHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0
aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAg
ICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
LSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xs
UmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsK
LSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9z
Y3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikK
LSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMg
Ym9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxi
YXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGlj
YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2Rl
OjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+
cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19
Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0g
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdp
bGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBz
Y3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
LSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFz
dGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJl
ckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNp
dHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNh
dXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRh
dGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAg
ICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFz
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFz
dGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRp
bmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Ny
b2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwot
I2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxl
QXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsK
LSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIg
Y2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0
byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIp
Ci0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAg
ICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxh
eWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRM
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXll
ci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFy
a0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBz
dXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5j
bG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCkt
PnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRo
aXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVy
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRl
ZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVy
OiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0
aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAg
ICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5k
IG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVk
KCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0g
aW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0g
PDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxl
YXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAg
fHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUg
fHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1f
aEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxh
eWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5y
ZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVD
b3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25z
dAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRG
cm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYg
KG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZy
b21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+
c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlm
IChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChy
ZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNp
emVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6
c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYg
KG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVy
Kj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGlu
YXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwot
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUg
Y29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0g
ICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNj
cm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwot
Ci0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0g
b3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQo
b3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxl
TGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVm
dCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50
KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAg
Ci0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQot
ewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCkt
PnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0g
ICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlr
ZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsK
LSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikg
JiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xp
a2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJv
eCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhl
bXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
aGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0g
ICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygp
OwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVz
dCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQot
ICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBp
ZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBu
ZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4K
LSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpv
bnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3Jv
bGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3Io
KSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQot
ICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFy
V2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNj
cm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGlu
Z0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5k
ZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAg
ICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVk
c0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAg
ICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQs
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9j
ay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAg
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5p
c0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkt
PmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAg
IC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAo
bV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGll
bnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFy
KSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9t
IGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFs
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5z
aW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNv
IHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRl
U25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAm
JiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkp
IHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNj
cm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBv
dXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhl
IG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUg
c2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgot
ICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUg
dGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBl
ZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQg
aXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWls
cy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQot
ICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0
KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3Jv
bGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jp
em9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0g
cmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQg
PSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0
ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAot
ICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9z
dExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7
CiAKLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDEx
ODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nhcnkg
dG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVy
TGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAK
LSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBh
dXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5k
ZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5k
ZXJCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJv
b2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lOwogCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsK
KyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRv
IGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENv
cm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwg
Y29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikg
eworICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5l
clJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAw
eCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwg
JyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJu
IHRydWU7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29u
dHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJv
bHMpCi17Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4K
LSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRl
ciJfcyk7CiAKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMg
cGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhl
eSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBp
cyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAg
Ly8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIg
dGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJl
IHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5
ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRo
ZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8v
IHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBn
ZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0
aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAg
ICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92
QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBs
b2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxv
d0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyBibGVuZCBtb2RlIl9zKTsKIAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0g
ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkK
LSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7Cisg
ICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29s
YXRlcyBibGVuZGluZyJfcyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXND
b21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1Rl
eHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAg
ICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUg
YW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3
aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdo
ZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXpl
KGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhl
IHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAo
bV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFt
YWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdl
IGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUK
LSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3Vy
IHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIu
Ci0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJl
Y3QpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBS
ZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7
Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRl
cnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5p
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50
T2Zmc2V0LCBhYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMs
IHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYg
KCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNv
cm5lciA9IHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCk7CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRl
ckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVD
b3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtS
ZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJl
czsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgp
OwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxv
UmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIiku
bGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7
Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5l
clJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3Ju
ZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBj
b250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNv
cm5lckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lcklt
YWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIXJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJT
aXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJl
Y3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiBy
b3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBM
YXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAK
LSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
LQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgp
IC0gb3ZlcmZsb3dSZWN0LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNzcsNDIgKzI4MjQs
NiBAQCBib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxv
Y2FsUG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7
Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxP
ZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFn
cywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250
ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92
ZXJsYXBUZXN0UmVxdWVzdHM7CkBAIC00MjI4LDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qp
Ci17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
ciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVs
ZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDI2MSw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25k
aXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3Zl
cmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWlu
IHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIg
PSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBs
YXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJl
aGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENv
bnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAg
Ym9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6
OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5z
dHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Js
b2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQ2Myw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3Vi
cGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3
ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0g
ICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJh
bWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9
IHNjcm9sbGFibGVBcmVhKCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIDogZmFsc2U7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8
IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5n
ID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsK
ICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGlu
ZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMzNjgsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxh
eWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFn
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJz
ICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvKTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChp
c1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xs
YmFycygpKQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBX
aGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVj
dCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIzNywxMSAr
Mzg0MSwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJl
YSk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsK
ICAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWlu
dGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFp
bnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50
KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsg
bG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3Vu
ZFJlY3QpOwogICAgIH0KQEAgLTUyODAsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2Fs
ZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlv
dXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVh
LmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJl
Y3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFy
ZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAg
IH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBu
dWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZh
bHNlKTsKQEAgLTU1MTEsNyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAg
ICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxv
Y2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBp
ZiAoY2FuUmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5o
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24s
IGxvY2FsUG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTg2
LDM1ICs0MTkyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAg
ICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsm
XShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJl
Y3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRl
ckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29y
bmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5o
ZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRT
aXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIo
KSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0
IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdo
dCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQot
ICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRz
LmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJ
bkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVz
aXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhp
dFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RM
b2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9
IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJv
dW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQog
ewpAQCAtNjA3NSw5ICs0NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHMoKQogICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9s
bGFibGVBcmVhKCk7CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxs
cHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJ
WE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwyMSArNDk1NCw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9i
YWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2Jh
Y2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0
aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBw
YWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9X
aW5kb3coKTsKQEAgLTY0MTksMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRB
cHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAog
ICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0Nv
bXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVy
OjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1NDcsOSArNTEwNywxMCBAQCBib29s
IFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAo
IWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4g
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSB8fCBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFi
bGVSb3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVu
ZGVyZXIoKS5pc1ZpZGVvKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0
KCkKQEAgLTY2NjQsNyArNTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JC
YWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNp
YmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBt
X3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRl
ckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0
KSBjb25zdApAQCAtNjY3NCw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAo
IWhhc1Zpc2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFj
ZWQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY5OSwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNv
bnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNv
bmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3Jv
bGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChi
b3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAg
Ly8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVh
ZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
IHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBz
ZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAv
LyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlz
IHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBh
bm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4K
LSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAm
JiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1gg
IT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwot
Ci0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAh
PSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0K
LSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAg
LTY3NTEsNiArNTI4MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9
CiAKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxh
eWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJp
bGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRl
ZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCAr
NTI5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAg
Ly8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0g
ICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdl
ZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAo
cmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVC
ZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkp
IHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtl
VW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xk
U3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5n
IHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMg
aGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3
ODgsMTMgKzUzMTUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAg
ICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBz
Y3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAg
dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAg
ICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3Jt
KCk7CkBAIC02ODE1LDk4ICs1MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRp
ZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVy
KCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlz
aWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+
dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVy
ZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZh
bHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFt
ZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Ny
b2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0g
ICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7
Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNo
IGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2Ug
YmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBh
IHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFj
dHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0
byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXIt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZh
Y3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsK
LSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdU
Rk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUg
YSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50
KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgq
Y29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsK
LSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxD
b3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVu
ZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXpl
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVz
aXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
cmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIo
KSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9y
ZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0
aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rp
b24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQog
CitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAg
ICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9y
ZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJT
Y3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICgh
aGFzRmlsdGVyKCkpIHsKQEAgLTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3Zl
UmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7
CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICBpZiAoIWJveC5yZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAg
ICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Ny
b2xsYmFyUmVsYXRlZFN0eWxlKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRl
clBhaW50aW5nU3RyYXRlZ3koKQogewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5
IHVzZWQgdG8gcmVuZGVyIHRoZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDM4LDcg
KzU1MTEsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVu
dCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRl
ckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5n
UGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcwNjAsNiArNTUzMywxMSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJh
Y2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRh
dGVUaW1lc3RhbXAoKSB9OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllcjo6c2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLmdldCgpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRh
dGlvblJlYXNvbiByZWFzb24pCiB7CkBAIC03MjYyLDkgKzU3NDAsMTAgQEAgc3RhdGljIHZvaWQg
b3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBX
ZWJDb3JlOjpSZW4KICAgICAgICAgcmV0dXJuICItIjsKICAgICB9OwogCisgICAgYm9vbCBsYXll
ckhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkg
PyBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Io
KSA6IGZhbHNlOwogICAgIHN0cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRpbmdEZXN0aW5hdGlvblN0
cmluZygpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkg
PyAiYyIgOiAiLSIpOwotICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yKCkgPyAicyIgOiAiLSIpOworICAgIHN0cmVhbSA8PCAobGF5ZXJIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IgPyAicyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIu
aGFzVHJhbnNmb3JtZWRBbmNlc3RvcigpID8gInQiIDogIi0iKTsKIAogICAgIHN0cmVhbSA8PCAi
ICI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGExNWQ1MWJmZmY1
Yy4uYmU2MTk3NWExMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIw
IElnYWxpYSBTLkwuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRz
Y2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJl
bmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJl
bmRlckxheWVyRmlsdGVyczsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9s
bGJhclBhcnQ7CkBAIC0xNDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJs
ZU9wdGlvbnMgewogdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVy
TGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIg
OiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdF
QkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkg
Y29uc3Q7CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVm
b3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0Lgog
ICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykgeyBtX2xheWVy
TGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkZXN0cm95KCk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJvcGFnYXRl
IGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29tcG9zaXRp
bmcgewpAQCAtNDAxLDYgKzQwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVwYWludEluY2x1
ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBsYXllciBjb250ZW50cyBuZWVkIHRvIGJlIHJlcGFp
bnRlZC4gT25seSBoYXMgYW4gZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIgY29tcG9zaXRpbmcgaXMg
YmVpbmcgdXNlZC4KICAgICB2b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFpbnQoR3JhcGhpY3NMYXll
cjo6U2hvdWxkQ2xpcFRvTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlwVG9MYXllcik7CkBAIC00
MTEsOCArNDIxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVl
ZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9v
bCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xh
eWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEw
NyArNDQxLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNp
YmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZp
bmFsOwotCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdo
dCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQm
KTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xs
IHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRT
aXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQot
ICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKIAogICAgIHZvaWQgc2Ny
b2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsK
ICAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVk
U2Nyb2xsOjpObyk7CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKIAogICAgIC8vIFRoZXNl
IGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQg
eCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQot
ICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNj
cm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0
KGludCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSk7CiAKICAgICAvLyBSZXR1
cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCiAgICAg
Ly8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2Fs
bGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Qs
IENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKIAotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8g
ImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZv
aWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJv
b2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAg
ICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVy
biBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBS
ZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAg
IHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29s
IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xs
YmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlk
ZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7
IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBm
aW5hbDsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
KCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9p
ZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFs
OwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8g
dG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0
dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSku
Ci0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0KLSAgICBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Owog
ICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25z
dDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29y
bmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNl
KTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6
ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
Jik7CiAKICAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2LDkgKzQ4Niw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRp
bmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVy
SW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25J
bmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVD
b21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM4
LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JG
b3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJM
YXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMp
IGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29u
c3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMg
Zm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jv
b3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBh
aW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxw
dHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3Jv
bGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0g
bnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBS
ZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBl
IGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91
bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVy
Zmxvd0NsaXApCkBAIC03ODUsMTEgKzcxMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRp
Y0lubGluZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3Np
dGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91
dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAg
IGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zv
cm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9y
bS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTksMTYgKzc4Miw2IEBA
IHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2
b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5h
bDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
ZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBm
aW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBo
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQotICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yOyB9Ci0KICAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUg
c2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5j
IHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2Nv
cGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8
U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgog
ICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAg
IGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3Qm
KSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0
OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBi
b29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXll
ckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgog
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25z
dDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRl
RnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApA
QCAtOTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52
YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21w
b3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lv
bkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNv
bnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVD
aGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcg
ewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwK
ICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBA
IC0xMDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNl
dCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAg
TGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlv
bigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygp
OwogCisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxh
eWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNl
dDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0
ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5m
byYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZy
b21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2
b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVy
RnJhZ21lbnRzJik7CkBAIC0xMTAwLDY0ICsxMDAzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Ym9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYs
IEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5z
aWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50
JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNm
b3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVy
KiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwK
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUq
IHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29s
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVB
cmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29u
dGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZp
bmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lk
ZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwot
I2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0
IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xs
T2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAg
IHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTEx
OTcsMTQgKzEwNDksNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNv
bHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNj
b3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50
U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2
b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwot
CiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0
aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsg
fQpAQCAtMTIxMywxMSArMTA1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9
CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJm
bG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVy
Zmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewog
ICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVy
dGljYWxTY3JvbGxiYXI7CkBAIC0xMjMwLDggKzEwNjksNiBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAK
LSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxv
Y2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRp
bmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpA
QCAtMTI0OCw3ICsxMDg1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0
aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2Ug
cmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7
CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNT
ZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcg
ZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBh
aW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGlu
ZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3Bh
aW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3
ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1Jl
bGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50
U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAg
Ym9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRh
bnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsK
LSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNG
aXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQg
OiAxOwogCkBAIC0xMjc3LDggKzExMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21w
b3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9v
bCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRl
ciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsK
IAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFz
M0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEyODgsMTcgKzExMjAsNiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWRO
b3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lm
IEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7
CiAjZW5kaWYKQEAgLTEzMzksMjUgKzExNjAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5
ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xs
UG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4g
bV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9m
IG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8g
Rm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgot
ICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZC
YXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2Fj
aGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0Owog
CiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Ny
b2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9s
bGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1
ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hl
ZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0
aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQ
b3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcs
MTAgKzExNzQsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVk
IHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5k
ZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRv
IGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0
cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVu
ZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5j
bG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMg
MCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2Vu
Y2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3OCw2ICsxMTgxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7
CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2Vy
OwogfTsKQEAgLTE0NTAsNiArMTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0
IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigp
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDUxNGM5
OGVjZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgs
MTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92
ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6
VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNp
YmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFt
ZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZl
UmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFn
ZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAg
ICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Ny
b2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VG
b3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVy
YWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtNDM1LDcgKzQzOCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgp
CiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2Up
OwogICAgIH0KIAotICAgIGlmIChtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllcikgeworICAgIGlmIChtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgp
LT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHRpbGVkQmFja2luZyA9IG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLT50aWxlZEJhY2tpbmcoKSkgewogICAgICAgICAgICAgYXV0byB0aWxlQ292ZXJh
Z2UgPSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShtX293bmluZ0xheWVyKTsK
ICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7
CkBAIC03NzUsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUN1c3Rv
bUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogc3RhdGljIGJvb2wgbGF5ZXJP
ckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxh
eWVyJiBsYXllcikKIHsKICAgICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwg
Y3Vyci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoY3Vy
ci0+aGFzVHJhbnNmb3JtKCkgfHwgKGN1cnItPnNjcm9sbGFibGVBcmVhKCkgJiYgY3Vyci0+c2Ny
b2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTcyLDcgKzk3NSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxheWVyKiBj
b21wb3NpdGluZ0FuY2VzCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAg
CiAgICAgYm9vbCBuZWVkc0Rlc2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9IGZhbHNlOwotICAgIGJv
b2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogCiAgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIElmIGl0J3Mgc2Nyb2xsYWJsZSwg
aXQgaGFzIHRvIGJlIGEgYm94LgpAQCAtMTIyNywxMCArMTIzMCwxMyBAQCBMYXlvdXRSZWN0IFJl
bmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJl
bmRlckxheWVyKgogICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IHNuYXBwZWRHcmFw
aGljc0xheWVyKGNsaXBwaW5nQm94T2Zmc2V0LCBjbGlwcGluZ0JveC5zaXplKCksIGRldmljZVNj
YWxlRmFjdG9yKCkpLm1fc25hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGNvbXBvc2l0ZWRB
bmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKGNv
bXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21wb3NpdGVkQW5jZXN0b3It
PnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewog
ICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFj
a2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRh
aW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAg
ICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Ny
b2xsT2Zmc2V0KCk7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5j
ZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50
R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRp
b24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkg
LSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkp
OwogICAgIH0KIApAQCAtMTM2Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQog
ICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNj
cm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24o
KSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRT
aXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5l
ckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0g
bV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgICAgIFNjcm9sbE9m
ZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAg
ICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNp
emUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZz
ZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2Vz
dG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxp
bmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVy
ZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxX
aWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBz
Y3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Ny
b2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkK
ICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
IApAQCAtMTQ5MCwxNCArMTUwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9j
YXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3Jv
bGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9
PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKKwor
ICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+Y3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBl
OjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxs
eSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJl
Y2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9s
bGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpT
eW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91
bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBz
dWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zm
c2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmlu
Z0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7Cisg
ICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNl
c3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBw
ZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0
YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zm
c2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBw
aW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5j
bGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgICAg
ICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAg
ICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0
KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsK
QEAgLTIwMTEsMTIgKzIwMjgsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
TGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBt
X293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiByZXF1aXJlc0xh
eWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJl
c1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xh
eWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAg
LTIwMjQsMTIgKzIwNDUsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Ny
b2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVuZGVyQm94PihtX293bmluZ0xh
eWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5l
clJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5l
ck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAg
IGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIo
KTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3Jv
bGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZl
cnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJh
ciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHJldHVybiBy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIw
OTAsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNM
YXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNy
ZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29y
bmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAg
IGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3du
aW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVBcmVhID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBp
ZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgq
c2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgaWYgKHZl
cnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxh
YmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0
dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250
YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkK
KyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxl
QXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBw
aW5nLgpAQCAtMjA5OCwxNiArMjEyOSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVj
dHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBt
X293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9
IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8q
IGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRp
b25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRp
bmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXll
ci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAg
ICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9v
d25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5
ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAg
fQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAt
MzA4Niw3ICszMTE2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05l
ZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29u
dGVudCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBl
ZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7
CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAg
ICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxP
ZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9
CkBAIC0zMTMyLDcgKzMxNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRv
TGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBp
ZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExh
eWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAg
ICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVu
dFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBz
Y3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVu
dFJlZ2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRz
KGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExh
eWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgcGFpbnRGbGFncyk7CkBAIC0zNDIwLDE3ICszNDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29u
dGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5o
b3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAg
ICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Ny
b2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Ny
b2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1
dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Ny
b2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBM
YXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRy
YW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9v
d25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVk
SW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJl
c2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFw
cGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5w
YWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9
CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAppbmRleCBjZmM0YWIxNTI4ODYuLjQ3ZTJiZTJhMzExMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xMzk3LDcgKzEz
OTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3RvcgogICAgICAgICBpZiAobGF5ZXJCYWNraW5n
LT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNraW5nLT5hbmNlc3RvckNs
aXBwaW5nU3RhY2soKS0+aGFzQW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAgICAgICAgICAgICB0cmF2
ZXJzYWxTdGF0ZS5sYXllcnNDbGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVuZCgmbGF5ZXIpOwogCi0g
ICAgICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAg
ICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRyYXZlcnNh
bFN0YXRlLm92ZXJmbG93U2Nyb2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVyKTsKIAogICAgICAgICBs
YXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAgLTIwMDEsNyArMjAwMiw3
IEBAIHN0YXRpYyBBbmNlc3RvclRyYXZlcnNhbCB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwgRnVuY3RpCiAKIHN0YXRpYyBib29sIGNyZWF0ZXNDbGlwcGlu
Z1Njb3BlKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxh
YmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKIH0KIAogc3RhdGljIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVy
QW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGluZ1Njb3Blcyhjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpCkBAIC0yMDA5LDcgKzIwMTAsNyBAQCBz
dGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGVuY2xvc2luZ0Ns
aXBwaW5nU2NvcGVzKGNvbnN0IFJlbgogICAgIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVy
QW5kQm91bmRzPiBjbGlwcGluZ1Njb3BlczsKICAgICBjbGlwcGluZ1Njb3Blcy5hcHBlbmQoeyBj
b25zdF9jYXN0PFJlbmRlckxheWVyJj4ocm9vdExheWVyKSwgeyB9IH0pOwogCi0gICAgaWYgKCFs
YXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNj
cm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gY2xpcHBpbmdTY29wZXM7CiAKICAg
ICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGxheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFu
Y2VzdG9yTGF5ZXIsIGJvb2wgaW5Db250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCkgewpAQCAtMjA0
MSw3ICsyMDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1h
cChMYXllck92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFIKICAgICBhdXRvIGNsaXBwaW5n
U2NvcGVzID0gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMobGF5ZXIsIHJvb3RSZW5kZXJMYXllcigp
KTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxheWVyLmhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYgKGxheWVyLnNjcm9sbGFibGVBcmVhKCkg
JiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
KCkpIHsKICAgICAgICAgLy8gQ29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhlIGNvbXBvc2l0ZWQgc2Ny
b2xsaW5nIGFuY2VzdG9yLCB0aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMu
CiAgICAgICAgIGF1dG8mIHNjcm9sbGluZ1Njb3BlID0gY2xpcHBpbmdTY29wZXMubGFzdCgpOwog
ICAgICAgICBhdXRvJiBzY29wZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUubGF5ZXI7CkBAIC0yODg5
LDcgKzI4OTAsNyBAQCBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBwaW5nU3RhY2soYwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5yZW5kZXJlcigp
Lmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3JMYXll
ci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgIGlmIChh
bmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxl
QXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaGF2ZU5vblNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVkaWF0ZUxheWVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgqY3VycmVudENsaXBwZWRM
YXllciwgYW5jZXN0b3JMYXllcik7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVOb25TY3JvbGxh
YmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllciA9IGZhbHNlOwpAQCAtMjkzMyw3ICsyOTM0LDcg
QEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5bmNTY3JvbGxhYmxl
Q29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmQKIAogICAgIFNjcm9sbGluZ05vZGVJRCBjb250YWlu
ZXJTY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIHRyYXZlcnNlQW5jZXN0b3JMYXllcnMoKmVuY2xv
c2luZ0xheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaXND
b250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCAvKmlzUGFpbnRPcmRlckFuY2VzdG9yKi8pIHsKLSAg
ICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Js
b2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7
CiAgICAgICAgICAgICBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBsYXllclNjcm9sbGluZ05v
ZGVJRChhbmNlc3RvckxheWVyKTsKICAgICAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNh
bDo6U3RvcDsKICAgICAgICAgfQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1v
ZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVz
Q29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgp
IHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0Rh
dGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMyNTIsNyBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGNvbnN0IFJlbmRlcgogICAgICAgICByZXR1cm4gbGF5ZXIuaXNDb21wb3NpdGVkKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwogfQogCiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oY29uc3QgUmVu
ZGVyTGF5ZXImIGxheWVyLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMz
RFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIGJvb2wgcGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZykg
Y29uc3QKQEAgLTMyNzMsNyArMzI3NCw3IEBAIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvCiAgICAg
fQogCiAgICAgLy8gSWYgdGhpcyBsYXllciBzY3JvbGxzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUg
bGF5ZXIgdGhhdCBpdCB3b3VsZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0byBnZXQgY29tcG9zaXRl
ZC4KLSAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKKyAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJh
Y2tpbmcgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgp
LT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAgICAgICBhdXRvKiBwYWlu
dERlc3RpbmF0aW9uID0gbGF5ZXIucGFpbnRPcmRlclBhcmVudCgpOwogICAgICAgICBpZiAocGFp
bnREZXN0aW5hdGlvbiAmJiBsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRl
ZEFuY2VzdG9yKGxheWVyLCAqcGFpbnREZXN0aW5hdGlvbikgIT0gU2Nyb2xsUG9zaXRpb25pbmdC
ZWhhdmlvcjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBJbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uOjpPdmVyZmxvd1Njcm9sbFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3ICszMzExLDcgQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWUKIAogICAgIGF1dG8qIGVuY2xvc2luZ092ZXJmbG93TGF5ZXIg
PSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CiAKLSAgICBp
ZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZs
b3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpICYmIGVu
Y2xvc2luZ092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVy
Zmxvd0xheWVyKQogICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXll
ciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM0
Miw3ICszMzQzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25z
dHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBSZW5kZXIKIAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNmb3JtLCB3aGljaCBzaG91bGQgbm90IGJlaGF2
ZSBhcyBmaXhlZC4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIucGFyZW50KCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5j
ZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGFu
Y2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIGFuY2VzdG9y
LT5pc0NvbXBvc2l0ZWQoKSAmJiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25l
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4ICszMzk0LDEwIEBAIHN0
YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gJmludGVy
bWVkaWF0ZUxheWVyKQogICAgICAgICAgICAgc2F3SW50ZXJtZWRpYXRlTGF5ZXIgPSB0cnVlOwog
Ci0gICAgICAgIGlmIChhbmNlc3RvckxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KGFuY2Vz
dG9yTGF5ZXIpOworICAgICAgICBpZiAoYXV0byogYW5jZXN0b3JMYXllclNjcm9sbGFibGVBcmVh
ID0gYW5jZXN0b3JMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGFu
Y2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4oYW5j
ZXN0b3JMYXllcik7CisgICAgICAgIH0KIAogICAgICAgICBhbmNlc3RvckxheWVyID0gYW5jZXN0
b3JMYXllci0+cGFyZW50KCk7CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLAogCiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6bGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0NvbXBvc2l0ZWRBbmNlc3Rv
cihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBjb21wb3NpdGVk
QW5jZXN0b3IpCiB7Ci0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFi
bGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1
cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGJvb2wgY29tcG9zaXRl
ZEFuY2VzdG9ySXNJbnNpZGVTY3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0Myw3ICszNDQ2LDcgQEAg
c3RhdGljIHZvaWQgY29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05vZGVzKGNv
bnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hh
aW4gJiYgaXNQYWludE9yZGVyQW5jZXN0b3IpCiAgICAgICAgICAgICByZXR1cm4gQW5jZXN0b3JU
cmF2ZXJzYWw6OlN0b3A7CiAKLSAgICAgICAgaWYgKHNlZW5QYWludE9yZGVyQW5jZXN0b3IgJiYg
IWlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChzZWVuUGFpbnRPcmRlckFuY2VzdG9yICYm
ICFpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIGFwcGVuZE92ZXJmbG93TGF5ZXJOb2RlSUQoYW5j
ZXN0b3JMYXllcik7CiAKICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVyc2FsOjpDb250aW51
ZTsKQEAgLTM0NTgsNyArMzQ2MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYg
KGxheWVyLnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIFNj
cm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAgICAgCi0gICAgaWYgKCFsYXllci5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVB
cmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9u
ZTsKIAogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKQEAgLTQ0NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBT
CiAgICAgICAgIG1fY2xpcExheWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQobm9kZUlEKTsKICNlbmRp
ZgogCi0gICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCBtYWtlV2Vha1B0
cihsYXllcikpOworICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBtX3Nj
cm9sbGluZ05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFrUHRyKCpsYXllci5zY3Jv
bGxhYmxlQXJlYSgpKSk7CiAKICAgICByZXR1cm4gbm9kZUlEOwogfQpAQCAtNDQ3NSw4ICs0NDc5
LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNjcm9sbENvb3JkaW5hdGVk
TGF5ZXJXaXRoUm9sZShSZW5kZXJMYXllciYgbGEKICAgICBhdXRvIHVucmVnaXN0ZXJOb2RlID0g
WyZdKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsKICAgICAgICAgYXV0byBjaGlsZE5vZGVzID0g
c2Nyb2xsaW5nQ29vcmRpbmF0b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlEKTsKICAgICAgICAgZm9y
IChhdXRvIGNoaWxkTm9kZUlEIDogY2hpbGROb2RlcykgewotICAgICAgICAgICAgaWYgKGF1dG8g
d2Vha0xheWVyID0gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQoY2hpbGROb2RlSUQpKQot
ICAgICAgICAgICAgICAgIHdlYWtMYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7
CisgICAgICAgICAgICBpZiAoYXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGluZ05v
ZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCisgICAgICAgICAgICAgICAgd2Vha1Njcm9s
bGFibGVBcmVhLT5sYXllcigpLnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVwZGF0ZSgpOwogICAgICAg
ICB9CiAKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5yZW1vdmUobm9kZUlEKTsK
QEAgLTQ2NTcsOCArNDY2MSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVj
dCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMg
bm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3Rv
ckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIu
dmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAo
IWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Ny
b2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBA
IC00Njc4LDExICs0Njg1LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
Y3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAg
ICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xh
eWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNl
IHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgp
OworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworCiAgICAgICAgIGF1dG8mIGJhY2tp
bmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXRO
b2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAg
IGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRz
TGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAg
ICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIH0pOwogICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0NzMwLDEwIEBAIFNjcm9s
bGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JT
Y3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNo
YW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
bmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVl
U3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9t
ZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9k
ZUlEOwpAQCAtNTAzNSwxMSArNTA0NywxNCBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xh
eWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAg
IGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwog
Ci0gICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5ZXIuaG9yaXpvbnRhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIg
PSAhbGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xs
YWJsZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9s
bGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKKyAgICBib29s
IGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50LmFkZE9yVXBkYXRlU2Ny
b2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbENv
bnRhaW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsZWRDb250ZW50
c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIucmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Ny
b2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVydGljYWxTY3JvbGxiYXIp
OwogfQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlZ2lz
dGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjMTUxZTIzZDBlZjYuLjJjZDcxY2I4ZjNmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgiCiAj
aW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtNjM1LDcg
KzYzNiw3IEBAIHByaXZhdGU6CiAgICAgQ29sb3IgbV92aWV3QmFja2dyb3VuZENvbG9yOwogICAg
IENvbG9yIG1fcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogCi0gICAgSGFzaE1hcDxTY3Jv
bGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVuZGVyTGF5ZXI+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVy
TWFwOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBXZWFrUHRyPFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwOwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I+IG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCmluZGV4IDA1MmE5Yzc1ZTYzNS4uYzdmYzY2YzcwMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0xNzYsOCAr
MTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3JvbGxTbmFwQ29udGFp
bmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5ld1N0eWxlKSkgewog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKSkgewotICAgICAg
ICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICByZW5k
ZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1lVmlldygpOwogICAg
ICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0xOTUsOCArMTk2LDkg
QEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3ggJiYg
c2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZS5z
Y3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6Ok5vbmUp
IHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51cGRhdGVTbmFwT2Zm
c2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwgc2Nyb2xsU25hcEJv
eC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3JT
Y3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVmM2VhYTBjY2Q0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwCkBAIC0wLDAgKzEsMTg0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhl
ciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5v
cmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVh
ZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2Ug
dHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEws
IGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgor
ICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50
IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBM
R1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KFJlbmRlckxheWVyJiBsYXllcikKKyAgICA6IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUp
CisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKGZhbHNlKQorICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2Up
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
KyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNl
KQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkK
KyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFs
c2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKKyAgICAs
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCisgICAgLCBtX3Bvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvblNldChmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCit7Cit9CisKK1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnRh
aW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50
LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICBk
ZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxi
YXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKwor
ICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbigpCit7CisgICAg
YXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXllci5yZW5kZXJCb3goKSkg
eworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBh
cyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAg
ICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIH0KKwor
ICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJl
cigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKK30KKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
K3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3Jv
bGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7Cisg
ICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJl
ZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICByZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5l
bGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK0lu
dFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRl
cmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBp
c0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChh
dXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJh
bmRJblByb2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJl
YWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKTsKK30KKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBh
ZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5jb21wb3Np
dG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xheWVyKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
T3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIGlmICghcG9zaXRpb24p
IHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigp
OworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IGZhbHNlOworICAgIH0K
KworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb24udmFsdWUoKTsKKyAg
ICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9Y
UG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBv
c2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54
KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
cG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBl
LCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2lu
dCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlv
biYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVy
biBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlz
LCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZp
b3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24p
CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZz
ZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVu
dFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKwor
ICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xh
bXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Nj
cm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZp
b3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChv
ZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9
PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZz
ZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJl
bnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3Ry
ZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9u
IDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8
PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisg
ICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+
aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25z
IHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVu
IGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAg
ICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRv
IGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAg
ICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVu
dFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9m
ZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1h
eE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9
IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRX
aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0
V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisg
ICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5l
d1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAg
IH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0
aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50
ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhl
IGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0
dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZpZXcoKTsKKworICAgIC8v
IFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBv
bmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8v
IFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBk
byBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICgh
dmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkg
eworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVz
dCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFt
ZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlmICgh
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRp
bmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJl
YWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxh
eWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxh
eWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRp
bmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVy
CisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX2xheWVyLnNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgLy8gU2Ny
b2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNj
ZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAorICAgICAgICAgICAg
ICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgc3RhY2tpbmcgY29u
dGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBtX2xheWVyLnN0
YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVz
Y2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1h
eSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVy
ZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOworICAg
ICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyLmZyYW1lKCkpOworICAg
IH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5lckZvclJl
cGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBh
ZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1Vw
ZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyLmhhc1Jl
cGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91dFJlY3RzKCkubV9yZXBh
aW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRD
b250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBG
bG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAg
ICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxU
b0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVu
dEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Cisg
ICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXRO
ZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAg
IHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBv
c2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBh
aW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVu
ZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0
KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5m
cmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3
KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJM
YXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAobV9s
YXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAg
ICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxs
IG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25p
bmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYg
KFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXllci5zdGFja2luZ0NvbnRl
eHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0
b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29t
cG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxh
eWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCisgICAgICAg
ICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29t
cG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6
T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGgo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7Cit9CisKK2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5j
b21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
c25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAg
cmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX21hcnF1ZWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29w
ZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJx
dWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJl
ci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiBy
ZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAg
bV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9sYXllcik7CisgICAgICAg
IG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBlbHNlIGlmIChtX21hcnF1
ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCBpc1Zpc2libGUg
PSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwor
ICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIW1f
bGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0eWxlKCkudXNlVG91Y2hP
dmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxl
cmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xheWVy
LmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2xheWVy
LmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xl
OjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2
ZW50KQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIGlmICh1
c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgeworICAgICAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5k
bGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsK
KyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxF
dmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOworICAgIGlm
IChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVk
ZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9u
KCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICBy
ZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRo
KCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVp
Z2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNl
dCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KKyAgICBTY3JvbGxPZmZz
ZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
KCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXpl
KCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldEhl
aWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJs
ZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0g
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKKworICAgIGlmIChz
Y3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zm
c2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQorICAgICAg
ICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJldGNoOworI2Vsc2UKKyAg
ICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIEFTU0VS
VChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJS
ZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3Jv
bGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRS
ZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWlu
aW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUo
LXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50
UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2lu
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZy
ZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJl
dHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xp
ZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOworfQorCitJbnRT
aXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQorCitJ
bnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRz
U2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisg
ICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgo
KSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4o
Y29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBy
ZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJl
YXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2Vk
KHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFu
Z2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0
Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KCk7CisgICAg
fQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAg
bV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCgpCit7
CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3Jv
bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3Jv
bGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNp
bmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgbV9sYXllci5w
YWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsK
K30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoaXM8UmVuZGVy
Qm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJv
eC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50
UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CisKKyAg
ICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdo
dCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZC
YXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYm
ICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07CisKKyAgICBib29sIGhh
dmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9
IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgIGJvb2wgcGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIuc3R5bGUoKS5yZXNp
emUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAo
aGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGlj
YWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFs
U2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAgIElu
dFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAg
ICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNx
dWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAgICAg
IH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3Vs
dDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFy
UmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAg
ICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdl
VG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAgICBp
ZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgw
LCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxi
YXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXpl
IGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBj
b3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZ
Q29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlmIChz
Y3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3Ju
ZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJl
c3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzY3Jv
bGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25l
c3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJh
clRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7Cisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9o
QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAg
ICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIC8v
IElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5l
ZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVj
dHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxzZQorICAgICAgICBzY3Jv
bGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisg
ICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWludFJlY3RhbmdsZShyZXBh
aW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0
ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dz
T3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgICAgIGxheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlT
dHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNj
cm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sK
KyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAg
ICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dS
b290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9z
dCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJl
cjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpKTsKKyAgICBh
dXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7Cisg
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBhZ2UoKS5pc01vbml0b3Jp
bmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwor
ICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7
CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAgaWYg
KCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1
c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7
CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQorewor
ICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
ICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiBy
ZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUu
CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBp
ZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxi
YXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAg
ICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVy
ZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK1Nj
cm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5
ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
cmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IG1fbGF5ZXIuZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAobmV4dExheWVy
LT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV92QmFy
CisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV92QmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOworfQorCitp
bnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8
IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJmbG93Q29udHJv
bHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29y
bmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFtX2hC
YXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAobV92QmFyKSB7
CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwor
ICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Cisg
ICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29y
bmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5
ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Cit7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0KCkgY29u
c3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94
LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dS
ZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVy
Zmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsV2lkdGggPSByb3VuZFRvSW50
KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAgICBtX3Njcm9sbEhlaWdodCA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpOworCisgICAgaW50
IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94
LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRv
SW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxPcmln
aW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZs
b3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAm
JiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgbV9sYXllci5yZW5k
ZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJv
dW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Ny
b2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZs
b3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29s
IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRv
OworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92
ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRh
bFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAg
Ym9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpT
Y3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVy
biBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3go
KTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUg
c2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBp
ZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNW
ZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9s
bGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKG1faEJhciAmJiBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQor
ICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBp
ZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgVmVy
dGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxP
dmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVl
ZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCisg
ICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xs
QmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkg
JiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAg
ICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9s
bEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIo
aGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3Jv
bGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBtX2xheWVyLnVwZGF0ZVNlbGZQ
YWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVwYWludCgpOworCisgICAgICAg
IGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJl
bmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKKyAgICAgICAg
ICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+
KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAgICAgICAgICAgICAgICBibG9j
ay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlv
dXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlv
dXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNCb3goKSkKKyAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXpl
Rm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0KKworICAgIC8vIFNldCB1cCB0
aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBpZiAobV9oQmFyKSB7Cisg
ICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsK
KyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7
CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
LCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwg
bV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNs
aWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGlu
dCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAg
bV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxI
ZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
KTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0
ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUg
YWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVl
KCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxp
ZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAgICAgIC8vIHRvIHB1
bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRv
IHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNs
YW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBt
b2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50
cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUg
dGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmln
aHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxv
d2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRl
dGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQo
KSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9m
ZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQo
c2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlzQ29tcG9zaXRlZCgpKSB7Cisg
ICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAg
ICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBtX2xh
eWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
aWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3Rz
LnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFk
ZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFu
eXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25k
IHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAorICAg
IC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWlu
dGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2Us
IGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92
ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdp
bGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAor
ICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRp
bWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8vIHNlY29uZCBwYXNzIGRvZXNu
J3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisgICAg
aWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7
CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0Owor
CisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYg
dGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFyICYm
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJlY3Qg
bG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3Zl
QnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXll
cigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAgICAgIHBhaW50aW5nUm9v
dCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgorICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9ybWFsbHkgbW92ZSBh
bmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcworICAgIC8vIHdp
ZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hl
biB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0
aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUo
YWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUg
c2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgorICAgIGlmICht
X2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBtX2hCYXIt
PnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1h
Z2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2Ug
aGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQor
ICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIFBhaW50IG91ciByZXNp
emVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAg
IHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5lcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxD
b3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICgh
YWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNv
bnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5
IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQg
aXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVy
UmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBS
ZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNp
emVyU2l6ZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
ID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29y
bmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6
ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVz
aXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVD
b3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVm
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBy
ZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRB
cmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2Ug
PSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJl
c2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVy
UmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5l
clJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29y
bmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1h
Z2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAg
IGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFy
ZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJl
Y3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3Qu
bWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSks
IHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKwor
ICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOworICAgIHJlc2l6
ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFyZXNpemVyQWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4
dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAg
ICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNp
emVyQWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZy
YW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBz
Y3JvbGxiYXJzIHByZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdo
dCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Ny
b2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChy
ZXNpemVyQWJzUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXpl
ckFic1JlY3Q7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2Vy
Q29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Cisg
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywg
MjE3IH0pOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAg
ICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQor
eworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3Mg
aXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNo
b3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQu
c2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQor
CitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5p
c0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5k
ZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cygp
Cit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisg
ICAgaWYgKCFpczxIVE1MRWxlbWVudD4obV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFt
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRl
ckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpi
b3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQ
YWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBh
aW50aW5nSW5mbygmbV9sYXllciwgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRC
ZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKKyAgICBtX2xheWVyLnBh
aW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZs
YWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91
dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYgKGxheWVyRnJhZ21lbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZElu
dFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuYm9yZGVyQm94UmVjdCgpKTsKKyAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBhdXRvIGNvcm5l
clJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25z
dCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldEZy
b21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJl
Y3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21l
bnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6
ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAg
ICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0g
b2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5z
aXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdt
ZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZy
YWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5
ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21l
bnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgICAgICAg
ICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQo
KSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8gbV9sYXll
ci5iYWNraW5nKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30K
KworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8g
bV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7
Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBt
X2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dy
b3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRo
ZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBPdmVy
ZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZsb3cg
b3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZvaWQg
ZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0
byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4K
KyAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAgYm9v
bCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKHZl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+
c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVybGF5
IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBi
ZSBkaXNhYmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBu
ZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFyICYm
IG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJhciAm
JiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3coKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVy
ZXIudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIGlzVmlz
aWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+
dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVy
ZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZh
bHNlOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmll
dy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQor
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRl
cmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gY29ybmVyID0g
cmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVh
clNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Nj
cm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikp
OworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMg
cGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcik7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAg
ICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxlKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJF
bGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsK
KyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFj
dHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsK
KyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7
CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBw
YXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcik7CisgICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBt
X3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpCit7CisgICAgaWYgKG1faEJhcikKKyAg
ICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBt
X3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Cisg
ICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cit9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBh
Y2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lk
ZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5k
bGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIu
ZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNoRXZl
bnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcjsKKyAgICBpZiAoIXJl
bmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxp
ZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LmlzQ29tcG9zaXRlZCgpICYmIG1fbGF5ZXIuYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5p
bmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4K
KyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29u
dGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2Vy
ID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRS
ZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwg
LTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVs
dGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisg
ICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1
c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRT
aXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQoreworICAg
IEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBtX2xheWVyLnJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisKKyAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBv
ZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBv
c2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBv
c2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtu
b3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
ID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJzKGRl
bHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUg
Y2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNldFdp
ZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFu
U2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworT3B0aW9uYWw8
TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsUG9zaXRp
b24oU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXll
ci5hbGxvd3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgYXV0byBzaG91bGRVc2VBbmlt
YXRlZFNjcm9sbCA9IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3JvbGxCZWhhdmlvciBiZWhh
dmlvcikKKyAgICB7CisgICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPSAhbV9sYXll
ci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3Mo
KQorICAgICAgICAgICAgJiYgZWxlbWVudCAmJiB1c2VTbW9vdGhTY3JvbGxpbmcoYmVoYXZpb3Is
IGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPyBBbmltYXRl
ZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgIH07CisKKyAgICBTY3JvbGxP
ZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsK
KyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5Bbmlt
YXRpb24pIHsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldCgpOworICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwo
Ym94LT5lbGVtZW50KCksIGJlaGF2aW9yKTsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAg
IEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBv
bGRTY3JvbGxPZmZzZXQ7CisKKyAgICAgICAgYXV0byBsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZCA9
IGxvY2FsRXhwb3NlUmVjdDsKKyAgICAgICAgbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQubW92ZSgt
c2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KGJveC0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdFNj
cm9sbGVkKSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEq
KiBzY3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29s
IHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlci5wYXJlbnQo
KSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLnBhcmVudCgpLT5z
dHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyLmhhc092ZXJm
bG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAgICAgICAgU2Nyb2xsT2Zm
c2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7CisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEp
CisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAgICAgICAvLyBJZiB0aGlz
IGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQg
Y2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQg
PSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCFyZW1haW5p
bmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIucGFyZW50KCkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgorICAgICAgICAgICAg
aWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5p
bmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRl
cmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBhcmUgaGVy
ZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNh
bGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNs
aXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNj
cm9sbGVkLgorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVs
dGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJl
YSA9ICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6IElm
IHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2lu
ZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpCit7CisgICAgQVNTRVJUKCZtX2xheWVyID09IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCku
bGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5k
ZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBtX2xheWVyLnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZs
b3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5z
Zm9ybXMpOworICAgIGlmICgmbV9sYXllciAhPSBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmxh
eWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IobV9sYXll
ci5wYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIG1fbGF5ZXIudXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIFJlbmRlckxheWVyOjpJc092ZXJm
bG93U2Nyb2xsKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9j
a1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuYWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcs
ICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIuZGVidWdEZXNjcmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzMzBlNDM5YTliYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBv
ZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3
dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxl
IGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9m
IHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1h
eSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBv
ZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlck1hcnF1ZWU7CisKK2NsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBSZW5kZXJMYXllciYgbGF5ZXIoKSB7IHJldHVybiBt
X2xheWVyOyB9CisKKyAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4g
bV9tYXJxdWVlLmdldCgpOyB9CisgICAgdm9pZCB1cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAg
ICB2b2lkIGNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKworICAgIHZvaWQgc3RvcmVTY3JvbGxQ
b3NpdGlvbigpOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgdm9p
ZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsK
KyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAg
IGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsK
KworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAv
LyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVy
Zmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
OworCisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmlt
YXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVk
U2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Ny
b2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3Jv
bGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIGJvb2wg
c2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGhvcml6
b250YWxTY3JvbGxiYXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigp
OyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRp
Y2FsU2Nyb2xsYmFyKCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKworICAgIFJlZjxT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9p
ZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKworICAgIGJvb2wgcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24g
PSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWly
ZXNSZWNvbmNpbGlhdGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVy
IGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRo
ZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUg
aXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVw
LXRvLWRhdGUpLgorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorCisgICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMo
KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBoaXRUZXN0UmVzaXplcklu
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
TGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3Zl
cmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7
CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVy
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyAgICB2
b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwor
CitwdWJsaWM6CisgICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIG92ZXJyaWRlIFNj
cm9sbGFibGVhQXJlYSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50
U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29s
IGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9v
bCB2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIFNj
cm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zY3Jv
bGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorICAgIFNj
cm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IGZpbmFsOworCisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpIGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZp
bmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZp
bmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2
ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xs
KCkgZmluYWw7CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
clNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QgZmluYWw7CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3Jv
bGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRS
ZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJ
RCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNv
bnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBW
aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVy
aGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygp
IGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29s
KiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1h
aW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0
IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IGZpbmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBm
aW5hbDsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRT
aXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90
YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5
cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFs
OworCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQorICAgIHZvaWQgc2V0SGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
OyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0
eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNj
cm9sbGJhcnM7IH0KKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uo
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICB2b2lkIGNsZWFy
UmVzaXplcigpOworCisgICAgdm9pZCB1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKTsK
KworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAgIExheW91dFVuaXQgb3Zl
cmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92
ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xS
ZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dD
b250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKwor
ICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAgdm9p
ZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisKKyAgICBi
b29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAgLy8gTk9URTogVGhpcyBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZy
b20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlv
biYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworCisg
ICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisg
ICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRpb24oU2Nyb2xsQmVoYXZp
b3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxvY2Fs
RXhwb3NlUmVjdCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
OworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gTWlu
aW11bSBwYWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1fc2Nyb2xsSGVpZ2h0KQor
ICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJm
bG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAx
OworICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJbiB0
aGUgbGF5ZXItb3JkZXIgdHJlZS4KKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworICAg
IGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOworCisgICAgLy8gVGhlIHdp
ZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3JvbGxXaWR0aDsK
KyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKKyAg
ICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNjcm9sbFBvc2l0aW9uIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJm
bG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQb2ludCBt
X2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9s
ZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJl
bmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFy
cXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
aW5kZXggN2U5ZjM4MzJkMzZlLi41MjIwMjU5YmVlYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0
Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6
aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODk3LDEwIEBAIGJvb2wg
UmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wgUmVu
ZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7Ci0g
ICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4
IDc2ZTIzZTRkMDk5Ni4uOWE0ODFhOTdhZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6OlJlbmRl
ck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAs
IG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAgIGxheWVy
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgQVNTRVJU
KGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBSZW5kZXJN
YXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3Myw5ICsxNzQsOSBAQCB2
b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9zdXNwZW5kZWQgJiYgIW1f
c3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xh
eWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9z
dGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xh
bXBlZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0
KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBtX3N0b3BwZWQgPSBmYWxz
ZTsKQEAgLTI0NCwxMiArMjQ1LDE1IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgp
CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgaWYg
KG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobV9zdGFydCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG1fc3Rh
cnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFy
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIsNyArMjc2LDcgQEAgdm9p
ZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9vbCBwb3NpdGl2ZSA9IHJh
bmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jpem9udGFsKCkgPyByb3Vu
ZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSA6IHJvdW5kVG9JbnQo
bV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGludCBpbmNy
ZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgp
Lm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAgICBpbnQgY3VycmVudFBv
cyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IG1fbGF5
ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9y
aXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkgOiBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5ld1BvcyA9ICBjdXJyZW50
UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpOwogICAgICAgICBp
ZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1pbihuZXdQb3MsIGVuZFBv
aW50KTsKQEAgLTI4OSw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQo
KQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9Z
T2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9ZT2Zmc2V0
KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0Li4xMTA1MTE3MjNhZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDAxLDcg
KzEwMDEsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6Y29tcHV0ZUZsb2F0
VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGljIHZvaWQgb3V0cHV0UmVu
ZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgc3RyZWFtLm5leHRMaW5l
KCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSli
c29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxv
dyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIChDKW9tcG9zaXRl
ZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAgc3RyZWFtIDw8ICIoQils
b2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2
ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcp
ZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxlQXJlYSwgKEMpb21wb3Np
dGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAgICBzdHJlYW0ubmV4dExp
bmUoKTsKIH0KIApAQCAtMTExNSwxMCArMTExNSwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6b3V0
cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgp
CiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAgaWYgKGhhc0xheWVyKCkp
CisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8ICJMIjsKLSAgICBlbHNl
Ci0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmVhbSA8PCAi
LSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwogCiAgICAgaWYgKGlzQ29t
cG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uMDExMzg0MWU2YzI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgY2xh
c3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93Owog
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIHB1Ymxp
YzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMg
dGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBt
YXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5k
ZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM5NywxOSAr
Mzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxUb3Ao
aW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNv
bHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXll
cigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IHJlbmRlcmVy
LT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9s
bGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hl
ZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBz
dG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50
KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwo
bG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllciA/
IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChi
b3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6
bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxl
bWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAKaW5kZXggN2MwMWYwMjBmZTgyLi41OTIwZDU4ZjIwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNjAwLDIwICs2MDEs
MjQgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAgICBpZiAobGF5ZXIucmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwot
ICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAgICAgICBp
ZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAgdHMgPDwg
IiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAg
ICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgp
LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnko
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAm
JiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxX
aWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgICAgIGlm
IChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGll
bnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAg
ICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
SGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9sbGJh
clRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgICAg
ICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSkgewotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1hY1RoZW1lID0g
KnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKTsKLSAgICAg
ICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqbGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKSkpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxiYXJIYXNSVExMYXlv
dXREaXJlY3Rpb24iOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01v
Y2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2Fz
dDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7CisgICAgICAgICAgICAgICAg
aWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhh
c1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggYjEw
MzNkYTA3OTMwLi42OTFlNzU1ODdmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMzLDEwIEBAIHZvaWQgUmVuZGVyV2lkZ2V0
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0
KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAK
LSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5
ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlmIChsYXllcigpICYm
IGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRSZXNp
emVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNl
dE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCmluZGV4IGFkNjM3ZmY0NGY5Ni4uZmU1Y2U0MDU5NjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTgzMyw3ICsx
ODM0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdX
aGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVT
Y3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBi
b3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsKKyAgICAgICAgc2Nyb2xs
YWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NTQsOCArMjg1NiwxMCBAQCBFeGNlcHRpb25P
cjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5vZGUq
IG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCkp
CiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94Pihy
ZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJl
bmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5k
ZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5s
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggNWM0OTkzYmFlMDI4Li5iOTY4YWZhMWRjZWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0xMS0yNiAgTmlrb2xh
cyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBhcmF0
ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6CisgICAgICAg
IFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAg
ICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQK
KyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5l
ZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJ
UCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogRE9NL0RPTUhU
TUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xs
WU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6Cisg
ICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3aXRoSW5zZXQ6XSk6
CisKIDIwMjAtMTEtMjEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIGFuIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyBmb3Igd2hlZWwgZXZlbnQgZ2Vz
dHVyZXMgYmVjb21pbmcgbm9uLWJsb2NraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01I
VE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4uNWNjNWYwNTYzYjRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNT
dGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dBS1dpbmRv
dy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2VuZGlmCkBA
IC0xMTEsMTEgKzExMiwxNCBAQCAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9s
bFlPZmZzZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFkagogICAgICAgICByZXR1
cm47CiAKICAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJl
bmRlcmVyKS5sYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
OwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQo
V2ViQ29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4
LCB5KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxD
bGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxz
ZSk7CiB9CiAKIC0gKHZvaWQpYWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihp
bnQgKil3IDooaW50ICopaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KaW5kZXggM2ZlYTE2MDgzOTJmLi4xMmQxNTllYzhmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERv
Y3VtZW50TWFya2VyLmg+CkBAIC03MzgsOSArNzM5LDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJh
bmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCiAjZWxzZQogICAgICAgICBhdXRvKiBsYXll
ciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYg
KGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKHRydWUpOworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAg
c3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xv
c2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9u
UmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwg
V2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAg
ICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9CkBAIC03NTgs
OSArNzYwLDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAq
KXJhbmdlIHdpdGhJbnNldDooQ0dGbG9hdClpbnNldAogICAgIGlmIChzdGFydE5vZGUgJiYgc3Rh
cnROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5y
ZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAg
ICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Cisg
ICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRl
cmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5n
ZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZl
YWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29y
ZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRB
bGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXN9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogCiAg
ICAgICAgICAgICBhdXRvIGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CiAgICAgICAgICAgICBpZiAo
Y29yZUZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjIzNmExMWJmMjk2
Li41OGRkZTA1ZDcwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MSBAQAorMjAyMC0xMS0yNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlh
LmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3Zlcmhh
dWwgUmVuZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGlu
Zy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVh
bWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxh
eWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5n
L292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5n
LgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToK
KwogMjAyMC0xMS0xOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4K
IAogICAgICAgICBbVGV4dHVyZU1hcHBlcl0gUmVtb3ZlIG1fdGV4dHVyZU1hcHBlciBmcm9tIFRl
eHR1cmVNYXBwZXJMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNzdj
MjYyZTA5NGYuLjJmZGNmOWY5Y2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAK
QEAgLTE0Nyw2ICsxNDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
bmRlckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAt
MjA0OCw4ICsyMDQ5LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBk
b2N1bWVudCB3aXRob3V0IGhpdHRpbmcgYW55IG5vZGVzCiAgICAgICAgICAgICBjb3JlRnJhbWUt
PnZpZXcoKS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9s
bGVkQXJlYSA9IGNvcmVGcmFtZS0+dmlldygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEs
ICZzY3JvbGxlZEFyZWEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9s
bERlbHRhLCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0
ZVBhbm5pbmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5k
UGFubmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFu
ZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431889"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414901</attachid>
            <date>2020-11-26 06:47:20 -0800</date>
            <delta_ts>2020-11-26 09:16:39 -0800</delta_ts>
            <desc>Patch, v12 (squashed for testing)</desc>
            <filename>patch-v12.diff</filename>
            <type>text/plain</type>
            <size>328042</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li5iMWIzYTI2NzYzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODUgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRp
Y2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZs
YWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9y
ZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdElu
dGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
dmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1NpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclVzaW5n
Q29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29y
ZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldp
dGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNl
c0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092
ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092
ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVl
TGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2Jq
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFp
bnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjogY29uc3QpOgorCiAyMDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmlu
ZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDM3ODlhYTM4Mzk0MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE0NjIsNiArMTQ2Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45
ODNjNWYzZGM2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3
NDUyMjUuLmQ4MDhkMzdjMzhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA3Myw2ICs0MDczLDcgQEAKIAkJQkNFQTQ4NzYw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzOTA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzQjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0MTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRo
ZW1lTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0VBNDg0ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLzsgfTsKIAkJQkNF
QTQ4OEEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyVGhlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjAxNSw2ICs2MDE2LDggQEAKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8q
IFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENT
U0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyRmls
dGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTREQ0UzMTg4MTA1MUQw
MDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yOTU4Niw2ICsyOTU4OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8q
IFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAv
KiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4
OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTNGQjgzMjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLywKKwkJCQkwRjUz
RkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovLAog
CQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8s
CiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8s
CiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAq
LywKQEAgLTM0MDUzLDYgKzM0MDU4LDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY1M0ZCODQyMTNCN0E2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1
Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIw
RjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEzYy4uYTYzOGUxZGY4ZjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcgQEAgU2Nyb2xsYWJsZUFy
ZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxh
YmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7
CisgICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRv
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyArMzkxNyw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3Jv
bGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJv
eC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5sYXllcigp
KTsKKyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYx
YzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYg
KzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJl
bmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9s
bFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2Vy
KG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9y
OjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxl
Y3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2
NGUyZS4uMjY5MTZlNjVmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc2
LDkgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5Zi4uYWVlMTZlOTk1YzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgpAQCAtMjUzLDkgKzI1NCwxMyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERp
ZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0
byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgIGlmICghaW5uZXJMYXllclNjcm9sbGFibGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDog
aW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7Ci0gICAgaW5uZXJMYXllci0+c2Nyb2xsVG9P
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFdpZHRo
KCksIDApOworICAgIGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXQpOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgY2xvc2VTdWdnZXN0
aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDY1ZWIyMDlkNGQz
Ny4uNWIxY2JjM2NhM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04
MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNl
dC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0z
NDEsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVF
bmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKIAogICAgIFJlbmRlckJveCog
Y3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5jbG9zaW5nQm94OwogICAgIHdoaWxlIChj
dXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogYm94TGF5ZXIg
PSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBib3hM
YXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkgPyBjdXJyZW50RW5jbG9zaW5nQm94
LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICAgICAgYXV0
byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwog
ICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwogICAgICAgICAgICAgaWYgKHBs
YXRmb3JtRXZlbnQpIHsKQEAgLTE1NjIsNyArMTU2Myw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29s
IHNoCiAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6
ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0
LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVD
dXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApAQCAtMTkxMiw5ICsxOTEzLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXll
cikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewor
ICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+
c2Nyb2xsYWJsZUFyZWEoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDMwNThkOTFkZTY1YS4uMTU2MmM2ZjJhMTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1OTUsNyArMjU5NiwxMCBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYg
KCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhp
cy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5
ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxNCwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIg
YW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIg
PSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmIChlbmNs
b3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBT
Y3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAg
IC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjIsNyArMzg3MCwxMSBAQCBTY3Jv
bGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIElu
dFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApA
QCAtNDMyNiw4ICs0MzM4LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwg
eyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNz
aWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkK
LSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVSb290TGF5ZXIt
PnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZp
b3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRp
cnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEzNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk1LDgg
QEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVj
dXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0Mi4uNmUwZjE5MGJhM2Qy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTUgQEAg
dm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+
aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0g
KmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5s
YXllcigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50
U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9s
bCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxh
eWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIu
c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxU
eXBlID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNjcm9sbGFi
bGVMYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6
VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXllci5k
aWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPworICAg
IHNjcm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3
YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1p
c3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4
IGFmZDc2ZDI1NmVkMC4uMDA3OTk3ZTJiMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgor
I2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVyTGlz
dEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0Lmgi
CkBAIC03ODQsNyArNzg1LDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkp
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJl
dHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiBT
Y3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRl
eCA3MzkzMTk2NzQ4NzUuLjQyMWIzMDc1YWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtOTIsNyArOTIs
NyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0Zvck92
ZXJmbG93TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
IDogZmFsc2U7CiB9CiAKIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGVJRChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li40ZGYx
MTdhNDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
QEAgLTU1Myw3ICs1NTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2Nr
IDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0Ns
aXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKKyAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBibG9jay0+bGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAg
ICAgfQogfQpAQCAtNTg0LDggKzU4NywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKKworICAgIGlmICghbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKQEAgLTExMTMsOCArMTEyMSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9i
b3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUg
YmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0Jh
Y2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYm
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmls
aXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRo
aW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0g
ICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgp
LCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBh
aW50SW5mby5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tn
cm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3Zl
cmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZv
aWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAxNSwxMiBAQCBib29sIFJl
bmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRT
aXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAt
MjUwMywxMCArMjUxNiwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9u
dEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAo
dGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdl
bGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdp
dmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxi
YXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBh
biBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0g
ICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVl
ZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAg
ICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxP
ZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1
bigpKTsKLSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25v
cmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0
aW9uKTsKKyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5
UnVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7
CisgICAgICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9y
ZUJhc2VsaW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVj
dGlvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkg
ewogICAgICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxs
IGJhc2VsaW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0
OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRo
cyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dy
YXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJx
dWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBp
ZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5p
c0hvcml6b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXll
ci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0
aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IDMwN2Y5YjJjN2YyZi4uNTA4YTkyMzMwOWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOCwxMSArMzE5LDEzIEBAIHZvaWQg
UmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBh
bmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRo
YXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0g
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAg
ICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlv
bigpOwotICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVa
b29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzY3JvbGxQb3NpdGlv
bi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVm
ZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAg
ICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxl
LmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAg
ICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24p
OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBj
aGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBp
bnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3Jv
bGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJC
b3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lk
IFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAt
NTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5k
ZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgp
OwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICByZXR1
cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3Io
cGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsK
KworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmlt
YXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdl
LndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9z
aXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3As
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRp
b24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBj
b25zdApAQCAtODE0LDI0ICs4MjYsMzIgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExh
eXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9v
bCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVyZmxv
d0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQog
CiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRv
KTsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZl
cnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXpl
KCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94
OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTks
MTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29u
c3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIs
IHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXll
ciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzcsOCBAQCBpbnQgUmVuZGVyQm94Ojpp
bnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6
c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsK
LSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAm
JiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7
CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xs
YWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAq
c3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTEwLDEzIEBAIGJvb2wgUmVu
ZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAg
IGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24g
TWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2lu
ZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQg
PSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dh
cmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAg
c2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwg
bXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVj
dGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Ny
b2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEs
NiArOTQ1LDIwIEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
Qm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVh
KCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVh
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9y
dENvbnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpo
aWRkZW4gY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMg
ZmFsc2UgaW4gdGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5
U2Nyb2xsZWQoKSBjb25zdAogewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyQm94Ojpj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
OworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTk3LDggKzEwMzUsOCBAQCBSZW5kZXJCb3gqIFJlbmRl
ckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQg
UmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAo
bGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJv
bVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xs
YmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVy
Qm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAog
ICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07
CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBM
YXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBA
IC0xNTc1LDkgKzE2MTcsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNL
bm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdl
dEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dy
b3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE4
OTQsMTAgKzE5MzcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5z
ZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVy
UmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJh
Y3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVj
dC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxh
eWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAg
ICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChy
ZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4g
Y2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2Qw
NzJkLi5kZjBlYTFjMDcxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1Vz
ZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQog
CisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
bG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0
aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBy
b290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggYjk4MjdjOGExNGQyLi5iYTVkY2ZhNDAzNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cu
aCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0
ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAg
RmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9
IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAg
ICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1Rv
cCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxv
Y2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAgIGNv
bnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25z
dHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZp
ZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxv
Y2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdD
bGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVm
dCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0Ns
aXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9u
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRh
aW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdD
bGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlz
fCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0Fu
ZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBG
bG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9D
b250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7
CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xs
T2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0g
ICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAg
ICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAg
ICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlw
cGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYgc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5n
UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJP
ZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1Jl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA1MjQzZWEx
YzFiMDQuLjFmYjkwZTFjYTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9i
ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5M
LgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVu
aWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzA0
LDQwICszMDYsMjYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3RE
aXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBt
X2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUp
CiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRU
cmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxz
ZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3Rh
dHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0
eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJs
ZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRh
bnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAs
IG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNG
aXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0
cnVlKQogICAgICwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9u
Q29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWdu
T2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVh
c29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0g
ICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNjEs
MTYgKzM0OSw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRl
ckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24u
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzgsMjkgKzM1NiwxMCBAQCBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92
ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNp
emVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVy
RmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAt
OTEzLDggKzg3MiwxMCBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4gUmVuZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQogICAgICAgICBpZiAocGFy
ZW50LT5iZWhhdmVzQXNGaXhlZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0
aW9uZWQoKSAmJiAhcGFyZW50LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkpKQogICAgICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKIAotICAgICAgICBpZiAocGFyZW50LT5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNj
cm9sbGluZ0xheWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFNjcm9sbGFibGVMYXllciA9
IHBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudFNjcm9s
bGFibGVMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50U2Ny
b2xsYWJsZUxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcgKzkxMCw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5
b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
cyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsK
LSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAg
ICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpA
QCAtOTU3LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIg
b3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsK
IAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAg
ICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQog
ICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21l
dHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Niw3ICs5MjgsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1h
cCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0
RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAg
ICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNl
dEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAxMyw3ICs5NzUsOCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldAogICAgIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdz
LmNvbnRhaW5zKFNlZW5UcmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2hhczNEVHJhbnNmb3JtZWRB
bmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1f
YmVoYXZlc0FzRml4ZWQgPSBmbGFncy5jb250YWlucyhTZWVuRml4ZWRMYXllcik7Ci0gICAgc2V0
SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3Np
dGVkU2Nyb2xsaW5nTGF5ZXIpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdz
LmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKIAogICAgIC8vIFVwZGF0
ZSB0aGUgcmVmbGVjdGlvbidzIHBvc2l0aW9uIGFuZCBzaXplLgogICAgIGlmIChtX3JlZmxlY3Rp
b24pCkBAIC0xMDM2LDIwICs5OTksMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOwogCiAgICAgZm9yIChS
ZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0
cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVk
LCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVl
ZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBi
dXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBk
YXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
OwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigp
LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVk
KCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4
ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg3LDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xl
YXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBS
ZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAg
UmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRo
aXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVz
aE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTog
d2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4g
b3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5l
ZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAg
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93
U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3
aGVyZQpAQCAtMTIwMiwxMiArMTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAg
Ly8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0
c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBh
Ym92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAog
ICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5w
b3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjMxLDEwIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9u
ZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUo
KS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBz
dWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNl
dC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVk
UGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+
cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8
UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZs
b3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAg
LTE3MDksMTQgKzE2NDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNT
RVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxl
QXJlYSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxv
Y2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFBvc2l0aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
cGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9CiAKLSAgICBpZiAo
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQogICAgICAgICAgICAgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNl
IGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5LDkgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBj
b25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAg
ICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJl
dHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRv
KiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigp
KQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykg
Y29uc3QKQEAgLTE4NzcsNyArMTgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAg
aWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29u
c2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExh
eWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Ny
b2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAg
fQpAQCAtMTg4NSw1MCArMTgyMiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlz
SW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRv
ci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5p
c1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdU
cmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBh
cmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0Nyw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9m
ZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAg
ICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVy
LCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNp
YmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFj
Y2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
IHsKQEAgLTI0OTYsMjg5ICsyMzc2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2
ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNT
Y3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVy
IHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xs
aW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9s
bERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBt
YXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gv
c291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25z
dCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lu
bmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAg
ICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNx
cnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlm
IChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVk
RGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQot
ewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSks
IGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsK
LSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBv
ZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBv
c2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBv
c2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtu
b3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
ID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRl
bHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUg
Y2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdp
ZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFu
U2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6
IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNl
OwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5l
Q2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUo
KTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVk
QnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9m
ZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRB
cmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3Jv
bGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAg
ICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3Jv
bGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkg
JiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tp
cHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3Jv
bGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0
aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAg
ICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1
bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEp
Ci0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3
YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/
IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgy
MzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBw
bHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZh
bHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRp
b24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRp
b24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcs
IEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAg
IHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNj
cm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhp
bXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0
aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZl
QW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsK
LQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDog
c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlw
ZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xs
VHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5n
KSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxP
ZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhh
dmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
cHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNT
Y3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFt
cGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNl
dCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAh
PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChp
cyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVz
ZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9u
OwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZv
ciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMg
Y29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCBy
ZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAg
ICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAg
IHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xs
WE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9z
aXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09
IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQp
OwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3
T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9s
bFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBG
SVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNo
YW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8g
VGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1h
aW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcg
PSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91
ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUg
aW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGlu
ZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNv
bXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0
aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0
IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93
U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdl
dFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikg
ewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBo
aWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAg
ICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1
bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBp
biB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQg
Y29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlv
biBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6
LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxr
IGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
aW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50
UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25z
LCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgot
ICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVu
dFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJl
cigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJh
bWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RG
b3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1
YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAg
IGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
ZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwt
cmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9v
bCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAg
LTI4MjMsNyArMjQyMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUo
Y29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRS
ZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0
ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZp
b3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDMwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQK
ICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAg
ICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJl
c3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8g
VGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNs
aWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwpAQCAtMjg0MywyNCArMjQ0MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9W
aXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAg
ICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3Jv
bGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50
KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAo
Ym94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAg
ICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRi
IGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVj
dAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJh
ci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1l
IHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0
UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxF
eHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRl
U2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAg
ICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxv
Y2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWdu
WSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZl
YWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBh
bmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25z
LmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6
ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9s
bE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXRE
aWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VU
cmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVo
YXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0
ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAg
ICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0
LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMg
d2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQu
CiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2Ny
aXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+
Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5k
ZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUx
LDIzICsyNTQzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygp
KSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBj
b250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyBy
ZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0g
ICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29u
dGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51
cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRl
ZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3
aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAg
ICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRh
dGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21w
b3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQog
TGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZp
eGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50
JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVt
U2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNp
emUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQu
d2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9s
ZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3MTEsMTA5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJl
bmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAgICBpZiAocmVz
aXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91
dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwot
ICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJv
dW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8v
IEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2lu
ZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZp
ZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
b2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9k
ZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFu
ZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYg
KHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZv
clNjcm9sbGluZyh3aGVlbEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJs
ZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJz
IHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAg
ICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8g
dmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBv
c2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNw
YWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJh
clNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFy
ZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25z
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJl
dGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3Qg
bW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0
byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAo
c2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xs
T2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0g
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54
KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAg
IGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxl
V2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRT
aXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVu
ZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5
KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Ny
b2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0Owot
ICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFp
bmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBy
ZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQ
b2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2lu
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXco
JnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmll
d1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1z
Y3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwg
cm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5
ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lk
dGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUg
PSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29u
dGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0
SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWln
aHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24g
cmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNv
bjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5k
ZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5z
ZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCku
c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3Jv
bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5v
dGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxl
Y3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENo
cm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1do
ZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRl
ckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUg
Ym9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBz
bmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIo
KSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hC
YXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZC
YXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxi
YXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAg
ICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNj
cm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wg
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9p
ZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3Zlcmxh
eUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikp
OwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBj
b3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAg
ICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7
Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJl
Y3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJl
Y3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAg
fQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJh
ck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRv
KGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwg
Y29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBj
b3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0
KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xz
UG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50
UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29y
bmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNv
cm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVy
UmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAo
c2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1
bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xs
YmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNz
KCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJU
aGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNl
dChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dD
b250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRv
IHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0
aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAg
ICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
LSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xs
UmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsK
LSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9z
Y3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikK
LSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMg
Ym9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxi
YXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGlj
YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2Rl
OjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+
cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19
Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0g
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdp
bGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBz
Y3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
LSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFz
dGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJl
ckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNp
dHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNh
dXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRh
dGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAg
ICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFz
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFz
dGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRp
bmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Ny
b2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwot
I2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxl
QXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsK
LSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIg
Y2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0
byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIp
Ci0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAg
ICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxh
eWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRM
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXll
ci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFy
a0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBz
dXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5j
bG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCkt
PnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRo
aXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVy
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRl
ZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVy
OiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0
aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAg
ICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5k
IG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVk
KCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0g
aW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0g
PDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxl
YXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAg
fHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUg
fHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1f
aEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxh
eWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5y
ZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVD
b3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25z
dAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRG
cm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYg
KG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZy
b21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+
c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlm
IChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChy
ZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNp
emVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6
c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYg
KG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVy
Kj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGlu
YXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwot
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUg
Y29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0g
ICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNj
cm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwot
Ci0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0g
b3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQo
b3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxl
TGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVm
dCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50
KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAg
Ci0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQot
ewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCkt
PnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0g
ICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlr
ZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsK
LSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikg
JiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xp
a2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJv
eCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhl
bXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
aGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0g
ICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygp
OwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVz
dCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQot
ICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBp
ZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBu
ZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4K
LSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpv
bnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3Jv
bGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3Io
KSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQot
ICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFy
V2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNj
cm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGlu
Z0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5k
ZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAg
ICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVk
c0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAg
ICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQs
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9j
ay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAg
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5p
c0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkt
PmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAg
IC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAo
bV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGll
bnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFy
KSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9t
IGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFs
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5z
aW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNv
IHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRl
U25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAm
JiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkp
IHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNj
cm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBv
dXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhl
IG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUg
c2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgot
ICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUg
dGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBl
ZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQg
aXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWls
cy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQot
ICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0
KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3Jv
bGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jp
em9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0g
cmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQg
PSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0
ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAot
ICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9z
dExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7
CiAKLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDEx
ODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nhcnkg
dG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVy
TGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAK
LSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBh
dXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5k
ZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5k
ZXJCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJv
b2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lOwogCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsK
KyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRv
IGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENv
cm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwg
Y29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikg
eworICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5l
clJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAw
eCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwg
JyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJu
IHRydWU7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29u
dHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJv
bHMpCi17Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4K
LSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRl
ciJfcyk7CiAKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMg
cGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhl
eSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBp
cyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAg
Ly8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIg
dGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJl
IHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5
ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRo
ZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8v
IHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBn
ZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0
aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAg
ICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92
QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBs
b2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxv
d0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyBibGVuZCBtb2RlIl9zKTsKIAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0g
ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkK
LSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7Cisg
ICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29s
YXRlcyBibGVuZGluZyJfcyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXND
b21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1Rl
eHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAg
ICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUg
YW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3
aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdo
ZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXpl
KGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhl
IHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAo
bV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFt
YWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdl
IGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUK
LSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3Vy
IHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIu
Ci0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJl
Y3QpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBS
ZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7
Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRl
cnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5p
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50
T2Zmc2V0LCBhYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMs
IHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYg
KCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNv
cm5lciA9IHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCk7CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRl
ckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVD
b3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtS
ZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJl
czsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgp
OwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxv
UmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIiku
bGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7
Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5l
clJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3Ju
ZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBj
b250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNv
cm5lckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lcklt
YWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIXJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJT
aXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJl
Y3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiBy
b3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBM
YXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAK
LSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
LQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgp
IC0gb3ZlcmZsb3dSZWN0LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNzcsNDIgKzI4MjQs
NiBAQCBib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxv
Y2FsUG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7
Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxP
ZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFn
cywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250
ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92
ZXJsYXBUZXN0UmVxdWVzdHM7CkBAIC00MjI4LDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qp
Ci17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
ciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVs
ZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDI2MSw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25k
aXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3Zl
cmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWlu
IHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIg
PSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBs
YXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJl
aGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENv
bnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAg
Ym9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6
OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5z
dHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Js
b2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQ2Myw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3Vi
cGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3
ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0g
ICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJh
bWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9
IHNjcm9sbGFibGVBcmVhKCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIDogZmFsc2U7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8
IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5n
ID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsK
ICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGlu
ZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMzNjgsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxh
eWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFn
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJz
ICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvKTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChp
c1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xs
YmFycygpKQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBX
aGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVj
dCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIzNywxMSAr
Mzg0MSwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJl
YSk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsK
ICAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWlu
dGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFp
bnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50
KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsg
bG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3Vu
ZFJlY3QpOwogICAgIH0KQEAgLTUyODAsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2Fs
ZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlv
dXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVh
LmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJl
Y3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFy
ZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAg
IH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBu
dWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZh
bHNlKTsKQEAgLTU1MTEsNyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAg
ICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxv
Y2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBp
ZiAoY2FuUmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5o
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24s
IGxvY2FsUG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTg2
LDM1ICs0MTkyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAg
ICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsm
XShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJl
Y3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRl
ckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29y
bmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5o
ZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRT
aXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIo
KSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0
IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdo
dCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQot
ICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRz
LmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJ
bkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVz
aXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhp
dFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RM
b2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9
IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJv
dW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQog
ewpAQCAtNjA3NSw5ICs0NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHMoKQogICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9s
bGFibGVBcmVhKCk7CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxs
cHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJ
WE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwyMSArNDk1NCw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9i
YWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2Jh
Y2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0
aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBw
YWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9X
aW5kb3coKTsKQEAgLTY0MTksMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRB
cHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAog
ICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0Nv
bXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVy
OjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1NDcsOSArNTEwNywxMCBAQCBib29s
IFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAo
IWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4g
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSB8fCBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFi
bGVSb3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVu
ZGVyZXIoKS5pc1ZpZGVvKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0
KCkKQEAgLTY2NjQsNyArNTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JC
YWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNp
YmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBt
X3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRl
ckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0
KSBjb25zdApAQCAtNjY3NCw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAo
IWhhc1Zpc2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFj
ZWQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY5OSwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNv
bnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNv
bmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3Jv
bGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChi
b3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAg
Ly8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVh
ZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
IHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBz
ZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAv
LyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlz
IHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBh
bm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4K
LSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAm
JiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1gg
IT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwot
Ci0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAh
PSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0K
LSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAg
LTY3NTEsNiArNTI4MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9
CiAKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxh
eWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJp
bGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRl
ZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCAr
NTI5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAg
Ly8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0g
ICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdl
ZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAo
cmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVC
ZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkp
IHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtl
VW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xk
U3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5n
IHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMg
aGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3
ODgsMTMgKzUzMTUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAg
ICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBz
Y3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAg
dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAg
ICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3Jt
KCk7CkBAIC02ODE1LDk4ICs1MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRp
ZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVy
KCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlz
aWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+
dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVy
ZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZh
bHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFt
ZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Ny
b2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0g
ICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7
Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNo
IGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2Ug
YmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBh
IHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFj
dHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0
byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXIt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZh
Y3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsK
LSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdU
Rk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUg
YSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50
KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgq
Y29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsK
LSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxD
b3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVu
ZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXpl
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVz
aXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
cmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIo
KSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9y
ZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0
aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rp
b24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQog
CitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAg
ICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9y
ZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJT
Y3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICgh
aGFzRmlsdGVyKCkpIHsKQEAgLTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3Zl
UmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7
CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICBpZiAoIWJveC5yZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAg
ICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Ny
b2xsYmFyUmVsYXRlZFN0eWxlKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRl
clBhaW50aW5nU3RyYXRlZ3koKQogewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5
IHVzZWQgdG8gcmVuZGVyIHRoZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDM4LDcg
KzU1MTEsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVu
dCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRl
ckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5n
UGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcwNjAsNiArNTUzMywxMSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJh
Y2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRh
dGVUaW1lc3RhbXAoKSB9OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllcjo6c2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLmdldCgpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRh
dGlvblJlYXNvbiByZWFzb24pCiB7CkBAIC03MjYyLDkgKzU3NDAsMTAgQEAgc3RhdGljIHZvaWQg
b3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBX
ZWJDb3JlOjpSZW4KICAgICAgICAgcmV0dXJuICItIjsKICAgICB9OwogCisgICAgYm9vbCBsYXll
ckhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkg
PyBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Io
KSA6IGZhbHNlOwogICAgIHN0cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRpbmdEZXN0aW5hdGlvblN0
cmluZygpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkg
PyAiYyIgOiAiLSIpOwotICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yKCkgPyAicyIgOiAiLSIpOworICAgIHN0cmVhbSA8PCAobGF5ZXJIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IgPyAicyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIu
aGFzVHJhbnNmb3JtZWRBbmNlc3RvcigpID8gInQiIDogIi0iKTsKIAogICAgIHN0cmVhbSA8PCAi
ICI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGExNWQ1MWJmZmY1
Yy4uYmU2MTk3NWExMGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIw
IElnYWxpYSBTLkwuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRz
Y2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJl
bmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJl
bmRlckxheWVyRmlsdGVyczsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9s
bGJhclBhcnQ7CkBAIC0xNDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJs
ZU9wdGlvbnMgewogdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVy
TGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIg
OiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdF
QkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkg
Y29uc3Q7CisgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxsZWQgYmVm
b3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQgb3V0Lgog
ICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykgeyBtX2xheWVy
TGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkZXN0cm95KCk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJvcGFnYXRl
IGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29tcG9zaXRp
bmcgewpAQCAtNDAxLDYgKzQwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVwYWludEluY2x1
ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBsYXllciBjb250ZW50cyBuZWVkIHRvIGJlIHJlcGFp
bnRlZC4gT25seSBoYXMgYW4gZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIgY29tcG9zaXRpbmcgaXMg
YmVpbmcgdXNlZC4KICAgICB2b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFpbnQoR3JhcGhpY3NMYXll
cjo6U2hvdWxkQ2xpcFRvTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlwVG9MYXllcik7CkBAIC00
MTEsOCArNDIxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVl
ZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9v
bCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xh
eWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEw
NyArNDQxLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNp
YmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZp
bmFsOwotCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdo
dCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQm
KTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xs
IHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRT
aXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQot
ICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25z
dCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKIAogICAgIHZvaWQgc2Ny
b2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsK
ICAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVk
U2Nyb2xsOjpObyk7CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKIAogICAgIC8vIFRoZXNl
IGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQg
eCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwg
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQot
ICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNj
cm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0
KGludCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSk7CiAKICAgICAvLyBSZXR1
cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCiAgICAg
Ly8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2Fs
bGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KICAg
ICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Qs
IENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKIAotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8g
ImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZv
aWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJv
b2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAg
ICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVy
biBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBS
ZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAg
IHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29s
IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xs
YmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlk
ZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7
IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBm
aW5hbDsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRz
KCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25j
aWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9p
ZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFs
OwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8g
dG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0
dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxs
eSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSku
Ci0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0KLSAgICBpbnQgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92
ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxi
YXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Owog
ICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25z
dDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29y
bmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRP
dmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNl
KTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6
ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7
Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50
Jik7CiAKICAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2LDkgKzQ4Niw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwog
ICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRp
bmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVy
SW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25J
bmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVD
b21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Bh
Z2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM4
LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JG
b3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJM
YXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMp
IGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29u
c3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMg
Zm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jv
b3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBh
aW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxw
dHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1
bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3Jv
bGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0g
bnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBS
ZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBl
IGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5
U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91
bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVy
Zmxvd0NsaXApCkBAIC03ODUsMTEgKzcxMyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRp
Y0lubGluZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3Np
dGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91
dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAg
IGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zv
cm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9y
bS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTksMTYgKzc4Miw2IEBA
IHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2
b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5h
bDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
ZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBm
aW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBo
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQotICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yOyB9Ci0KICAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdTY29wZSBhcmUg
c2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5j
IHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Nyb2xsaW5nU2Nv
cGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8
U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgog
ICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAg
IGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3Qm
KSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0
OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBi
b29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXll
ckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgog
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25z
dDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRl
RnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApA
QCAtOTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52
YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21w
b3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lv
bkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNv
bnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2Vs
ZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVD
aGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcg
ewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwK
ICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBA
IC0xMDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNl
dCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVy
TGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAg
TGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlv
bigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygp
OwogCisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxh
eWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNl
dDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0
ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5m
byYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZy
b21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2
b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVy
RnJhZ21lbnRzJik7CkBAIC0xMTAwLDY0ICsxMDAzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Ym9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYs
IEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5z
aWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhj
b25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50
JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNm
b3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVy
KiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwK
ICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUq
IHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9C
ZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7
CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29s
IHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVB
cmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJS
ZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmlu
YWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0
SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29u
dGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3Vu
dCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3Qg
ZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZp
bmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lk
ZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkg
Y29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwot
I2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0
IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xs
T2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29u
c3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAg
IHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTEx
OTcsMTQgKzEwNDksNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNv
bHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNj
b3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50
U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2
b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwot
CiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0
aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsg
fQpAQCAtMTIxMywxMSArMTA1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9
CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJm
bG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Owot
ICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVy
Zmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewog
ICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVy
dGljYWxTY3JvbGxiYXI7CkBAIC0xMjMwLDggKzEwNjksNiBAQCBwcml2YXRlOgogICAgIH07CiAg
ICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAK
LSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxv
Y2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRp
bmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpA
QCAtMTI0OCw3ICsxMDg1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0
aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2Ug
cmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7
CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNT
ZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcg
ZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBh
aW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGlu
ZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3Bh
aW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3
ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1Jl
bGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50
U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAg
Ym9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRh
bnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsK
LSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNG
aXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQg
OiAxOwogCkBAIC0xMjc3LDggKzExMTEsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21w
b3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9v
bCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRl
ciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsK
IAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFz
M0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEyODgsMTcgKzExMjAsNiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWRO
b3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lm
IEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7
CiAjZW5kaWYKQEAgLTEzMzksMjUgKzExNjAsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5
ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xs
UG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4g
bV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9m
IG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8g
Rm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgot
ICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZC
YXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2Fj
aGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0Owog
CiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Ny
b2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9s
bGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1
ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hl
ZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0
aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQ
b3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcs
MTAgKzExNzQsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVk
IHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5k
ZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRv
IGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0
cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVu
ZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5j
bG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMg
MCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2Vu
Y2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3OCw2ICsxMTgxLDcgQEAgcHJpdmF0ZToK
IAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7
CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2Vy
OwogfTsKQEAgLTE0NTAsNiArMTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0
IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigp
OyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDUxNGM5
OGVjZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2lu
Y2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgs
MTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92
ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6
VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNp
YmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFt
ZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZl
UmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJm
bG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFn
ZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAg
ICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Ny
b2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VG
b3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVy
YWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAg
ICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtNDM1LDcgKzQzOCw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmFnZSgp
CiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFnZSh0aWxlQ292ZXJhZ2Up
OwogICAgIH0KIAotICAgIGlmIChtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllcikgeworICAgIGlmIChtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgp
LT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYgbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHRpbGVkQmFja2luZyA9IG1fc2Nyb2xsZWRDb250
ZW50c0xheWVyLT50aWxlZEJhY2tpbmcoKSkgewogICAgICAgICAgICAgYXV0byB0aWxlQ292ZXJh
Z2UgPSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZShtX293bmluZ0xheWVyKTsK
ICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VGlsZUNvdmVyYWdlKHRpbGVDb3ZlcmFnZSk7
CkBAIC03NzUsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUN1c3Rv
bUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogc3RhdGljIGJvb2wgbGF5ZXJP
ckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Nyb2xsaW5nKFJlbmRlckxh
eWVyJiBsYXllcikKIHsKICAgICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5ZXI7IGN1cnI7IGN1cnIg
PSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwg
Y3Vyci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICBpZiAoY3Vy
ci0+aGFzVHJhbnNmb3JtKCkgfHwgKGN1cnItPnNjcm9sbGFibGVBcmVhKCkgJiYgY3Vyci0+c2Ny
b2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTcyLDcgKzk3NSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0IFJlbmRlckxheWVyKiBj
b21wb3NpdGluZ0FuY2VzCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAg
CiAgICAgYm9vbCBuZWVkc0Rlc2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9IGZhbHNlOwotICAgIGJv
b2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVyLmhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogCiAgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIElmIGl0J3Mgc2Nyb2xsYWJsZSwg
aXQgaGFzIHRvIGJlIGEgYm94LgpAQCAtMTIyNywxMCArMTIzMCwxMyBAQCBMYXlvdXRSZWN0IFJl
bmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0KGNvbnN0IFJl
bmRlckxheWVyKgogICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVjdCA9IHNuYXBwZWRHcmFw
aGljc0xheWVyKGNsaXBwaW5nQm94T2Zmc2V0LCBjbGlwcGluZ0JveC5zaXplKCksIGRldmljZVNj
YWxlRmFjdG9yKCkpLm1fc25hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAgaWYgKGNvbXBvc2l0ZWRB
bmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKGNv
bXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21wb3NpdGVkQW5jZXN0b3It
PnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewog
ICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFj
a2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRh
aW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAg
ICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Ny
b2xsT2Zmc2V0KCk7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5j
ZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50
R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRp
b24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkg
LSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkp
OwogICAgIH0KIApAQCAtMTM2Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
Ojp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQog
ICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNj
cm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24o
KSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRT
aXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5l
ckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0g
bV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgICAgIFNjcm9sbE9m
ZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAg
ICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNp
emUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZz
ZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5MSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2Vz
dG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxp
bmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVy
ZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25pbmdMYXllci5zY3JvbGxX
aWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBz
Y3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgc2Ny
b2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkK
ICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsK
IApAQCAtMTQ5MCwxNCArMTUwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9j
YXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3Jv
bGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9
PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVBcmVhKTsKKwor
ICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+Y3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBl
OjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxs
eSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJl
Y2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9s
bGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpT
eW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91
bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBz
dWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zm
c2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmlu
Z0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7Cisg
ICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQsOSBAQCB2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNl
c3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBw
ZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0
YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zm
c2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBw
aW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5j
bGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgICAg
ICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAg
ICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0
KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsK
QEAgLTIwMTEsMTIgKzIwMjgsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
TGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBt
X293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiByZXF1aXJlc0xh
eWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJl
c1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1aXJlc0xh
eWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAg
LTIwMjQsMTIgKzIwNDUsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Ny
b2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVuZGVyQm94PihtX293bmluZ0xh
eWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5l
clJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5l
ck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAg
IGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIo
KTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3Jv
bGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZl
cnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOwor
ICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJh
ciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpOwogICAgIHJldHVybiBy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIw
OTAsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNM
YXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNy
ZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29y
bmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xs
aW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAg
IGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3du
aW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVBcmVhID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBp
ZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgq
c2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgaWYgKHZl
cnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxh
YmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0
dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250
YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkK
KyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxl
QXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBw
aW5nLgpAQCAtMjA5OCwxNiArMjEyOSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVj
dHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBt
X293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9
IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8q
IGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRp
b25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRp
bmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXll
ci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAog
ICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAg
ICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9v
d25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5
ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAg
fQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAt
MzA4Niw3ICszMTE2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05l
ZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29u
dGVudCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBl
ZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxl
ZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3du
aW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7
CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAg
ICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxP
ZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9
CkBAIC0zMTMyLDcgKzMxNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRv
TGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBp
ZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExh
eWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAg
ICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVu
dFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBz
Y3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVu
dFJlZ2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRz
KGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExh
eWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgcGFpbnRGbGFncyk7CkBAIC0zNDIwLDE3ICszNDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIs
IEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29u
dGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5o
b3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAg
ICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Ny
b2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Ny
b2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBp
ZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1
dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Ny
b2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAg
ICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBM
YXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRy
YW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9v
d25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVk
SW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJl
c2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFw
cGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5w
YWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9
CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFs
c2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAppbmRleCBjZmM0YWIxNTI4ODYuLjQ3ZTJiZTJhMzExMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYg
KzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xMzk3LDcgKzEz
OTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3RvcgogICAgICAgICBpZiAobGF5ZXJCYWNraW5n
LT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNraW5nLT5hbmNlc3RvckNs
aXBwaW5nU3RhY2soKS0+aGFzQW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAgICAgICAgICAgICB0cmF2
ZXJzYWxTdGF0ZS5sYXllcnNDbGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVuZCgmbGF5ZXIpOwogCi0g
ICAgICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAg
ICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIHRyYXZlcnNh
bFN0YXRlLm92ZXJmbG93U2Nyb2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVyKTsKIAogICAgICAgICBs
YXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAgLTIwMDEsNyArMjAwMiw3
IEBAIHN0YXRpYyBBbmNlc3RvclRyYXZlcnNhbCB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwgRnVuY3RpCiAKIHN0YXRpYyBib29sIGNyZWF0ZXNDbGlwcGlu
Z1Njb3BlKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICByZXR1cm4gbGF5ZXIuaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxh
YmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKIH0KIAogc3RhdGljIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVy
QW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGluZ1Njb3Blcyhjb25zdCBSZW5kZXJMYXllciYgbGF5
ZXIsIGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpCkBAIC0yMDA5LDcgKzIwMTAsNyBAQCBz
dGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3VuZHM+IGVuY2xvc2luZ0Ns
aXBwaW5nU2NvcGVzKGNvbnN0IFJlbgogICAgIFZlY3RvcjxMYXllck92ZXJsYXBNYXA6OkxheWVy
QW5kQm91bmRzPiBjbGlwcGluZ1Njb3BlczsKICAgICBjbGlwcGluZ1Njb3Blcy5hcHBlbmQoeyBj
b25zdF9jYXN0PFJlbmRlckxheWVyJj4ocm9vdExheWVyKSwgeyB9IH0pOwogCi0gICAgaWYgKCFs
YXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNj
cm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRT
Y3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gY2xpcHBpbmdTY29wZXM7CiAKICAg
ICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGxheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFu
Y2VzdG9yTGF5ZXIsIGJvb2wgaW5Db250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCkgewpAQCAtMjA0
MSw3ICsyMDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFkZFRvT3ZlcmxhcE1h
cChMYXllck92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFIKICAgICBhdXRvIGNsaXBwaW5n
U2NvcGVzID0gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMobGF5ZXIsIHJvb3RSZW5kZXJMYXllcigp
KTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxheWVyLmhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYgKGxheWVyLnNjcm9sbGFibGVBcmVhKCkg
JiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
KCkpIHsKICAgICAgICAgLy8gQ29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhlIGNvbXBvc2l0ZWQgc2Ny
b2xsaW5nIGFuY2VzdG9yLCB0aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMu
CiAgICAgICAgIGF1dG8mIHNjcm9sbGluZ1Njb3BlID0gY2xpcHBpbmdTY29wZXMubGFzdCgpOwog
ICAgICAgICBhdXRvJiBzY29wZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUubGF5ZXI7CkBAIC0yODg5
LDcgKzI4OTAsNyBAQCBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBwaW5nU3RhY2soYwogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5yZW5kZXJlcigp
Lmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3JMYXll
ci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgICAgIGlmIChh
bmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxl
QXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaGF2ZU5vblNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVkaWF0ZUxheWVyKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgqY3VycmVudENsaXBwZWRM
YXllciwgYW5jZXN0b3JMYXllcik7CiAgICAgICAgICAgICAgICAgICAgIGhhdmVOb25TY3JvbGxh
YmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllciA9IGZhbHNlOwpAQCAtMjkzMyw3ICsyOTM0LDcg
QEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXN5bmNTY3JvbGxhYmxl
Q29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmQKIAogICAgIFNjcm9sbGluZ05vZGVJRCBjb250YWlu
ZXJTY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIHRyYXZlcnNlQW5jZXN0b3JMYXllcnMoKmVuY2xv
c2luZ0xheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaXND
b250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCAvKmlzUGFpbnRPcmRlckFuY2VzdG9yKi8pIHsKLSAg
ICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Js
b2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yTGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7
CiAgICAgICAgICAgICBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBsYXllclNjcm9sbGluZ05v
ZGVJRChhbmNlc3RvckxheWVyKTsKICAgICAgICAgICAgIHJldHVybiBBbmNlc3RvclRyYXZlcnNh
bDo6U3RvcDsKICAgICAgICAgfQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAgYm9vbCBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlvbihSZW5kZXJMYXllck1v
ZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIFJlcXVpcmVz
Q29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAgaWYgKCFsYXllci5jYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgp
IHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChxdWVyeURhdGEubGF5b3V0VXBUb0Rh
dGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMyNTIsNyBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zvck92ZXJmbG93U2Nyb2xs
aW5nKGNvbnN0IFJlbmRlcgogICAgICAgICByZXR1cm4gbGF5ZXIuaXNDb21wb3NpdGVkKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpOwogfQogCiBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oY29uc3QgUmVu
ZGVyTGF5ZXImIGxheWVyLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5kYW50cywgYm9vbCBoYXMz
RFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIGJvb2wgcGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZykg
Y29uc3QKQEAgLTMyNzMsNyArMzI3NCw3IEBAIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvCiAgICAg
fQogCiAgICAgLy8gSWYgdGhpcyBsYXllciBzY3JvbGxzIGluZGVwZW5kZW50bHkgZnJvbSB0aGUg
bGF5ZXIgdGhhdCBpdCB3b3VsZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0byBnZXQgY29tcG9zaXRl
ZC4KLSAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKKyAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJh
Y2tpbmcgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5zY3JvbGxhYmxlQXJlYSgp
LT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAgICAgICBhdXRvKiBwYWlu
dERlc3RpbmF0aW9uID0gbGF5ZXIucGFpbnRPcmRlclBhcmVudCgpOwogICAgICAgICBpZiAocGFp
bnREZXN0aW5hdGlvbiAmJiBsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRl
ZEFuY2VzdG9yKGxheWVyLCAqcGFpbnREZXN0aW5hdGlvbikgIT0gU2Nyb2xsUG9zaXRpb25pbmdC
ZWhhdmlvcjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBJbmRpcmVjdENvbXBvc2l0aW5nUmVh
c29uOjpPdmVyZmxvd1Njcm9sbFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3ICszMzExLDcgQEAgYm9v
bCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxlU3RpY2t5TGF5ZXIoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWUKIAogICAgIGF1dG8qIGVuY2xvc2luZ092ZXJmbG93TGF5ZXIg
PSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRlU2VsZik7CiAKLSAgICBp
ZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAoZW5jbG9zaW5nT3ZlcmZs
b3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpICYmIGVu
Y2xvc2luZ092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoZW5jbG9zaW5nQWNjZWxlcmF0ZWRPdmVy
Zmxvd0xheWVyKQogICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJhdGVkT3ZlcmZsb3dMYXll
ciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzM0
Miw3ICszMzQzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25z
dHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBSZW5kZXIKIAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNmb3JtLCB3aGljaCBzaG91bGQgbm90IGJlaGF2
ZSBhcyBmaXhlZC4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5ZXIucGFyZW50KCk7IGFu
Y2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoYW5j
ZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgaWYgKGFu
Y2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpLT5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4dCgpICYmIGFuY2VzdG9y
LT5pc0NvbXBvc2l0ZWQoKSAmJiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5pc0ZpeGVkUG9zaXRpb25l
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4ICszMzk0LDEwIEBAIHN0
YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9sbGluZ0xheWVyKGNvbnN0
IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXIgPT0gJmludGVy
bWVkaWF0ZUxheWVyKQogICAgICAgICAgICAgc2F3SW50ZXJtZWRpYXRlTGF5ZXIgPSB0cnVlOwog
Ci0gICAgICAgIGlmIChhbmNlc3RvckxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KGFuY2Vz
dG9yTGF5ZXIpOworICAgICAgICBpZiAoYXV0byogYW5jZXN0b3JMYXllclNjcm9sbGFibGVBcmVh
ID0gYW5jZXN0b3JMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGFu
Y2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4oYW5j
ZXN0b3JMYXllcik7CisgICAgICAgIH0KIAogICAgICAgICBhbmNlc3RvckxheWVyID0gYW5jZXN0
b3JMYXllci0+cGFyZW50KCk7CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3LDcgQEAgc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIoY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLAogCiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9yIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6bGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0NvbXBvc2l0ZWRBbmNlc3Rv
cihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiBjb21wb3NpdGVk
QW5jZXN0b3IpCiB7Ci0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFi
bGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1
cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGJvb2wgY29tcG9zaXRl
ZEFuY2VzdG9ySXNJbnNpZGVTY3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0Myw3ICszNDQ2LDcgQEAg
c3RhdGljIHZvaWQgY29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRPdmVyZmxvd05vZGVzKGNv
bnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hh
aW4gJiYgaXNQYWludE9yZGVyQW5jZXN0b3IpCiAgICAgICAgICAgICByZXR1cm4gQW5jZXN0b3JU
cmF2ZXJzYWw6OlN0b3A7CiAKLSAgICAgICAgaWYgKHNlZW5QYWludE9yZGVyQW5jZXN0b3IgJiYg
IWlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChzZWVuUGFpbnRPcmRlckFuY2VzdG9yICYm
ICFpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIGFwcGVuZE92ZXJmbG93TGF5ZXJOb2RlSUQoYW5j
ZXN0b3JMYXllcik7CiAKICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJhdmVyc2FsOjpDb250aW51
ZTsKQEAgLTM0NTgsNyArMzQ2MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3IgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlvbmluZ0ZvCiAgICAgaWYg
KGxheWVyLnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuIFNj
cm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAgICAgCi0gICAgaWYgKCFsYXllci5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVB
cmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9u
ZTsKIAogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKQEAgLTQ0NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVyTGF5ZXImIGxheWVyLCBT
CiAgICAgICAgIG1fY2xpcExheWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQobm9kZUlEKTsKICNlbmRp
ZgogCi0gICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9kZUlELCBtYWtlV2Vha1B0
cihsYXllcikpOworICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBtX3Nj
cm9sbGluZ05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFrUHRyKCpsYXllci5zY3Jv
bGxhYmxlQXJlYSgpKSk7CiAKICAgICByZXR1cm4gbm9kZUlEOwogfQpAQCAtNDQ3NSw4ICs0NDc5
LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNjcm9sbENvb3JkaW5hdGVk
TGF5ZXJXaXRoUm9sZShSZW5kZXJMYXllciYgbGEKICAgICBhdXRvIHVucmVnaXN0ZXJOb2RlID0g
WyZdKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsKICAgICAgICAgYXV0byBjaGlsZE5vZGVzID0g
c2Nyb2xsaW5nQ29vcmRpbmF0b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlEKTsKICAgICAgICAgZm9y
IChhdXRvIGNoaWxkTm9kZUlEIDogY2hpbGROb2RlcykgewotICAgICAgICAgICAgaWYgKGF1dG8g
d2Vha0xheWVyID0gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQoY2hpbGROb2RlSUQpKQot
ICAgICAgICAgICAgICAgIHdlYWtMYXllci0+c2V0TmVlZHNTY3JvbGxpbmdUcmVlVXBkYXRlKCk7
CisgICAgICAgICAgICBpZiAoYXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEgPSBtX3Njcm9sbGluZ05v
ZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCisgICAgICAgICAgICAgICAgd2Vha1Njcm9s
bGFibGVBcmVhLT5sYXllcigpLnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVwZGF0ZSgpOwogICAgICAg
ICB9CiAKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5yZW1vdmUobm9kZUlEKTsK
QEAgLTQ2NTcsOCArNDY2MSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVj
dCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikg
Y29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMg
bm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3Rv
ckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIu
dmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAo
IWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Ny
b2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBA
IC00Njc4LDExICs0Njg1LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVT
Y3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAg
ICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xh
eWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNl
IHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgp
OworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworCiAgICAgICAgIGF1dG8mIGJhY2tp
bmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXRO
b2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAg
IGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRz
TGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAg
ICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+bGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIH0pOwogICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0NzMwLDEwIEBAIFNjcm9s
bGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JT
Y3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNo
YW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMo
bmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsKIAotICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVl
U3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNl
dFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgbGF5ZXIpOwor
ICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJHZW9t
ZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAgICAgICBBU1NFUlQobGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCAqbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9k
ZUlEOwpAQCAtNTAzNSwxMSArNTA0NywxNCBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xh
eWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAg
IGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwog
Ci0gICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5ZXIuaG9yaXpvbnRhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIg
PSAhbGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xs
YWJsZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9s
bGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKKyAgICBib29s
IGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50LmFkZE9yVXBkYXRlU2Ny
b2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbENv
bnRhaW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsZWRDb250ZW50
c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIucmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Ny
b2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVydGljYWxTY3JvbGxiYXIp
OwogfQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlZ2lz
dGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjMTUxZTIzZDBlZjYuLjJjZDcxY2I4ZjNmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
aApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJVcGRhdGVyLmgiCiAj
aW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KIApAQCAtNjM1LDcg
KzYzNiw3IEBAIHByaXZhdGU6CiAgICAgQ29sb3IgbV92aWV3QmFja2dyb3VuZENvbG9yOwogICAg
IENvbG9yIG1fcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogCi0gICAgSGFzaE1hcDxTY3Jv
bGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVuZGVyTGF5ZXI+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVy
TWFwOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBXZWFrUHRyPFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwOwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I+IG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCmluZGV4IDA1MmE5Yzc1ZTYzNS4uYzdmYzY2YzcwMTNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0xNzYsOCAr
MTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
bmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3JvbGxTbmFwQ29udGFp
bmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5ld1N0eWxlKSkgewog
ICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKSkgewotICAgICAg
ICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICByZW5k
ZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpIHsKICAg
ICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1lVmlldygpOwogICAg
ICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0xOTUsOCArMTk2LDkg
QEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3ggJiYg
c2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZS5z
Y3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6Ok5vbmUp
IHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51cGRhdGVTbmFwT2Zm
c2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAg
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwgc2Nyb2xsU25hcEJv
eC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAgICBzY3Jv
bGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3JT
Y3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVmM2VhYTBjY2Q0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwCkBAIC0wLDAgKzEsMTg0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhl
ciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0
dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5v
cmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBw
cm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVh
ZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2
ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2Ug
dHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90
aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEws
IGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJv
dmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNp
b25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgor
ICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50
IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBM
R1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KFJlbmRlckxheWVyJiBsYXllcikKKyAgICA6IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUp
CisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKGZhbHNlKQorICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2Up
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
KyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNl
KQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkK
KyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFs
c2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKKyAgICAs
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCisgICAgLCBtX3Bvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvblNldChmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCit7Cit9CisKK1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnRh
aW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB1bnJl
Z2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50
LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisKKyAgICBk
ZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lTY3JvbGxi
YXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKKwor
ICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbigpCit7CisgICAg
YXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXllci5yZW5kZXJCb3goKSkg
eworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBh
cyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7CisgICAg
ICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNjcm9sbEFu
aW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIH0KKwor
ICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJl
cigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKK30KKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
K3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3Jv
bGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7Cisg
ICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJl
ZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICByZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5l
bGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKK0lu
dFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRl
cmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVlLCBp
c0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChh
dXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Ny
b2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1J1YmJlckJh
bmRJblByb2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJl
YWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKTsKK30KKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBh
ZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5jb21wb3Np
dG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xheWVyKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24o
T3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIGlmICghcG9zaXRpb24p
IHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigp
OworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IGZhbHNlOworICAgIH0K
KworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb24udmFsdWUoKTsKKyAg
ICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9Y
UG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBv
c2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54
KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFt
cGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24o
cG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQorICAgICAgICBzY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBl
LCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2lu
dCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlv
biYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBp
bmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0o
U2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVy
biBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlz
LCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZp
b3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24p
CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworCisgICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZz
ZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVu
dFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKwor
ICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xh
bXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Nj
cm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZp
b3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0g
Y2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChv
ZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9
PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChuZXdTY3JvbGxPZmZz
ZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJl
bnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3Ry
ZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9u
IDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8
PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisg
ICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+
aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25z
IHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVu
IGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAg
ICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRv
IGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAg
ICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVu
dFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9m
ZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1h
eE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9
IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRX
aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0
V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOworCisg
ICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5l
d1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAg
IH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0
aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50
ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhl
IGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0
dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwo
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zY3JvbGxQb3Np
dGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZpZXcoKTsKKworICAgIC8v
IFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBv
bmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8v
IFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBk
byBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICgh
dmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkg
eworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVz
dCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFt
ZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisgICAgICAgIGlmICgh
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRp
bmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJl
YWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxh
eWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxh
eWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRp
bmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVy
CisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAgICAgICAgaWYgKHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBtX2xheWVyLnNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAgICAgICAgLy8gU2Ny
b2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNj
ZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAorICAgICAgICAgICAg
ICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgc3RhY2tpbmcgY29u
dGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBtX2xheWVyLnN0
YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVz
Y2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1h
eSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVy
ZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOworICAg
ICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyLmZyYW1lKCkpOworICAg
IH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyLmNvbnRhaW5lckZvclJl
cGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBh
ZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1Vw
ZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyLmhhc1Jl
cGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91dFJlY3RzKCkubV9yZXBh
aW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRD
b250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBG
bG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQorICAg
ICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxU
b0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVu
dEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Cisg
ICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXRO
ZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAg
IHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBv
c2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBh
aW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVu
ZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBh
aW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERP
TSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkp
CisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0
KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5m
cmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3
KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJM
YXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAobV9s
YXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAg
ICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxs
IG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25p
bmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYg
KFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXllci5zdGFja2luZ0NvbnRl
eHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAgICAgICBpZiAodXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0
b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29t
cG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxh
eWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCisgICAgICAg
ICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29t
cG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6
T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGgo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9z
Y3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7Cit9CisKK2ludCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25zdAoreworICAgIEFTU0VS
VChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkp
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5j
b21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ug
c25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAg
cmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX21hcnF1ZWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29w
ZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJx
dWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJl
ci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiBy
ZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICAgICAg
bV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9sYXllcik7CisgICAgICAg
IG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBlbHNlIGlmIChtX21hcnF1
ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCBpc1Zpc2libGUg
PSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwor
ICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVk
KCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIW1f
bGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0eWxlKCkudXNlVG91Y2hP
dmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxl
cmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2xheWVy
LmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2xheWVy
LmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xl
OjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRs
ZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2
ZW50KQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIGlmICh1
c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgeworICAgICAgICBpZiAo
YXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29y
ZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5k
bGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsK
KyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxF
dmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOworICAgIGlm
IChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVk
ZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9u
KCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICBy
ZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRo
KCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVp
Z2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAg
IEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNl
dCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KKyAgICBTY3JvbGxPZmZz
ZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
KCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXpl
KCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldEhl
aWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdo
dCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJs
ZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0g
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKKworICAgIGlmIChz
Y3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zm
c2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQorICAgICAg
ICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0
aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJldGNoOworI2Vsc2UKKyAg
ICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJm
bG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAoreworICAgIEFTU0VS
VChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJS
ZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3Jv
bGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRS
ZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWlu
aW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUo
LXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50
UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2lu
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIu
dmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZy
ZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5k
ZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplKCkgY29uc3QKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJl
dHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xp
ZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOworfQorCitJbnRT
aXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQorCitJ
bnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRz
U2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCisg
ICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgo
KSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4o
Y29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAgICBy
ZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uIHJl
YXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2Vk
KHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFu
Z2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0
Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KCk7CisgICAg
fQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCgpCit7CisgICAg
bV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCgpCit7
CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3Jv
bGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3Jv
bGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNp
bmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgbV9sYXllci5w
YWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsK
K30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoaXM8UmVuZGVy
Qm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJv
eD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJv
eC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50
UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CisKKyAg
ICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdo
dCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZC
YXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShj
b25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYm
ICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07CisKKyAgICBib29sIGhh
dmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9
IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgIGJvb2wgcGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIuc3R5bGUoKS5yZXNp
emUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAo
aGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVydGlj
YWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFs
U2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAgIElu
dFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAg
ICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNx
dWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAgICAg
IH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3Vs
dDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFy
UmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFy
UmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAg
ICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdl
VG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAgICBp
ZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgw
LCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxi
YXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXpl
IGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxl
ZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJv
bHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBj
b3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZ
Q29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlmIChz
Y3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3Ju
ZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJl
c3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBzY3Jv
bGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25l
c3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJh
clRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7Cisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9o
QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAg
ICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5
ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIC8v
IElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5l
ZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVj
dHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxzZQorICAgICAgICBzY3Jv
bGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisg
ICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWludFJlY3RhbmdsZShyZXBh
aW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0
ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dz
T3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgICAgIGxheWVyLT5z
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVj
dGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlT
dHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNj
cm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2
ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiBy
ZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKK3sK
KyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAgICAg
ICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dS
b290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9v
dE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9z
dCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5kZXJl
cjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpKTsKKyAgICBh
dXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7Cisg
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBhZ2UoKS5pc01vbml0b3Jp
bmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2
ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwor
ICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7
CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVu
dGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAgaWYg
KCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1
c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5n
ZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7
CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQorewor
ICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
ICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiBy
ZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUu
CisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBp
ZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxi
YXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAg
ICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVy
ZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lp
bmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8g
Y29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBz
dHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwor
ICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK1Nj
cm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fbGF5
ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
cmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IG1fbGF5ZXIuZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAobmV4dExheWVy
LT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV92QmFy
CisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV92QmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOworfQorCitp
bnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8
IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJmbG93Q29udHJv
bHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29y
bmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFtX2hC
YXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAobV92QmFyKSB7
CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwor
ICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Cisg
ICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChy
ZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29y
bmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5
ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Cit7CisgICAgUmVuZGVy
Qm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0KCkgY29u
c3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94
LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dS
ZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVy
Zmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsV2lkdGggPSByb3VuZFRvSW50
KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAgICBtX3Njcm9sbEhlaWdodCA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpOworCisgICAgaW50
IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94
LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRv
SW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxPcmln
aW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZs
b3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAm
JiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgbV9sYXllci5yZW5k
ZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJv
dW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Ny
b2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdo
dCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZs
b3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Ny
b2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29s
IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRv
OworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAgIE92
ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRh
bFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7CisgICAg
Ym9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpT
Y3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVy
biBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0
bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3go
KTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUg
c2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBp
ZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNW
ZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9s
bGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKG1faEJhciAmJiBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQor
ICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBp
ZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgVmVy
dGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGljYWxP
dmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkgbmVl
ZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQuCisg
ICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6b250
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Nyb2xs
QmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkg
JiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAg
ICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNjcm9s
bEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIo
aGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxTY3Jv
bGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBtX2xheWVyLnVwZGF0ZVNlbGZQ
YWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVwYWludCgpOworCisgICAgICAg
IGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJl
bmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKKyAgICAgICAg
ICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+
KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAgICAgICAgICAgICAgICBibG9j
ay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9W
ZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlv
dXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlv
dXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAgICAgIGlmIChwYXJlbnQgJiYg
cGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNCb3goKSkKKyAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXpl
Rm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0KKworICAgIC8vIFNldCB1cCB0
aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBpZiAobV9oQmFyKSB7Cisg
ICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsK
KyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7
CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
LCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwg
bV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50IGNs
aWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAgIGlu
dCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAgICAg
bV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxI
ZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
KTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0
ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUg
YWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVl
KCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxp
ZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAgICAgIC8vIHRvIHB1
bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRv
IHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNs
YW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBt
b2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50
cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUg
dGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmln
aHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxv
d2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRl
dGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQo
KSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9m
ZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQo
c2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlzQ29tcG9zaXRlZCgpKSB7Cisg
ICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAg
ICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAg
ICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBtX2xh
eWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
aWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3Rz
LnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUgbWFk
ZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRvIGFu
eXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25k
IHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAorICAg
IC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWlu
dGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFsc2Us
IGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92
ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdp
bGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAor
ICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRp
bWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8vIHNlY29uZCBwYXNzIGRvZXNu
J3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisgICAg
aWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKSB7
CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0Owor
CisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3MgaWYg
dGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFyICYm
IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJlY3Qg
bG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5tb3Zl
QnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVu
ZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXll
cigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAgICAgIHBhaW50aW5nUm9v
dCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgorICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9ybWFsbHkgbW92ZSBh
bmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcworICAgIC8vIHdp
ZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hl
biB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0
aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUo
YWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUg
c2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgorICAgIGlmICht
X2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBtX2hCYXIt
PnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1h
Z2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2Ug
aGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQor
ICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBh
ZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIFBhaW50IG91ciByZXNp
emVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgorICAg
IHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5lcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxD
b3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICgh
YWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNv
bnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5
IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQg
aXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICBTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVy
UmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBS
ZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNp
emVyU2l6ZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
ID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29y
bmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6
ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVz
aXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVD
b3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVm
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBy
ZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRB
cmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2Ug
PSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJl
c2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUoKTsK
KyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVy
UmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5l
clJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXplQ29y
bmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1h
Z2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAgICAg
IGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFy
ZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFnZVJl
Y3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJlY3Qu
bWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6ZSks
IHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKwor
ICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOworICAgIHJlc2l6
ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFyZXNpemVyQWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29udGV4
dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jlc2l6ZXIpIHsKKyAg
ICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNp
emVyQWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBhIGZy
YW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBz
Y3JvbGxiYXJzIHByZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdo
dCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5U2Ny
b2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xpcChy
ZXNpemVyQWJzUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXpl
ckFic1JlY3Q7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2Vy
Q29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Cisg
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywg
MjE3IH0pOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAgICAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAg
ICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAgIH0K
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250
cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQor
eworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRh
aW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3Mg
aXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNo
b3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQu
c2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xs
YmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOworfQor
CitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5p
c0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5k
ZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cygp
Cit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCisg
ICAgaWYgKCFpczxIVE1MRWxlbWVudD4obV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFt
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRl
ckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpi
b3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKK3sK
KyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQ
YWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZvIHBh
aW50aW5nSW5mbygmbV9sYXllciwgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRC
ZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKKyAgICBtX2xheWVyLnBh
aW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBSZW5kZXJMYXllcjo6UGFpbnRMYXllckZs
YWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91
dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYgKGxheWVyRnJhZ21lbnRz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZElu
dFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuYm9yZGVyQm94UmVjdCgpKTsKKyAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBhdXRvIGNvcm5l
clJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25z
dCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNldEZy
b21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJl
Y3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21l
bnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6
ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAg
ICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0g
b2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5z
aXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdt
ZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZy
YWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5
ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21l
bnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgICAgICAg
ICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQo
KSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8gbV9sYXll
ci5iYWNraW5nKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30K
KworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8g
bV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7
Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9y
U2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBt
X2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dy
b3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRo
ZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCku
YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBPdmVy
ZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZsb3cg
b3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZvaWQg
ZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRyeSB0
byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2VudC4K
KyAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAgYm9v
bCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKHZl
cnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+
c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVybGF5
IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1heSBi
ZSBkaXNhYmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3ZSBu
ZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFyICYm
IG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJhciAm
JiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxv
d1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Nyb2xs
KQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3coKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xs
YWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyLnZp
ZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVy
ZXIudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIGlzVmlz
aWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+
dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVy
ZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZh
bHNlOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1lVmll
dy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChpc1Njcm9sbGFibGUp
IHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Cisg
ICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGFk
ZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOworICAg
ICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAgICAg
ICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5l
ciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQor
ICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBl
dmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfVkFS
SUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRl
cmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gY29ybmVyID0g
cmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQ
c2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBjbGVh
clNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Nj
cm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikp
OworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMg
cGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcik7Cisg
ICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sKKyAg
ICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxlKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJF
bGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsK
KyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFj
dHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIpIHsK
KyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVyKSk7
CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBw
YXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcik7CisgICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBt
X3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpCit7CisgICAgaWYgKG1faEJhcikKKyAg
ICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBt
X3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Cisg
ICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cit9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBh
Y2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lk
ZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5k
bGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIu
ZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNoRXZl
bnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcjsKKyAgICBpZiAoIXJl
bmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxp
ZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LmlzQ29tcG9zaXRlZCgpICYmIG1fbGF5ZXIuYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXllcigp
OworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdpbm5p
bmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gncy4K
KyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQvY29u
dGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1Y2Vy
ID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRS
ZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRhIDwg
LTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVs
dGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOworCisg
ICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1
c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJbnRT
aXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xsRGVs
dGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQoreworICAg
IEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBtX2xheWVyLnJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisKKyAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBv
ZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBv
c2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBv
c2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtu
b3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
ID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJzKGRl
bHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUg
Y2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNldFdp
ZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFu
U2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworT3B0aW9uYWw8
TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsUG9zaXRp
b24oU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3Qs
IGNvbnN0IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXll
ci5hbGxvd3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgYXV0byBzaG91bGRVc2VBbmlt
YXRlZFNjcm9sbCA9IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3JvbGxCZWhhdmlvciBiZWhh
dmlvcikKKyAgICB7CisgICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPSAhbV9sYXll
ci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3Mo
KQorICAgICAgICAgICAgJiYgZWxlbWVudCAmJiB1c2VTbW9vdGhTY3JvbGxpbmcoYmVoYXZpb3Is
IGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPyBBbmltYXRl
ZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgIH07CisKKyAgICBTY3JvbGxP
ZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkpKTsK
KyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5Bbmlt
YXRpb24pIHsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldCgpOworICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwo
Ym94LT5lbGVtZW50KCksIGJlaGF2aW9yKTsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAgICAg
IEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBv
bGRTY3JvbGxPZmZzZXQ7CisKKyAgICAgICAgYXV0byBsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZCA9
IGxvY2FsRXhwb3NlUmVjdDsKKyAgICAgICAgbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQubW92ZSgt
c2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KGJveC0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdFNj
cm9sbGVkKSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEq
KiBzY3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29s
IHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlci5wYXJlbnQo
KSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLnBhcmVudCgpLT5z
dHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyLmhhc092ZXJm
bG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAgICAgICAgU2Nyb2xsT2Zm
c2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7CisgICAgICAgIHNj
cm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEp
CisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAgICAgICAvLyBJZiB0aGlz
IGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQg
Y2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQg
PSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCFyZW1haW5p
bmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIucGFyZW50KCkpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgorICAgICAgICAgICAg
aWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1haW5p
bmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJlbmRlcmVyLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRl
cmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBhcmUgaGVy
ZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNh
bGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNs
aXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNj
cm9sbGVkLgorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVs
dGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJl
YSA9ICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6IElm
IHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9va2lu
ZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpCit7CisgICAgQVNTRVJUKCZtX2xheWVyID09IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCku
bGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBSZW5k
ZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBtX2xheWVyLnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZs
b3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5z
Zm9ybXMpOworICAgIGlmICgmbV9sYXllciAhPSBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmxh
eWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IobV9sYXll
ci5wYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIG1fbGF5ZXIudXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIFJlbmRlckxheWVyOjpJc092ZXJm
bG93U2Nyb2xsKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9j
a1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNl
dHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkuYWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcs
ICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIuZGVidWdEZXNjcmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmIzMzBlNDM5YTliYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFsdGVybmF0aXZlbHksIHRo
ZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgKiBv
ZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEsIGZvdW5kIGF0
CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBMIikgb3IgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91bmQgYXQgaHR0cDovL3d3
dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwiKSwgaW4gd2hpY2ggY2Fz
ZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJlCisgKiBhcHBsaWNhYmxl
IGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91
cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUgdGVybXMgb2Ygb25lIG9m
IHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQTCkgYW5kIG5vdCB0byBh
bGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRo
ZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxldGluZ3RoZSBwcm92aXNp
b25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICogb3RoZXIg
cHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEwsIGFzIHRoZSBjYXNlIG1h
eSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJl
Y2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGFueSBv
ZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlck1hcnF1ZWU7CisKK2NsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBSZW5kZXJMYXllciYgbGF5ZXIoKSB7IHJldHVybiBt
X2xheWVyOyB9CisKKyAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4g
bV9tYXJxdWVlLmdldCgpOyB9CisgICAgdm9pZCB1cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAg
ICB2b2lkIGNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKworICAgIHZvaWQgc3RvcmVTY3JvbGxQ
b3NpdGlvbigpOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgdm9p
ZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsK
KyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAg
IGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsK
KworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAv
LyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVy
Zmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRX
aXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQp
OworCisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmlt
YXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVk
U2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8p
OworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Ny
b2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3Jv
bGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5n
OjpVbmNsYW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xs
VG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIGJvb2wg
c2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGhvcml6
b250YWxTY3JvbGxiYXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigp
OyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRp
Y2FsU2Nyb2xsYmFyKCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKworICAgIFJlZjxT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9p
ZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKworICAgIGJvb2wgcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24g
PSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWly
ZXNSZWNvbmNpbGlhdGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVy
IGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRo
ZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUg
aXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVw
LXRvLWRhdGUpLgorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorCisgICAg
aW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMo
KSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBoaXRUZXN0UmVzaXplcklu
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
TGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3Zl
cmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7
CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVy
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyAgICB2
b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwor
CitwdWJsaWM6CisgICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIG92ZXJyaWRlIFNj
cm9sbGFibGVhQXJlYSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50
U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29s
IGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9v
bCB2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIFNj
cm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zY3Jv
bGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorICAgIFNj
cm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IGZpbmFsOworCisg
ICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYpIGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZp
bmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZp
bmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2
ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xs
KCkgZmluYWw7CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
clNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QgZmluYWw7CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3Jv
bGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRS
ZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIm
LCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJ
RCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNv
bnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBW
aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVy
aGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygp
IGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29s
KiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblBy
b2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1h
aW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0
IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0IGZpbmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBm
aW5hbDsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRT
aXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90
YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5
cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFs
OworCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQorICAgIHZvaWQgc2V0SGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
OyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0
eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNj
cm9sbGJhcnM7IH0KKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uo
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICB2b2lkIGNsZWFy
UmVzaXplcigpOworCisgICAgdm9pZCB1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKTsK
KworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAgIExheW91dFVuaXQgb3Zl
cmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92
ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xS
ZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZsb3dD
b250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsKKwor
ICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAgdm9p
ZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93
KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisKKyAgICBi
b29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAgLy8gTk9URTogVGhpcyBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZy
b20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlv
biYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworCisg
ICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisKKyAg
ICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
KyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOworCisg
ICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRpb24oU2Nyb2xsQmVoYXZp
b3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxvY2Fs
RXhwb3NlUmVjdCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
OworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKK3ByaXZhdGU6CisgICAgLy8gTWlu
aW11bSBwYWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1fc2Nyb2xsSGVpZ2h0KQor
ICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92ZXJm
bG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAx
OworICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJbiB0
aGUgbGF5ZXItb3JkZXIgdHJlZS4KKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworICAg
IGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOworCisgICAgLy8gVGhlIHdp
ZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3JvbGxXaWR0aDsK
KyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXllciYgbV9sYXllcjsKKyAg
ICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNjcm9sbFBvc2l0aW9uIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJm
bG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQb2ludCBt
X2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBSZW5kZXJlcnMgdG8gaG9s
ZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRyPFJl
bmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5kZXJT
Y3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFy
cXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
aW5kZXggN2U5ZjM4MzJkMzZlLi41MjIwMjU5YmVlYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0
Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6
aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODk3LDEwIEBAIGJvb2wg
UmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wgUmVu
ZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7Ci0g
ICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJldHVybiBmYWxzZTsKIH0K
IAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wq
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1
ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmluZGV4
IDc2ZTIzZTRkMDk5Ni4uOWE0ODFhOTdhZjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6OlJlbmRl
ck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAs
IG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAgIGxheWVy
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgQVNTRVJU
KGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBSZW5kZXJN
YXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3Myw5ICsxNzQsOSBAQCB2
b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9zdXNwZW5kZWQgJiYgIW1f
c3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xh
eWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6
OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9z
dGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xh
bXBlZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0
KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBtX3N0b3BwZWQgPSBmYWxz
ZTsKQEAgLTI0NCwxMiArMjQ1LDE1IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgp
CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgaWYg
KG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobV9zdGFydCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG1fc3Rh
cnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFy
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIsNyArMjc2LDcgQEAgdm9p
ZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9vbCBwb3NpdGl2ZSA9IHJh
bmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jpem9udGFsKCkgPyByb3Vu
ZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSA6IHJvdW5kVG9JbnQo
bV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGludCBpbmNy
ZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgp
Lm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAgICBpbnQgY3VycmVudFBv
cyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IG1fbGF5
ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9y
aXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkgOiBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5ld1BvcyA9ICBjdXJyZW50
UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpOwogICAgICAgICBp
ZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1pbihuZXdQb3MsIGVuZFBv
aW50KTsKQEAgLTI4OSw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQo
KQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9Z
T2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9ZT2Zmc2V0
KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0Li4xMTA1MTE3MjNhZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDAxLDcg
KzEwMDEsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6Y29tcHV0ZUZsb2F0
VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGljIHZvaWQgb3V0cHV0UmVu
ZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgc3RyZWFtLm5leHRMaW5l
KCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSli
c29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxv
dyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIChDKW9tcG9zaXRl
ZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAgc3RyZWFtIDw8ICIoQils
b2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2
ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcp
ZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxlQXJlYSwgKEMpb21wb3Np
dGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAgICBzdHJlYW0ubmV4dExp
bmUoKTsKIH0KIApAQCAtMTExNSwxMCArMTExNSwxNCBAQCB2b2lkIFJlbmRlck9iamVjdDo6b3V0
cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgp
CiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAgaWYgKGhhc0xheWVyKCkp
CisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8ICJMIjsKLSAgICBlbHNl
Ci0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3duY2FzdDxSZW5kZXJMYXll
ck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cmVhbSA8PCAi
LSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwogCiAgICAgaWYgKGlzQ29t
cG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uMDExMzg0MWU2YzI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgY2xh
c3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBwdWJsaWMgQ2FuTWFr
ZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93Owog
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJM
YXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIHB1Ymxp
YzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMg
dGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBt
YXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5k
ZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM5NywxOSAr
Mzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxUb3Ao
aW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxl
bWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNv
bHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIg
PSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXll
cigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IHJlbmRlcmVy
LT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9s
bGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hl
ZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Ny
b2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBz
dG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50
KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwo
bG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllciA/
IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChi
b3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6
bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxl
bWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJl
ZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAKaW5kZXggN2MwMWYwMjBmZTgyLi41OTIwZDU4ZjIwYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAtNjAwLDIwICs2MDEs
MjQgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVy
TGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAgICBpZiAobGF5ZXIucmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueSgpOwot
ICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJC
b3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkKLSAgICAgICAgICAg
IHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgpOwotICAgICAgICBp
ZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAgICAgICAgdHMgPDwg
IiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkKKyAgICAgICAgICAg
ICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgp
LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnko
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAm
JiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxX
aWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsKKyAgICAgICAgICAgIGlm
IChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGll
bnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSkKKyAgICAgICAg
ICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
SGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIFNjcm9sbGJh
clRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpOwotICAgICAg
ICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIuaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSkgewotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1hY1RoZW1lID0g
KnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKTsKLSAgICAg
ICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqbGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKSkpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxiYXJIYXNSVExMYXlv
dXREaXJlY3Rpb24iOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01v
Y2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2Fz
dDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7CisgICAgICAgICAgICAgICAg
aWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxlTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhh
c1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZgog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKaW5kZXggYjEw
MzNkYTA3OTMwLi42OTFlNzU1ODdmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5n
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMzLDEwIEBAIHZvaWQgUmVuZGVyV2lkZ2V0
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0
KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICB9CiAK
LSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkKLSAgICAgICAgbGF5
ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlmIChsYXllcigpICYm
IGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRSZXNp
emVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zm
c2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNl
dE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCmluZGV4IGFkNjM3ZmY0NGY5Ni4uZmU1Y2U0MDU5NjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTgzMyw3ICsx
ODM0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdX
aGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVT
Y3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBi
b3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsKKyAgICAgICAgc2Nyb2xs
YWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NTQsOCArMjg1NiwxMCBAQCBFeGNlcHRpb25P
cjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5vZGUq
IG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCkp
CiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94Pihy
ZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJl
bmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5k
ZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5s
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggNWM0OTkzYmFlMDI4Li4yZWU2YmUzYzdmZDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAyMC0xMS0yNiAgTmlrb2xh
cyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBhcmF0
ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6CisgICAgICAg
IFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAg
ICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQK
KyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5l
ZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJ
UCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogRE9NL0RPTUhU
TUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9sbFhPZmZzZXRdKToKKyAgICAg
ICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWU9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRqdXN0Rm9ySU9TQ2FyZXQ6
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xs
RE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTExLTIxICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhbiBFeHBlcmltZW50
YWwgRmVhdHVyZXMgZm9yIHdoZWVsIGV2ZW50IGdlc3R1cmVzIGJlY29taW5nIG5vbi1ibG9ja2lu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCA4NTg0YzIzMWZlZjgu
LmNiYzU2N2UzYmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KQEAg
LTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzgsMTQgQEAgLSAoaW50KXNj
cm9sbFhPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8
fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOwogfQogCiAtIChp
bnQpc2Nyb2xsWU9mZnNldApAQCAtOTEsNyArOTksMTQgQEAgLSAoaW50KXNjcm9sbFlPZmZzZXQK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueSgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOwogfQogCiAtICh2b2lkKXNldFNjcm9s
bFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5CkBAIC0xMTEsMTEgKzEyNiwxNCBA
QCAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5IGFk
anVzdEZvcklPU0NhcmV0OihCT09MKWFkagogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvKiBs
YXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zm
c2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNj
cm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQp
YWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2
MDgzOTJmLi4xMmQxNTllYzhmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QcmludENv
bnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
cldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBA
IC03MzgsOSArNzM5LDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01S
YW5nZSAqKXJhbmdlCiAjZWxzZQogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVu
ZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAg
ICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJl
cigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VS
ZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFs
LCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6
OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxs
b3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAg
ICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
dXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9CkBAIC03NTgsOSArNzYwLDEwIEBAIC0gKHZv
aWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlIHdpdGhJbnNldDoo
Q0dGbG9hdClpbnNldAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigp
KSB7CiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3Np
bmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RU
b1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhl
ZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50
OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Ny
b2xsaW5nOjpZZXN9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogCiAgICAgICAgICAgICBhdXRvIGNv
cmVGcmFtZSA9IGNvcmUoc2VsZik7CiAgICAgICAgICAgICBpZiAoY29yZUZyYW1lKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjIzNmExMWJmMjk2Li41OGRkZTA1ZDcwNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0xMS0yNiAg
Tmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBT
ZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6Cisg
ICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGlu
ZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFj
ZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8g
bm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAg
ICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogV2Vi
Vmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToKKwogMjAyMC0xMS0xOSAgRnVq
aWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbVGV4dHVy
ZU1hcHBlcl0gUmVtb3ZlIG1fdGV4dHVyZU1hcHBlciBmcm9tIFRleHR1cmVNYXBwZXJMYXllcgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNzdjMjYyZTA5NGYuLjJmZGNmOWY5
Y2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0Nyw2ICsxNDcsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
cm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjA0OCw4ICsyMDQ5LDEwIEBA
IGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQogICAg
ICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRob3V0IGhp
dHRpbmcgYW55IG5vZGVzCiAgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnko
bG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVkQXJlYSA9IGNvcmVGcmFt
ZS0+dmlldygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3JvbGxlZEFyZWEpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xsZWRB
cmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0
cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRy
KCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhh
bmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431892"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414907</attachid>
            <date>2020-11-26 09:16:39 -0800</date>
            <delta_ts>2020-11-27 00:12:46 -0800</delta_ts>
            <desc>Patch, v13 (squashed for testing)</desc>
            <filename>patch-v13.diff</filename>
            <type>text/plain</type>
            <size>328057</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li5iMWIzYTI2NzYzYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzODUgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRv
cjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JPdmVyZmxvd0xheWVyIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmVuZEFuZENvbW1pdFVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dFRyYW5zYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aW5jbHVkZVZlcnRp
Y2FsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
Y2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21w
dXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZs
YWdzRm9yVXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpoaXRUZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRQYWludE9y
ZGVyVHJlZVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXll
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tM
YXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Zm9yY2VVcGRhdGVTY3JvbGxi
YXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdElu
dGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
dmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1NpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29u
dGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9z
aXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVy
UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Ig
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxvZ01vY2tT
Y3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93
Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZv
QWZ0ZXJMYXlvdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3Ju
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9y
bVJlc2l6ZXJJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRSZXNpemVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKGlzVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OmxheWVyT3JBbmNlc3RvcklzVHJhbnNmb3JtZWRPclVzaW5n
Q29tcG9zaXRlZFNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdl
b21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNI
b3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
T3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZXNDbGlwcGluZ1Njb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YWRkVG9PdmVybGFwTWFwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUFuY2VzdG9yQ2xpcHBpbmdTdGFjayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmFzeW5jU2Nyb2xsYWJs
ZUNvbnRhaW5lck5vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVJbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6aXNBc3luY1Njcm9sbGFibGVTdGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JT
dGlja3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdDb21wb3NpdGVk
U2Nyb2xsaW5nTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxhdGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxlY3RTdGF0aW9uYXJ5TGF5ZXJSZWxhdGVkT3ZlcmZsb3dOb2Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb29y
ZGluYXRlZFBvc2l0aW9uaW5nRm9yTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6ZGV0YWNoU2Nyb2xsQ29vcmRpbmF0ZWRMYXllcldp
dGhSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50
UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xs
aW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNl
c0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNB
ZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092
ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xs
QW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNh
bFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVy
ZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092
ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZs
b3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xl
YXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1h
cnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVl
TGVnZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2Jq
ZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFp
bnQpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjogY29uc3QpOgorCiAyMDIwLTExLTIyICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gQ29udmVydCBzb21lIHJlbWFpbmlu
ZyBJbmxpbmVCb3ggYWNjZXNzIHRvIHVzZSBpbmxpbmUgaXRlcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CmluZGV4IDM3ODlhYTM4Mzk0MC4uNzUxMTQxODRlMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTE0NjIsNiArMTQ2Miw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKICAgICByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmgKICAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
CisgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMaW5lQm94TGlzdC5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck1lZGlhLmgKICAgICBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI2Mjg5MWVjYzYzLi45
ODNjNWYzZGM2YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMjE3LDYgKzIyMTcsNyBAQCByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllckZpbHRlcnMuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5jcHAKK3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmNwcAogcmVuZGVyaW5nL1JlbmRlckxheW91dFN0YXRlLmNwcAogcmVuZGVyaW5nL1JlbmRlckxp
bmVCb3hMaXN0LmNwcAogcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWQ3NGM3
NDUyMjUuLmQ4MDhkMzdjMzhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA3Myw2ICs0MDczLDcgQEAKIAkJQkNFQTQ4NzYw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzOTA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzQjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0MTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRo
ZW1lTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
Q0VBNDg0ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLzsgfTsKIAkJQkNF
QTQ4OEEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVyVGhlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjAxNSw2ICs2MDE2LDggQEAKIAkJMEY0Q0RFQUEyM0Q5MUE4QTAwMjUxQjAyIC8q
IFNjcm9sbFR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbFR5cGVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODEyMTNCMUJCODAwQzQwRDM0IC8qIENT
U0ZpbHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGaWx0
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MzIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0ZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNTNGQjgzMjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyRmlsdGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4QjIxM0I3Njg0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckxheWVyRmls
dGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTREQ0UzMTg4MTA1MUQw
MDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0QXV0b1NpemluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yOTU4Niw2ICsyOTU4OSw4IEBACiAJCQkJMEY1M0ZCODkyMTNCNzY4NDAwQzQwRDM0IC8q
IFJlbmRlckxheWVyRmlsdGVycy5oICovLAogCQkJCTNDMjQ0RkU1QTM3NUFDNjMzRjg4QkU2RiAv
KiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCAqLywKIAkJCQkzQzI0NEZFNEEzNzVBQzYzM0Y4
OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oICovLAorCQkJCTBGNTNGQjgzMjEzQjc4
NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcCAqLywKKwkJCQkwRjUz
RkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovLAog
CQkJCTJEOTA2NjA0MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5jcHAgKi8s
CiAJCQkJMkQ5MDY2MDUwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggKi8s
CiAJCQkJQkMzM0ZCMUEwRjMwRUU4NTAwMkNERDdDIC8qIFJlbmRlckxpbmVCb3hMaXN0LmNwcCAq
LywKQEAgLTM0MDUzLDYgKzM0MDU4LDcgQEAKIAkJCQkwRjU4MENGRjBGMTJERTlCMDA1MUQ2ODkg
LyogUmVuZGVyTGF5ZXJCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU4MENGRDBGMTJE
RTlCMDA1MUQ2ODkgLyogUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzQzI0NEZFQUEzNzVBQzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY1M0ZCODQyMTNCN0E2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJFMTQxRDQwMDk1
Njk5OCAvKiBSZW5kZXJMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEJFMDMwQTIw
RjMxMTJGQjAwM0MxQTQ2IC8qIFJlbmRlckxpbmVCb3hMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0VBNDg2NDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGluZUJyZWFrLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDdmMmJkYThiZTEzYy4uYTYzOGUxZGY4ZjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0SXRlbS5oIgpAQCAtMzkwMyw3ICszOTA0LDcgQEAgU2Nyb2xsYWJsZUFy
ZWEqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxh
YmxlKCkgY29uc3QKICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7
CisgICAgcmV0dXJuIGJveC5sYXllcigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRv
KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTM5MTYsNyArMzkxNyw5IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3Jv
bGxPZmZzZXQgb3IgU2Nyb2xsUG9zaXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJv
eC5sYXllcigpLT5zY3JvbGxUb09mZnNldChwb2ludCk7CisgICAgQVNTRVJUKGJveC5sYXllcigp
KTsKKyAgICBpZiAgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYx
YzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYg
KzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJl
bmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9s
bFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2Vy
KG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9y
OjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxl
Y3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2
NGUyZS4uMjY5MTZlNjVmNzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc2
LDkgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVlKCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJlbmRlcmVyKCktPmhhc0xheWVyKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZW5kZXJCb3hNb2RlbE9iamVj
dCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFkNWE5Zi4uYWVlMTZlOTk1YzQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3
IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgpAQCAtMjUzLDkgKzI1NCwxMyBAQCB2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERp
ZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0
byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgIGlmICghaW5uZXJMYXllclNjcm9sbGFibGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGJv
b2wgaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZT4oKnJlbmRlcmVyKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDog
aW5uZXJMYXllci0+c2Nyb2xsV2lkdGgoKSwgMCk7Ci0gICAgaW5uZXJMYXllci0+c2Nyb2xsVG9P
ZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFdpZHRo
KCksIDApOworICAgIGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXQpOwogCiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgY2xvc2VTdWdnZXN0
aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDY1ZWIyMDlkNGQz
Ny4uNWIxY2JjM2NhM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04
MCw2ICs4MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNl
dC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0z
NDEsNyArMzQyLDcgQEAgc3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVF
bmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjb25zdCBXaGUKIAogICAgIFJlbmRlckJveCog
Y3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5jbG9zaW5nQm94OwogICAgIHdoaWxlIChj
dXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogYm94TGF5ZXIg
PSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBib3hM
YXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkgPyBjdXJyZW50RW5jbG9zaW5nQm94
LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICAgICAgYXV0
byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwog
ICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5kbGVkOwogICAgICAgICAgICAgaWYgKHBs
YXRmb3JtRXZlbnQpIHsKQEAgLTE1NjIsNyArMTU2Myw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZl
bnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29s
IHNoCiAgICAgICAgICAgICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1v
ZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6
ZXIgPSBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0
LmxvY2FsUG9pbnQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVD
dXJzb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApAQCAtMTkxMiw5ICsxOTEzLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxl
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXll
cikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAg
ICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewor
ICAgICAgICAgICAgaWYgKCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xh
eWVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+
c2Nyb2xsYWJsZUFyZWEoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDMwNThkOTFkZTY1YS4uMTU2MmM2ZjJhMTM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuaCIKQEAgLTI1OTUsNyArMjU5NiwxMCBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYg
KCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhp
cy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOworCisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5
ZXIoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyVmlldy0+bGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxNCwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIg
YW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIg
PSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmIChlbmNs
b3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBT
Y3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAg
IC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjIsNyArMzg3MCwxMSBAQCBTY3Jv
bGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIElu
dFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApA
QCAtNDMyNiw4ICs0MzM4LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwg
eyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNz
aWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkK
LSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVSb290TGF5ZXIt
PnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZp
b3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRp
cnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEzNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk1LDgg
QEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVj
dXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0Mi4uNmUwZjE5MGJhM2Qy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtODE5LDE0ICs4MTksMTUgQEAg
dm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+
aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0g
KmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5s
YXllcigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50
U2Nyb2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9s
bCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxh
eWVyLnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIu
c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxU
eXBlID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNjcm9sbGFi
bGVMYXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6
VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXllci5k
aWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPworICAg
IHNjcm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3
YXlzIGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1p
c3Npb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4
IGFmZDc2ZDI1NmVkMC4uMDA3OTk3ZTJiMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgor
I2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVyTGlz
dEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0Lmgi
CkBAIC03ODQsNyArNzg1LDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFy
ZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkp
CiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJl
dHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiBT
Y3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAppbmRl
eCA3MzkzMTk2NzQ4NzUuLjQyMWIzMDc1YWYwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcApAQCAtOTIsNyArOTIs
NyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRlc1Njcm9sbGluZ0Zvck92
ZXJmbG93TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVybiBsYXllci5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
IDogZmFsc2U7CiB9CiAKIFNjcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Ny
b2xsYWJsZUNvbnRhaW5lck5vZGVJRChjb25zdCBSZW5kZXJPYmplY3QmKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li40ZGYx
MTdhNDk1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAt
NTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
QEAgLTU1Myw3ICs1NTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjplbmRBbmRDb21taXRVcGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXRUcmFuc2FjdGlvbigpCiAKICAgICBmb3IgKGF1dG8qIGJsb2Nr
IDogYmxvY2tzVG9VcGRhdGUpIHsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5oYXNPdmVyZmxvd0Ns
aXAoKSk7Ci0gICAgICAgIGJsb2NrLT5sYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlv
dXQoKTsKKyAgICAgICAgYmxvY2stPmxheWVyKCktPnVwZGF0ZVNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBibG9jay0+bGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CiAgICAgICAgIGJsb2NrLT5jbGVhckxheW91dE92ZXJmbG93KCk7CiAg
ICAgfQogfQpAQCAtNTg0LDggKzU4NywxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQotICAgIGlmIChsYXllcigpKQotICAgICAgICBsYXllcigpLT51cGRhdGVTY3JvbGxJbmZvQWZ0
ZXJMYXlvdXQoKTsKKworICAgIGlmICghbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0KCkKQEAgLTExMTMsOCArMTEyMSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgLy8gei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9i
b3JkZXIsIHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUg
YmFja2dyb3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0Jh
Y2tncm91bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYm
IGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmls
aXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRo
aW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0g
ICAgICAgIGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgp
LCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBh
aW50SW5mby5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8u
c2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tn
cm91bmRPbmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3Zl
cmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0
ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZv
aWQgUmVuZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAxNSwxMiBAQCBib29sIFJl
bmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRT
aXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOwogfQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAt
MjUwMywxMCArMjUxNiwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9u
dEJhc2VsaW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAo
dGhlIGNvbnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdl
bGwsIHdoaWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdp
dmUgdXAgb24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxi
YXIsIG9yIGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBh
biBvdmVyZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0g
ICAgICAgIGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVl
ZSgpIHx8IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxT
Y3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAg
ICAgIDogKGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxP
ZmZzZXQoKS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1
bigpKTsKLSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25v
cmVCYXNlbGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0
aW9uKTsKKyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkg
LT4gYm9vbCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5
UnVuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxPZmZzZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7
CisgICAgICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9y
ZUJhc2VsaW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVj
dGlvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkg
ewogICAgICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxs
IGJhc2VsaW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0
OCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRo
cyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dy
YXAoKSAmJiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJx
dWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBp
ZiAobGF5ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5p
c0hvcml6b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXll
ci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0
aCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4
IDMwN2Y5YjJjN2YyZi4uNTA4YTkyMzMwOWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0
b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIK
ICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOCwxMSArMzE5LDEzIEBAIHZvaWQg
UmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlCiAKICAgICAvLyBJZiBvdXIgem9vbSBmYWN0b3IgY2hhbmdlcyBh
bmQgd2UgaGF2ZSBhIGRlZmluZWQgc2Nyb2xsTGVmdC9Ub3AsIHdlIG5lZWQgdG8gYWRqdXN0IHRo
YXQgdmFsdWUgaW50byB0aGUKICAgICAvLyBuZXcgem9vbWVkIGNvb3JkaW5hdGUgc3BhY2UuCi0g
ICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgJiYgb2xkU3R5bGUgJiYgb2xkU3R5
bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSBuZXdTdHlsZS5lZmZlY3RpdmVab29tKCkpIHsKLSAgICAg
ICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24gPSBsYXllcigpLT5zY3JvbGxQb3NpdGlv
bigpOwotICAgICAgICBmbG9hdCB6b29tU2NhbGVGYWN0b3IgPSBuZXdTdHlsZS5lZmZlY3RpdmVa
b29tKCkgLyBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzY3JvbGxQb3NpdGlv
bi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOwotICAgICAgICBsYXllcigpLT5zZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVm
ZmVjdGl2ZVpvb20oKSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CisgICAgICAgICAg
ICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxl
LmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAg
ICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24p
OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBj
aGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBp
bnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3Jv
bGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7
CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJC
b3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBu
dWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVy
KSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lk
IFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAt
NTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5k
ZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgp
OwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICByZXR1
cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3Io
cGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsK
KworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmlt
YXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdl
LndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9s
bExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcg
Y2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZs
b3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0
dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9z
aXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5l
d1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3As
IHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBX
aGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRp
b24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xs
YWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBj
b25zdApAQCAtODE0LDI0ICs4MjYsMzIgQEAgYm9vbCBSZW5kZXJCb3g6OmZpeGVkRWxlbWVudExh
eXNPdXRSZWxhdGl2ZVRvRnJhbWUoY29uc3QgRnJhbWVWaWV3JiBmcmFtZVZpZXcpIGMKIAogYm9v
bCBSZW5kZXJCb3g6OmluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSBjb25zdAogewotICAg
IHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmICFsYXllcigpLT5oYXNPdmVy
bGF5U2Nyb2xsYmFycygpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiBoYXNPdmVyZmxv
d0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIgJiYgIXNjcm9sbGFibGVMYXllci0+aGFzT3Zlcmxh
eVNjcm9sbGJhcnMoKQogICAgICAgICAmJiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6U2Nyb2xsIHx8IHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pOwogfQog
CiBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiAhbGF5ZXIoKS0+
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyICYmICFzY3JvbGxhYmxlTGF5ZXItPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCkKICAgICAgICAgJiYgKHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OlNjcm9sbCB8fCBzdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRv
KTsKIH0KIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZl
cnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXpl
KCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDog
bnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94
OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTks
MTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29u
c3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIs
IHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5
bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXll
ciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzcsOCBAQCBpbnQgUmVuZGVyQm94Ojpp
bnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6
c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsK
LSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAm
JiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7
CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xs
YWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAq
c3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTEwLDEzIEBAIGJvb2wgUmVu
ZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAg
IGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24g
TWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2lu
ZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlm
IChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQg
PSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dh
cmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAg
c2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChT
Y3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwg
c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwg
bXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAg
ICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVj
dGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Ny
b2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEs
NiArOTQ1LDIwIEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
Qm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVh
KCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVh
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9y
dENvbnN0cmFpbmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpo
aWRkZW4gY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMg
ZmFsc2UgaW4gdGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5
U2Nyb2xsZWQoKSBjb25zdAogewpAQCAtOTM4LDcgKzk3Niw3IEBAIGJvb2wgUmVuZGVyQm94Ojpj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgaGFzTGF5ZXIoKSAmJiBsYXllcigpLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
OworICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBoYXNMYXllcigpICYmIGxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+dXNlc0NvbXBv
c2l0ZWRTY3JvbGxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OmF1dG9zY3JvbGwoY29uc3Qg
SW50UG9pbnQmIHBvc2l0aW9uKQpAQCAtOTk3LDggKzEwMzUsOCBAQCBSZW5kZXJCb3gqIFJlbmRl
ckJveDo6ZmluZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQg
UmVuZGVyQm94OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAo
bGF5ZXIoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJv
bVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xs
YmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNjUsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVy
Qm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAog
ICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRp
b24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07
CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBM
YXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBA
IC0xNTc1LDkgKzE2MTcsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNL
bm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdl
dEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dy
b3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE4
OTQsMTAgKzE5MzcsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3Qo
Y29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5z
ZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVy
UmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJh
Y3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVj
dC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxh
eWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAg
ICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChy
ZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4g
Y2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggM2NkODBiY2Qw
NzJkLi5kZjBlYTFjMDcxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1Vz
ZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQog
CisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
bG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0
aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBy
b290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggYjk4MjdjOGExNGQyLi5iYTVkY2ZhNDAzNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxv
dy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cu
aCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0
ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAgICAg
RmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciA9
IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAtCiAg
ICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgpICsg
ZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ1Rv
cCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxv
Y2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
aWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2lu
Z0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAgIGNv
bnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29udGFp
bmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBjb25z
dHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZp
ZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNreUxv
Y2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3NpbmdD
bGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVm
dCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0Ns
aXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0aW9u
UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNj
cm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRh
aW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdD
bGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0aGlz
fCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGluZ0Fu
ZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAgICBG
bG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2FsVG9D
b250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94KCk7
CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAgICAg
aWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xs
T2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7Ci0g
ICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAg
ICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOworICAg
ICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlw
cGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYgc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWluaW5n
UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxiYXJP
ZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmluZ1Jl
Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA1MjQzZWEx
YzFiMDQuLjFmYjkwZTFjYTg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9i
ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5M
LgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVu
aWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzA0
LDQwICszMDYsMjYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3RE
aXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBt
X2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUp
CiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRU
cmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxz
ZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3Rh
dHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0
eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJs
ZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRh
bnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAs
IG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNG
aXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0
cnVlKQogICAgICwgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9u
Q29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWdu
T2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVh
c29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0g
ICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNjEs
MTYgKzM0OSw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRl
ckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24u
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzgsMjkgKzM1NiwxMCBAQCBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92
ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNp
emVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVy
RmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAt
OTEzLDggKzg3MiwxMCBAQCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4gUmVuZGVyTGF5ZXI6OmZsYWdzRm9yVXBkYXRlTGF5ZQogICAgICAgICBpZiAocGFy
ZW50LT5iZWhhdmVzQXNGaXhlZCgpIHx8IChwYXJlbnQtPnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0
aW9uZWQoKSAmJiAhcGFyZW50LT5oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKCkpKQogICAgICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKIAotICAgICAgICBpZiAocGFyZW50LT5oYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSB8fCBwYXJlbnQtPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKSkKLSAgICAgICAgICAgIGZsYWdzLmFkZChTZWVuQ29tcG9zaXRlZFNj
cm9sbGluZ0xheWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIHBhcmVudFNjcm9sbGFibGVMYXllciA9
IHBhcmVudC0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudFNjcm9s
bGFibGVMYXllci0+aGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgfHwgcGFyZW50U2Ny
b2xsYWJsZUxheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAg
ICAgICAgICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZsYWdzOwpAQCAtOTQ5LDcgKzkxMCw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5
b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
cyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsK
LSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAg
ICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpA
QCAtOTU3LDcgKzkxOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIg
b3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsK
IAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAg
ICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQog
ICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21l
dHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Niw3ICs5MjgsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1h
cCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0
RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAg
ICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNl
dEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dD
b250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVw
ZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAxMyw3ICs5NzUsOCBAQCB2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2Vv
bWV0cnlNYXAsIE9wdGlvblNldAogICAgIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA9IGZsYWdz
LmNvbnRhaW5zKFNlZW5UcmFuc2Zvcm1lZExheWVyKTsKICAgICBtX2hhczNEVHJhbnNmb3JtZWRB
bmNlc3RvciA9IGZsYWdzLmNvbnRhaW5zKFNlZW4zRFRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1f
YmVoYXZlc0FzRml4ZWQgPSBmbGFncy5jb250YWlucyhTZWVuRml4ZWRMYXllcik7Ci0gICAgc2V0
SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdzLmNvbnRhaW5zKFNlZW5Db21wb3Np
dGVkU2Nyb2xsaW5nTGF5ZXIpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZsYWdz
LmNvbnRhaW5zKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpKTsKIAogICAgIC8vIFVwZGF0
ZSB0aGUgcmVmbGVjdGlvbidzIHBvc2l0aW9uIGFuZCBzaXplLgogICAgIGlmIChtX3JlZmxlY3Rp
b24pCkBAIC0xMDM2LDIwICs5OTksMTUgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5GaXhlZExheWVyKTsKICAgICB9CiAKLSAgICBpZiAoaGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgZmxhZ3MuYWRkKFNlZW5Db21wb3NpdGVkU2Nyb2xsaW5nTGF5ZXIpOwogCiAgICAgZm9yIChS
ZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0
cnlNYXAsIGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVk
LCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVl
ZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBi
dXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBk
YXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigp
OwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigp
LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVk
KCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4
ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg3LDYgQEAg
dm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xl
YXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSBy
ZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBS
ZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAg
UmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRo
aXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVz
aE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTog
d2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4g
b3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5l
ZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAg
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93
U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
clNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3
aGVyZQpAQCAtMTIwMiwxMiArMTEzOSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAg
Ly8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0
c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBh
Ym92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAog
ICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5w
b3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjMxLDEwIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9u
ZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUo
KS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBz
dWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNl
dC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVk
UGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBw
b3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBv
c2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlz
SW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+
cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8
UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZs
b3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAg
LTE3MDksMTQgKzE2NDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bihPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNT
RVJUKHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGlu
Z1Njb3BlKCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7
Ci0gICAgICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkK
LSAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQ
b3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxl
QXJlYSA9IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxv
Y2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9s
bFBvc2l0aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5j
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0g
cGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9CiAKLSAgICBpZiAo
aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpKSB7CiAgICAgICAgIGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVu
dHNTY3JvbGxpbmdTY29wZSA9PSBtX2JveFNjcm9sbGluZ1Njb3BlKQogICAgICAgICAgICAgbV9j
b250ZW50c1Njcm9sbGluZ1Njb3BlID0gbmV4dFNjcm9sbGluZ1Njb3BlKCk7CiAgICAgfSBlbHNl
IGlmICghbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlIHx8IG1fY29udGVudHNTY3JvbGxpbmdTY29w
ZSAhPSBtX2JveFNjcm9sbGluZ1Njb3BlKQpAQCAtMTg0Miw5ICsxNzc5LDkgQEAgUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBj
b25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5
ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAg
ICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJF
bGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJl
dHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJM
YXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRv
KiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigp
KQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXll
ciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykg
Y29uc3QKQEAgLTE4NzcsNyArMTgxNCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAg
aWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29u
c2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExh
eWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4
dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Ny
b2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAg
fQpAQCAtMTg4NSw1MCArMTgyMiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlz
SW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRv
ci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4
aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5p
c1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3Jt
YW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdU
cmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBh
cmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0Nyw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9m
ZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAg
ICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVy
LCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNp
YmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zp
c2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3Vj
aE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFj
Y2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNl
bmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkK
IHsKQEAgLTI0OTYsMjg5ICsyMzc2LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2
ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNT
Y3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVy
IHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5n
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xs
aW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9s
bERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBt
YXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gv
c291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25z
dCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lu
bmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAg
ICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNx
cnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlm
IChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVk
RGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQot
ewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSks
IGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsK
LSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBX
ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBv
ZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBv
c2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBv
c2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtu
b3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
ID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEg
PSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRl
bHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUg
Y2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdp
ZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFu
U2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6
IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Ny
b2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNl
OwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5l
Q2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUo
KTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVk
QnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNj
cm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9m
ZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRB
cmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3Jv
bGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAg
ICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3Jv
bGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkg
JiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tp
cHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3Jv
bGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0
aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAg
ICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1
bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEp
Ci0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3
YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/
IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjgy
MzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBw
bHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZz
ZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZh
bHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5
cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFu
aW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRp
b24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRp
b24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcs
IEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9s
bCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykK
LSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3Np
dGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAg
IHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9s
bFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNj
cm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhp
bXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lO
Q19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0
aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNj
cm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcp
OwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNj
cm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZl
QW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsK
LQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDog
c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9s
bE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlw
ZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xs
VHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3Np
dGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5n
KSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxP
ZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhh
dmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
cHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZz
ZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNj
cm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNT
Y3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFt
cGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNl
dCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xs
QW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAh
PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNj
cm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAg
IExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChp
cyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVz
ZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9u
OwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRo
YXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZv
ciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMg
Y29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCBy
ZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAg
ICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChz
Y3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAg
IHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xs
WE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9z
aXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09
IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQp
OwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3
T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9s
bFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBG
SVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNo
YW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8g
VGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1h
aW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcg
PSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91
ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUg
aW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGlu
ZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNv
bXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250
ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0
aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0
IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93
U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdl
dFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikg
ewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBo
aWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAg
ICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1
bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBp
biB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1
cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQg
Y29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsK
LSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlv
biBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6
LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxr
IGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
aW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50
UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25z
LCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgot
ICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVu
dFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJl
cigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJh
bWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RG
b3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVy
KCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBl
ZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1
YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7
Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3Zl
RXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtl
TW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAg
IGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsK
LSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
ZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwt
cmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIo
KS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9v
bCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAg
LTI4MjMsNyArMjQyMCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUo
Y29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRS
ZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0
ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZp
b3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDMwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
UmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQK
ICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAg
ICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJl
c3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8g
VGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNs
aWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwpAQCAtMjg0MywyNCArMjQ0MiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9W
aXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAg
ICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3Jv
bGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50
KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAo
Ym94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAg
ICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRi
IGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVj
dAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJh
ci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1l
IHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0
UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxF
eHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVy
Qm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQo
KSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRl
U2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAg
ICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxv
Y2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWdu
WSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZl
YWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9
IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zm
c2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBh
bmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25z
LmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
RnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6
ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9s
bE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXRE
aWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VU
cmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byBy
ZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVo
YXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0
ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAg
ICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3Vt
ZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2Niw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0
LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMg
d2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQu
CiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2Ny
aXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVj
dCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxl
UmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+
Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5k
ZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUx
LDIzICsyNTQzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5
ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygp
KSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBj
b250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyBy
ZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0g
ICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29u
dGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51
cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRl
ZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3
aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAg
ICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0Fu
ZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRh
dGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21w
b3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQog
TGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3Qm
IHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZp
eGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50
JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4OSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6
ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVt
U2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNp
emUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQu
d2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9s
ZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTM2LDEwMzcgKzI3MTEsMTA5IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3Qg
TGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgcm91bmRUb0ludChiYXNlV2lkdGggKyBkaWZmZXJl
bmNlLndpZHRoKCkpLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICB9CiAKLSAgICBpZiAocmVz
aXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdodCgpKSB7Ci0gICAg
ICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAg
ICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBleHBsaWNpdCAoc2Vl
IDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3PikuCi0gICAgICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFy
Z2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5Cb3R0b20oKSAvIHpv
b21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICB9Ci0gICAgICAgIExheW91
dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0JveFNpemluZ0JvcmRl
ciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwot
ICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7Ci0gICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWlnaHQsIHJv
dW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBDU1NVbml0VHlwZTo6
Q1NTX1BYKTsKLSAgICB9Ci0KLSAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKLQotICAgIC8v
IEZJWE1FIChSYWRhciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2lu
ZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZp
ZXcuCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
b2Zmc2V0KSk7Ci19Ci0KLVNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTm9k
ZUlEKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBiYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUoU2Nyb2xs
Q29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFu
ZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQpCi17Ci0gICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCi0gICAgaWYg
KHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7Ci0gICAgICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVl
bEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZv
clNjcm9sbGluZyh3aGVlbEV2ZW50KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJs
ZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJz
IHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAg
ICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8g
dmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBv
c2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNw
YWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJh
clNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFy
ZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25z
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJl
dGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3Qg
bW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0
byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAo
c2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xs
T2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0g
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6
ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54
KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAg
IGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0
V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxl
V2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRT
aXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAot
ewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQot
SW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVu
ZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5
KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Ny
b2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0Owot
ICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFp
bmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3Jv
bGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBy
ZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQ
b2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2lu
dC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXco
JnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmll
d1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1z
Y3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUo
KTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwg
cm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5
ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lk
dGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUg
PSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250
YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29u
dGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0
SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWln
aHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24g
cmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNv
bjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5k
ZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5z
ZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCku
c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3Jv
bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5v
dGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxl
Y3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENo
cm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6
bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1do
ZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRl
ckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUg
Ym9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBz
bmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIo
KSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hC
YXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZC
YXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxi
YXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Ny
b2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAg
ICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNj
cm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wg
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5z
dHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9p
ZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3Zlcmxh
eUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikp
OwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBj
b3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAg
ICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7
Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJl
Y3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3Jv
bGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJl
Y3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAg
fQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0Nv
bnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJh
ck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRv
KGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwg
Y29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBj
b3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0
KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xz
UG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50
UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29y
bmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNv
cm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVy
UmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAo
c2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1
bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xs
YmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNz
KCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJU
aGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNl
dChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIu
Z2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dD
b250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3Qo
cmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRv
IHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0
aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJl
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJv
bHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAg
ICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsK
LSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xs
UmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsK
LSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9z
Y3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikK
LSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMg
Ym9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAg
IHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25z
dAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxi
YXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGlj
YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYg
KFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2Rl
OjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+
cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19
Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0
OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0
byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0g
ICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVu
ZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFz
UHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9s
bGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3Rv
bVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFy
Q29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0Lmdl
dCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxF
dmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RN
b25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3
aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdp
bGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBz
Y3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93
KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
LSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwot
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFz
dGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJl
ckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNp
dHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5k
aWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNh
dXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRh
dGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAg
ICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFz
U2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFz
dGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRp
bmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Ny
b2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwot
I2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxl
QXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsK
LSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIg
Y2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0
byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIp
Ci0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAg
ICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxh
eWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVW
aWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5l
eHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRM
YXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXll
ci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1
c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFy
a0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBz
dXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5j
bG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCkt
PnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRo
aXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dy
ZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNz
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVy
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRl
ZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVy
OiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0
aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0
KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAg
ICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5k
IG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVk
KCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0g
aW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0g
PDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxl
YXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAg
fHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3Zlcmxh
eVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUg
fHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9s
bGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1f
aEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxh
eWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5y
ZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVD
b3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25z
dAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRG
cm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYg
KG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZy
b21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+
c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlm
IChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChy
ZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNp
emVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6
c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYg
KG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVy
Kj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGlu
YXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJM
YXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwot
ICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUg
Y29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5k
ZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0g
ICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6
Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1
cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNj
cm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwot
Ci0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0g
b3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQo
b3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxl
TGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVm
dCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50
KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAg
Ci0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQot
ewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCkt
PnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0g
ICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBP
dmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250
YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAg
IGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6
U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1
cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlr
ZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsK
LSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikg
JiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xp
a2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJv
eCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhl
bXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5h
cHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
aGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0g
ICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygp
OwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVz
dCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1
aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQot
ICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBp
ZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBW
ZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBu
ZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4K
LSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpv
bnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3Jv
bGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3Io
KSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQot
ICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFy
V2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNj
cm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGlu
Z0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5k
ZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAg
ICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3Zl
cmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVk
c0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAg
ICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQs
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9j
ay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAg
ICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5p
c0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkt
PmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAg
IC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAo
bV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGll
bnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFy
KSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVp
Z2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGll
bnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9t
IGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFs
U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5z
aW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNv
IHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRl
U25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAm
JiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkp
IHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNj
cm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBv
dXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhl
IG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUg
c2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgot
ICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUg
dGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBl
ZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQg
aXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWls
cy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQot
ICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0
KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3Jv
bGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5l
ZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0
aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jp
em9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0g
cmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQg
PSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0
ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgIH0KIAot
ICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9z
dExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7
CiAKLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAvLyBGSVhNRSAoUmFkYXIgNDEx
ODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3Nhcnkg
dG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgogfQogCi1ib29sIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVy
TGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0CiB7Ci0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAK
LSAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KKyAgICBh
dXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5k
ZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CiAKLSAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSByZW5k
ZXJCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJv
b2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpO
b25lOwogCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsK
KyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRv
IGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENv
cm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwg
Y29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChoYXZlUmVzaXplcikg
eworICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5l
clJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICB9
CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK1N0cmluZyBSZW5kZXJMYXll
cjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAw
eCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwg
JyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgcmV0dXJu
IHRydWU7Ci19CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyB0cmFuc2Zvcm0iX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29u
dHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJv
bHMpCi17Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4K
LSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRl
ciJfcyk7CiAKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLSAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMg
cGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhl
eSB3aWxsIHBhaW50Ci0gICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBp
cyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCi0gICAg
Ly8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIg
dGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCi0gICAgLy8gdGhhdCBuZWVkIHRvIGJl
IHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5
ZXIgdHJlZSB0byBydW4sCi0gICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRo
ZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlIAotICAgIC8v
IHNlY29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBn
ZXQgaXQgcmlnaHQuCi0gICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzKSB7Ci0gICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dCA9IHBhaW50T2Zmc2V0OwotCi0gICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0
aGUgc2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCi0gICAg
ICAgIGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92
QmFyICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OwotICAgICAgICBs
b2NhbERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKLSAgICAgICAgaWYgKCFvdmVyZmxv
d0NvbnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyBibGVuZCBtb2RlIl9zKTsKIAotICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0g
ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpOwotICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkK
LSAgICAgICAgICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCk7Cisg
ICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29s
YXRlcyBibGVuZGluZyJfcyk7CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXND
b21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1Rl
eHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAg
ICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQg
dG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChw
YWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zm
c2V0OwotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQ
YWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKLQotICAgIC8vIE1v
dmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gIFdlIG5vcm1hbGx5IG1vdmUg
YW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKLSAgICAvLyB3
aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3RhYmx5IHdo
ZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKLSAgICAvLyBjb250YWlucyBmaXhlZCBwb3Np
dGlvbmVkIGVsZW1lbnRzKS4KLSAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9JbnRTaXpl
KGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKLQotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhl
IHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAo
bV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFy
LT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFt
YWdlUmVjdCk7Ci0KLSAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdl
IGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUK
LSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3Vy
IHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIu
Ci0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJl
Y3QpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorSW50U2l6ZSBS
ZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7
Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRl
cnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5p
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50
T2Zmc2V0LCBhYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMs
IHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYg
KCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNv
cm5lciA9IHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZ
Q29ybmVyKCk7CisgICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZv
aWQgUmVuZGVyTGF5ZXI6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoraW50IFJlbmRl
ckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVD
b3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtS
ZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJl
czsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgp
OwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxv
UmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIiku
bGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgY29udGV4dC5zYXZlKCk7
Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSArIGNvcm5l
clJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6ZXJDb3Ju
ZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwotICAgICAgICBj
b250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgaWYgKHJlc2l6ZUNv
cm5lckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lcklt
YWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwotICAgICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIXJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgRmxvYXRSZWN0IGlt
YWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVy
UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJT
aXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJl
Y3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiBy
b3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlmIChy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBM
YXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKLSAgICByZXNpemVyQWJz
UmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAgIGlmICghcmVzaXplckFic1JlY3QuaW50ZXJz
ZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAK
LSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBp
ZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0
LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsK
LQotICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUp
IGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgotICAgIC8vIENsaXBwaW5nIHdp
bGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgotICAg
IGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAg
ICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOwotICAgICAgICBMYXlvdXRSZWN0IGxh
cmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OwotICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6
ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhl
aWdodCgpICsgMV9sdSkpOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVp
bnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMS4wZik7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudEJsYWNrKTsKLSAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJn
ZXJDb3JuZXIpKTsKLSAgICB9CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgp
IC0gb3ZlcmZsb3dSZWN0LnkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKQEAgLTQxNzcsNDIgKzI4MjQs
NiBAQCBib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxv
Y2FsUG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RP
dmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKLQotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0gICAgcmV0dXJuIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7
Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxP
ZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmpl
Y3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gcGFpbnRGbGFn
cywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZlbnRSZWdpb25Db250
ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCiB7CiAgICAgT3ZlcmxhcFRlc3RSZXF1ZXN0TWFwIG92
ZXJsYXBUZXN0UmVxdWVzdHM7CkBAIC00MjI4LDE3ICsyODM5LDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qp
Ci17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xv
c2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3Vi
dHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5n
SW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlv
ciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVs
ZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDI2MSw3ICsyODYxLDggQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkgbGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25k
aXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBwbHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3Zl
cmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAgICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWlu
IHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAgICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIg
PSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9yZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBs
YXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJl
aGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENv
bnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAg
Ym9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpID8g
bGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgOiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6
OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIHVzZXNDb21wb3NpdGVkU2Nyb2xs
aW5nKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgICAgIGlmIChs
YXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllci0+cmVuZGVyZXIoKS5z
dHlsZSgpLmhhc0JvcmRlclJhZGl1cygpICYmIGFuY2VzdG9yTGF5ZXJJc0luQ29udGFpbmluZ0Js
b2NrQ2hhaW4oKmxheWVyKSkgewpAQCAtNDQ2Myw3ICszMDY0LDggQEAgYm9vbCBSZW5kZXJMYXll
cjo6c2V0dXBGb250U3VicGl4ZWxRdWFudGl6YXRpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBib29sJgogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRpc2FibGUgc3Vi
cGl4ZWwgcXVhbnRpemF0aW9uIGZvciBvdmVyZmxvdyBjbGlwcyBvciBzdWJmcmFtZXMgb25jZSB3
ZSBzY3JvbGwgdGhvc2UKICAgICAvLyB0aGluZ3Mgb24gdGhlIHNjcm9sbGluZyB0aHJlYWQuCi0g
ICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgfHwgKHJlbmRlcmVyKCkuZnJh
bWUoKS5vd25lckVsZW1lbnQoKSk7CisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyA9
IHNjcm9sbGFibGVBcmVhKCkgPyBzY3JvbGxhYmxlQXJlYSgpLT51c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIDogZmFsc2U7CisgICAgYm9vbCBjb250ZW50c1Njcm9sbEJ5UGFpbnRpbmcgPSAocmVu
ZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpIHx8
IChyZW5kZXJlcigpLmZyYW1lKCkub3duZXJFbGVtZW50KCkpOwogICAgIGJvb2wgaXNab29taW5n
ID0gIXBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IoKTsK
ICAgICBpZiAoc2Nyb2xsaW5nT25NYWluVGhyZWFkIHx8IGNvbnRlbnRzU2Nyb2xsQnlQYWludGlu
ZyB8fCBpc1pvb21pbmcpIHsKICAgICAgICAgZGlkUXVhbnRpemVGb250cyA9IGNvbnRleHQuc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCk7CkBAIC00NzY2LDggKzMzNjgsMTAgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxh
eWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFn
cyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJz
ICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvKTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChp
c1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xs
YmFycygpKQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBX
aGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVj
dCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIzNywxMSAr
Mzg0MSwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxh
eWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJl
YSk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsK
ICAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWlu
dGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFp
bnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50
KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsg
bG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJ
bnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICBy
ZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3Vu
ZFJlY3QpOwogICAgIH0KQEAgLTUyODAsNyArMzg4Niw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhp
dFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2Fs
ZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlv
dXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVh
LmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJl
Y3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFy
ZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAg
IH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBu
dWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZh
bHNlKTsKQEAgLTU1MTEsNyArNDExNyw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAg
ICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxv
Y2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBp
ZiAoY2FuUmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5o
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24s
IGxvY2FsUG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChy
ZXN1bHQsIGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTg2
LDM1ICs0MTkyLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21l
bnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAg
ICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsm
XShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJl
Y3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRl
ckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29y
bmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5o
ZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRT
aXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIo
KSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0
IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdo
dCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQot
ICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
ewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRz
LmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJ
bkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVz
aXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhp
dFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RM
b2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9
IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJv
dW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRl
c3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQog
ewpAQCAtNjA3NSw5ICs0NjUyLDEyIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1Nl
bGVjdGlvbkdhcHMoKQogICAgIGlmIChtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNjcm9s
bGFibGVBcmVhKCk7CisKICAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkp
CisgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmVjdC5tb3ZlQnkoLXNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKCFzY3JvbGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxs
cHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5jbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJ
WE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgpAQCAtNjM3NCwyMSArNDk1NCw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNrKCkgY29uc3QKICAgICByZXR1cm4gbV9i
YWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVyKCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIq
IFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2Jh
Y2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBo
aWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0
aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgYm9vbCBw
YWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8fCBiYWNraW5nKCktPnBhaW50c0ludG9X
aW5kb3coKTsKQEAgLTY0MTksMTEgKzQ5ODQsNiBAQCBib29sIFJlbmRlckxheWVyOjpzaG91bGRB
cHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBPcAog
ICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ0Nv
bXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGlu
Z01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxzT3ZlcmZs
b3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOwotfQotCiBib29sIFJlbmRlckxheWVy
OjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxmUGFpbnRpbmdMYXllcigpICYmICFoYXNT
ZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAgLTY1NDcsOSArNTEwNywxMCBAQCBib29s
IFJlbmRlckxheWVyOjpzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3QKICAgICBpZiAo
IWlzTm9ybWFsRmxvd09ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1cm4g
aGFzT3ZlcmxheVNjcm9sbGJhcnMoKQotICAgICAgICB8fCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkKLSAgICAgICAgfHwgcmVuZGVyZXIoKS5pc1RhYmxlUm93KCkKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSAmJiAobV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJh
cnMoKSB8fCBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiByZW5kZXJlcigpLmlzVGFi
bGVSb3coKQogICAgICAgICB8fCByZW5kZXJlcigpLmlzQ2FudmFzKCkKICAgICAgICAgfHwgcmVu
ZGVyZXIoKS5pc1ZpZGVvKCkKICAgICAgICAgfHwgcmVuZGVyZXIoKS5pc0VtYmVkZGVkT2JqZWN0
KCkKQEAgLTY2NjQsNyArNTIyNSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JC
YWNrZ3JvdW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNp
YmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBt
X3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRl
ckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0
KSBjb25zdApAQCAtNjY3NCw3ICs1MjM1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAo
IWhhc1Zpc2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFj
ZWQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1Jl
bmRlclJlcGxhY2VkKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
aGFzT3ZlcmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtNjY5OSwzOCArNTI2MCw2IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNv
bnN0CiAgICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNv
bmNlcHQuCi0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3Jv
bGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChi
b3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAg
Ly8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlv
dXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVh
ZHkgcHJlc2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
IHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSk7Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBz
ZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAv
LyBXaXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlz
IHZpc2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBh
bm90aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4K
LSAgICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAm
JiBvbGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1gg
IT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwot
Ci0gICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAh
PSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0K
LSAgICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hh
bmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewogICAgIHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAg
LTY3NTEsNiArNTI4MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9
CiAKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxh
eWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJp
bGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRl
ZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCAr
NTI5MywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAg
Ly8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0g
ICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdl
ZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAo
cmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVC
ZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkp
IHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtl
VW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xk
U3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAg
ICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5n
IHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMg
aGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3
ODgsMTMgKzUzMTUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAg
ICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBz
Y3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAg
dXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAg
ICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3Jt
KCk7CkBAIC02ODE1LDk4ICs1MzM3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRp
ZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhh
c092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVy
KCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlz
aWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+
dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVy
ZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZh
bHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFt
ZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Ny
b2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0g
ICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7
Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNo
IGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2Ug
YmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBh
IHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFj
dHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0
byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXIt
PmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZh
Y3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsK
LSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdU
Rk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUg
YSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50
KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgp
OwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgq
Y29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsK
LSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxD
b3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVu
ZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJl
cigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXpl
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVz
aXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
cmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIo
KSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9y
ZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0
aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rp
b24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDE4LDI2IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQog
CitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAg
ICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9y
ZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJT
Y3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICgh
aGFzRmlsdGVyKCkpIHsKQEAgLTcwMDQsNiArNTQ1NCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3Zl
UmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVT
Y3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKSB7
CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICBpZiAoIWJveC5yZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAg
ICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT5jb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShudWxscHRyKTsKKyAgICB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Ny
b2xsYmFyUmVsYXRlZFN0eWxlKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRl
clBhaW50aW5nU3RyYXRlZ3koKQogewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5
IHVzZWQgdG8gcmVuZGVyIHRoZSBmaWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDM4LDcg
KzU1MTEsNyBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25z
dCBSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVu
dCgpKQogICAgICAgICByZXR1cm4gcGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1l
UmVuZGVyTGF5ZXIobGF5ZXIpOworICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRl
ckxheWVyKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5n
UGFyZW50RnJhbWVzKCkgY29uc3QKQEAgLTcwNjAsNiArNTUzMywxMSBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJh
Y2tpbmcgeyBtX3BhaW50RnJlcXVlbmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRh
dGVUaW1lc3RhbXAoKSB9OwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllcjo6c2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLmdldCgpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRh
dGlvblJlYXNvbiByZWFzb24pCiB7CkBAIC03MjYyLDkgKzU3NDAsMTAgQEAgc3RhdGljIHZvaWQg
b3V0cHV0UGFpbnRPcmRlclRyZWVSZWN1cnNpdmUoVGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBX
ZWJDb3JlOjpSZW4KICAgICAgICAgcmV0dXJuICItIjsKICAgICB9OwogCisgICAgYm9vbCBsYXll
ckhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkg
PyBsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Io
KSA6IGZhbHNlOwogICAgIHN0cmVhbSA8PCBjb21wb3NpdGVkUGFpbnRpbmdEZXN0aW5hdGlvblN0
cmluZygpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KCkg
PyAiYyIgOiAiLSIpOwotICAgIHN0cmVhbSA8PCAobGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGlu
Z0FuY2VzdG9yKCkgPyAicyIgOiAiLSIpOworICAgIHN0cmVhbSA8PCAobGF5ZXJIYXNDb21wb3Np
dGVkU2Nyb2xsaW5nQW5jZXN0b3IgPyAicyIgOiAiLSIpOwogICAgIHN0cmVhbSA8PCAobGF5ZXIu
aGFzVHJhbnNmb3JtZWRBbmNlc3RvcigpID8gInQiIDogIi0iKTsKIAogICAgIHN0cmVhbSA8PCAi
ICI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IGExNWQ1MWJmZmY1
Yy4uYjhjMzBlMTMxY2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIw
IElnYWxpYSBTLkwuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRz
Y2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQmVoYXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJl
bmRlckxheWVyQmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJl
bmRlckxheWVyRmlsdGVyczsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFz
cyBSZW5kZXJNYXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9s
bGJhclBhcnQ7CkBAIC0xNDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJs
ZU9wdGlvbnMgewogdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVy
TGF5ZXIgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIg
OiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyRmlsdGVyczsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdF
QkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5z
dXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICAvLyBDYWxsZWQgYmVmb3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVl
biBudWxsZWQgb3V0LgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4
LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wg
ZmxhZykgeyBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkZXN0cm95KCk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2Ug
ZmxhZ3MgcHJvcGFnYXRlIGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0g
Y2xhc3MgQ29tcG9zaXRpbmcgewpAQCAtNDAxLDYgKzQwOSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcmVwYWludEluY2x1ZGluZ0Rlc2NlbmRhbnRzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGFibGVBcmVhKCk7CisKICAgICAvLyBJbmRpY2F0ZSB0aGF0IHRoZSBsYXllciBjb250ZW50cyBu
ZWVkIHRvIGJlIHJlcGFpbnRlZC4gT25seSBoYXMgYW4gZWZmZWN0CiAgICAgLy8gaWYgbGF5ZXIg
Y29tcG9zaXRpbmcgaXMgYmVpbmcgdXNlZC4KICAgICB2b2lkIHNldEJhY2tpbmdOZWVkc1JlcGFp
bnQoR3JhcGhpY3NMYXllcjo6U2hvdWxkQ2xpcFRvTGF5ZXIgPSBHcmFwaGljc0xheWVyOjpDbGlw
VG9MYXllcik7CkBAIC00MTEsOCArNDIxLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0g
ICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQo
KTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNv
bnN0OwpAQCAtNDMzLDEwNyArNDQxLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0g
ICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAg
aW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMg
dGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNp
dmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEg
PSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBl
ID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1w
aW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsK
IAogICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0
ZWRTY3JvbGw6Ok5vKTsKICAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNj
cm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xs
Q2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsK
IAogICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9s
bFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xs
T2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNl
dFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAg
IHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIHZvaWQg
c2Nyb2xsVG9YT2Zmc2V0KGludCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSk7
CiAKICAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsYXllciB0aGF0IGlzIHNj
cm9sbGFibGUuCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHJldHVybiB0aGUgUmVuZGVyVmlldydz
IGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3Jv
bGxhYmxlQXJlYS4KICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKIAotICAgIHZvaWQg
YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZp
bmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMgaW4gc2NhbGVkIGRvY3VtZW50IGNvb3Jk
aW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBh
YnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVP
cHRpb25zJik7CiAKLSAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wg
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFyOyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
bik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQotCi0gICAgYm9vbCBob3Jpem9u
dGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxh
YmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KLQotICAgIFNjcm9sbGJhciog
aG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsg
fQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9s
bGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xs
YWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVw
ZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9z
aXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7
IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNp
bGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkg
ZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0
ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUg
bGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRo
ZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KLSAgICBib29sIGNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKLSAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0
aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8g
YmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9Ci0K
LSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2
YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9y
ZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLQotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250
cm9scygpIGNvbnN0OwogICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBs
b2NhbFBvaW50KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZz
ZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAot
ICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlD
b250cm9scyA9IGZhbHNlKTsKLSAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAg
dm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xs
KGNvbnN0IEludFBvaW50Jik7CiAKICAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2
LDkgKzQ4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
dHlsZUNoYW5nZSgpOwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChi
b29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFz
Q29tcG9zaXRlZExheWVySW5FbmNsb3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBl
bnVtIFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRM
YXllcnMsIEluY2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2Rl
KSBjb25zdApAQCAtNjM4LDYgKzU2NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAg
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25z
dDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NG
cmFtZUJvdW5kYXJpZXMpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJl
bmRlckxheWVyKCkgY29uc3Q7CiAKICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2gg
Y2xpcHBpbmcgcmVjdHMgZm9yIHRoaXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxh
eWVyKiBjbGlwcGluZ1Jvb3RGb3JQYWludGluZygpIGNvbnN0OwpAQCAtNjk5LDcgKzYyOCw2IEBA
IHB1YmxpYzoKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0
ciwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBv
bGljeSA9IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25D
b250ZXh0KiA9IG51bGxwdHIpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0
cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7
CiAgICAgICAgIENsaXBSZWN0c0NvbnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVy
LCBDbGlwUmVjdHNUeXBlIGluQ2xpcFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxl
dmFuY3kgaW5PdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplLCBTaG91bGRSZXNwZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xp
cCA9IFJlc3BlY3RPdmVyZmxvd0NsaXApCkBAIC03ODUsMTEgKzcxMyw2IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN0YXRpY0lubGluZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9z
dGF0aWNJbmxpbmVQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9j
a1Bvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0g
cG9zaXRpb247IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZzsgfQotICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9
Ci0jZW5kaWYKLQogICAgIGJvb2wgaGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVy
ZXIoKS5oYXNUcmFuc2Zvcm0oKTsgfQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBo
YXMgdGhlIHRyYW5zZm9ybS1vcmlnaW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgqIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04
NTksMTYgKzc4Miw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVuc3VyZUJh
Y2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0cm95ZWQg
PSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQotICAgIHZvaWQgc2V0SGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29tcG9zaXRl
ZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0KICAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3Jv
bGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIu
IFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4g
Ym94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9
CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5
LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNv
b3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNv
bnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQot
ICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3Jv
bGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxi
YXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCBy
ZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3
LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93
QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVu
dGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVx
dWVudGx5KCk7IH0KIApAQCAtOTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNz
IEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2Us
IFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJl
Z2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXll
clBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAg
ICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAg
ICAgPSAxIDw8IDEsCkBAIC0xMDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBP
cHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAot
ICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBj
b25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRy
ZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUp
IGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJl
dHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVh
ckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsK
KwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29u
dGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29u
dGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBM
YXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91
dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgcm9vdFJlbGF0aXZl
Qm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQmIG9yaWdpbmFs
Q29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMTAwLDY0ICsxMDAzLDEzIEBAIHByaXZh
dGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wgaGl0VGVzdENv
bnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZp
bHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdFJlc2l6
ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJlbmRlckxheWVy
KiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogPSBu
dWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wgbGlzdEJhY2tn
cm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBjb25zdCBMYXlv
dXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0g
ICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotCi0gICAg
Ym9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1ZlcnRpY2Fs
T3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29u
c3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdDsKIAotICAg
IC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lkIGludmFsaWRh
dGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBib29sIGlzQWN0
aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZp
bmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAgIFNjcm9sbGlu
Z05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIEludFJlY3Qgdmlz
aWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxi
YXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6
ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFuZGxpbmdXaGVl
bEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0
aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0Jv
eChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1J1YmJlckJh
bmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJh
cnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkg
Y29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAg
dm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRp
ZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJy
aWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAgdm9pZCBzY3Jv
bGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3Qg
U2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNl
dChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJlbnRTY3JvbGwo
KSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURlc2NlbmRhbnRT
dGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNDksNiBAQCBwcml2YXRlOgogICAgIC8vIENvbnZlcnQg
YSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRha2luZyB0cmFu
c2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9Db250ZW50cyhj
b25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29u
dHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUo
KTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRhdGVSZXNpemVy
U3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZv
cm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXpl
ckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAKICAgICB2b2lk
IHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29tcG9zaXRpbmdE
ZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1Nyw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24g
cmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJlY3RSZWFzb25z
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9CiAKLSAgICBM
YXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd0Jv
dHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3QgT3ZlcmZsb3dD
b250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxiYXI7CiAgICAg
ICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0xMjMwLDggKzEwNjksNiBAQCBwcml2
YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNv
bnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8Q29tcG9zaXRp
bmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1faXNSZW5kZXJW
aWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg1LDYgQEAgcHJpdmF0ZToKICAgICAvLyBLZWVw
cyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXppbmcsIHNvIGV2
ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAgYm9vbCBtX2lu
UmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsK
ICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJZiBoYXZlIG5v
IHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2FsayBvdXIgY2hp
bGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjYwLDE0ICsxMDk2
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBl
bmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAoYW5kIHRoZXJl
Zm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBibGVuZCku
CiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBBIHN0YXRlIGJp
dCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4KLSAgICBib29s
IG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFpbnRTdGF0dXMg
OiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNE
aXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAgICBib29sIG1f
dmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVE
ZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsK
ICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAgICBib29sIG1f
YmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDggKzExMTEsNiBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJbiB0aGUgei1vcmRlciB0
cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6
IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIElu
IHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsK
ICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEyODgsMTcgKzEx
MjAsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
biA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0
aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzksMjUgKzExNjAsMTEgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXpl
OwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxT
aXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBv
ZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+
IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Ny
b2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFy
a2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAg
IE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGlu
Z1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAg
IAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9u
ZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQg
bV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3Np
dGlvbjsKQEAgLTEzNjcsMTAgKzExNzQsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0
ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9y
ZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAg
Ly8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVy
LgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAg
ICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9p
bnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBh
Z2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJl
bmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3OCw2ICsxMTgx
LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+
IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2Jh
Y2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1f
c2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRG
cmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiArMTI1NCwzIEBAIHZvaWQgc2hvd1BhaW50
T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNob3dMYXllclRy
ZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEu
aXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDE2Y2Fk
ZTgwNWFhOS4uMDUxNGM5OGVjZWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2luY2x1ZGUgIlJlbmRl
ckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5k
ZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5nOjpUaWxlQ292
ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3QgUmVuZAogICAg
IFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxlc0R1cmluZ0xp
dmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1c2VNaW5pbWFs
VGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRC
YWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAg
ICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkp
CisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VG
b3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFj
a2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAgIGlmIChzY3Jv
bGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgICAg
ICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNj
cm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVyYWdlOwogfQpA
QCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphZGp1c3RUaWxlZEJh
Y2tpbmdDb3ZlcmFnZSgpCiAgICAgICAgICAgICB0aWxlZEJhY2tpbmctPnNldFRpbGVDb3ZlcmFn
ZSh0aWxlQ292ZXJhZ2UpOwogICAgIH0KIAotICAgIGlmIChtX293bmluZ0xheWVyLmhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllcikgewor
ICAgIGlmIChtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgJiYgbV9z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHRpbGVkQmFja2luZyA9
IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT50aWxlZEJhY2tpbmcoKSkgewogICAgICAgICAgICAg
YXV0byB0aWxlQ292ZXJhZ2UgPSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSht
X293bmluZ0xheWVyKTsKICAgICAgICAgICAgIHRpbGVkQmFja2luZy0+c2V0VGlsZUNvdmVyYWdl
KHRpbGVDb3ZlcmFnZSk7CkBAIC03NzUsNyArNzc4LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZUN1c3RvbUFwcGVhcmFuY2UoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogc3Rh
dGljIGJvb2wgbGF5ZXJPckFuY2VzdG9ySXNUcmFuc2Zvcm1lZE9yVXNpbmdDb21wb3NpdGVkU2Ny
b2xsaW5nKFJlbmRlckxheWVyJiBsYXllcikKIHsKICAgICBmb3IgKGF1dG8qIGN1cnIgPSAmbGF5
ZXI7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnQoKSkgewotICAgICAgICBpZiAoY3Vyci0+aGFz
VHJhbnNmb3JtKCkgfHwgY3Vyci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQor
ICAgICAgICBpZiAoY3Vyci0+aGFzVHJhbnNmb3JtKCkgfHwgKGN1cnItPnNjcm9sbGFibGVBcmVh
KCkgJiYgY3Vyci0+c2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTcyLDcgKzk3
NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKGNvbnN0
IFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdl
ZCA9IHRydWU7CiAgICAgCiAgICAgYm9vbCBuZWVkc0Rlc2NlbmRhbnRzQ2xpcHBpbmdMYXllciA9
IGZhbHNlOwotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgPSBtX293bmluZ0xheWVy
Lmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICBib29sIHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwogCiAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKSB7CiAgICAgICAgIC8vIElmIGl0
J3Mgc2Nyb2xsYWJsZSwgaXQgaGFzIHRvIGJlIGEgYm94LgpAQCAtMTIyNywxMCArMTIzMCwxMyBA
QCBMYXlvdXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5
ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKgogICAgICAgICBwYXJlbnRHcmFwaGljc0xheWVyUmVj
dCA9IHNuYXBwZWRHcmFwaGljc0xheWVyKGNsaXBwaW5nQm94T2Zmc2V0LCBjbGlwcGluZ0JveC5z
aXplKCksIGRldmljZVNjYWxlRmFjdG9yKCkpLm1fc25hcHBlZFJlY3Q7CiAgICAgfQogCi0gICAg
aWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
KSB7CisgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBjb21w
b3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coKSkgewogICAgICAgICBMYXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5k
cyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRS
ZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9y
UmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0
ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3Ig
PSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3Jv
bGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsK
ICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250
YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3Vu
ZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRh
aW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2Nyw3ICsxMzczLDExIEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9z
aXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlv
bihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJC
b3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRT
aXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCks
IHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworCisg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAog
ICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5MSw5IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciog
Y29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9mZnNldENoYW5n
ZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5v
ZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNpemUobV9vd25p
bmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdodCgpKTsKKyAg
ICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyKQor
ICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxX
aWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAgICAgaWYgKHNj
cm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBwYWRkaW5nQm94
T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXRO
ZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zmc2V0IHNjcm9s
bE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0KFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5ZXIuY3VycmVu
dFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byogc2Nyb2xsYWJs
ZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9s
bGFibGVBcmVhKTsKKworICAgIGlmIChzY3JvbGxhYmxlQXJlYS0+Y3VycmVudFNjcm9sbFR5cGUo
KSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9sbGluZyBpcyBoYXBw
ZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgbGF5ZXIgYm91bmRz
IG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4KICAgICAgICAgc2V0
TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBv
c2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVh
LT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxlbWVudCB0aGUgY29udGVudHMgb2Zm
c2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxheWVyLCByYXRoZXIgdGhhbiBhIHBv
c2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29u
dGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTZXQpOwot
ICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9s
bGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjQs
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2Vv
bWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVy
LT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlm
IChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5
LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBl
bnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmln
aW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgt
c2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjgsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxi
YXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
bV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJC
YWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3Jv
bGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDUsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVuZGVy
Qm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNj
cm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVy
dGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFy
ID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNh
bFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2
ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
OwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
QEAgLTIwNjUsMTAgKzIwOTAsMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXll
cnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIs
IG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBp
ZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAg
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7
CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEsIEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
ICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlk
Q2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDMsMTEgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9v
bCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0gICAgaWYgKCFtX293bmluZ0xheWVyLmhh
c1Njcm9sbGJhcnMoKSkKKyAgICBpZiAoIW1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdM
YXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3Jv
bGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2
aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiArMjEyOSwxNSBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAg
ICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAg
IGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisg
ICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsK
ICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29u
dGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxl
TGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVy
KCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMu
dmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXRE
cmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+
dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Ny
b2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRz
TGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTE2LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBo
CiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRz
TGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVj
dCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3Qu
bW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9M
YXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNl
dEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVu
dHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0
KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29u
dGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRD
bGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwg
R3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAg
ICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFp
bnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRl
eHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBAIC0zNDIwLDE3ICszNDU0LDI2IEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIq
IGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3Jh
cGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0g
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIo
bV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7
CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJs
ZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFp
bnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRl
eHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIo
c2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3Qp
OwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigp
KSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNj
cm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9u
KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xp
cCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigp
KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQ
b2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25p
bmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlw
KTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJ
bnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3Jt
ZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNl
dElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBjZmM0YWIxNTI4ODYuLjQ3ZTJiZTJhMzExMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBs
aWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3Lmgi
CkBAIC0xMzk3LDcgKzEzOTgsNyBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRl
QmFja2luZ0FuZEhpZXJhcmNoeShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3RvcgogICAgICAgICBp
ZiAobGF5ZXJCYWNraW5nLT5oYXNBbmNlc3RvckNsaXBwaW5nTGF5ZXJzKCkgJiYgbGF5ZXJCYWNr
aW5nLT5hbmNlc3RvckNsaXBwaW5nU3RhY2soKS0+aGFzQW55U2Nyb2xsaW5nTGF5ZXJzKCkpCiAg
ICAgICAgICAgICB0cmF2ZXJzYWxTdGF0ZS5sYXllcnNDbGlwcGVkQnlTY3JvbGxlcnMtPmFwcGVu
ZCgmbGF5ZXIpOwogCi0gICAgICAgIGlmIChsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpCisgICAgICAgIGlmIChsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNj
cm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAg
ICAgICAgIHRyYXZlcnNhbFN0YXRlLm92ZXJmbG93U2Nyb2xsTGF5ZXJzLT5hcHBlbmQoJmxheWVy
KTsKIAogICAgICAgICBsYXllckJhY2tpbmctPnVwZGF0ZUFmdGVyRGVzY2VuZGFudHMoKTsKQEAg
LTIwMDEsNyArMjAwMiw3IEBAIHN0YXRpYyBBbmNlc3RvclRyYXZlcnNhbCB0cmF2ZXJzZUFuY2Vz
dG9yTGF5ZXJzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgRnVuY3RpCiAKIHN0YXRpYyBib29s
IGNyZWF0ZXNDbGlwcGluZ1Njb3BlKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKIHsKLSAgICBy
ZXR1cm4gbGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgIHJldHVy
biBsYXllci5zY3JvbGxhYmxlQXJlYSgpICYmIGxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKIH0KIAogc3RhdGljIFZlY3RvcjxMYXllck92
ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBlbmNsb3NpbmdDbGlwcGluZ1Njb3Blcyhjb25zdCBS
ZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxheWVyJiByb290TGF5ZXIpCkBAIC0yMDA5
LDcgKzIwMTAsNyBAQCBzdGF0aWMgVmVjdG9yPExheWVyT3ZlcmxhcE1hcDo6TGF5ZXJBbmRCb3Vu
ZHM+IGVuY2xvc2luZ0NsaXBwaW5nU2NvcGVzKGNvbnN0IFJlbgogICAgIFZlY3RvcjxMYXllck92
ZXJsYXBNYXA6OkxheWVyQW5kQm91bmRzPiBjbGlwcGluZ1Njb3BlczsKICAgICBjbGlwcGluZ1Nj
b3Blcy5hcHBlbmQoeyBjb25zdF9jYXN0PFJlbmRlckxheWVyJj4ocm9vdExheWVyKSwgeyB9IH0p
OwogCi0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAg
ICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCkt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gY2xpcHBp
bmdTY29wZXM7CiAKICAgICB0cmF2ZXJzZUFuY2VzdG9yTGF5ZXJzKGxheWVyLCBbJl0oY29uc3Qg
UmVuZGVyTGF5ZXImIGFuY2VzdG9yTGF5ZXIsIGJvb2wgaW5Db250YWluaW5nQmxvY2tDaGFpbiwg
Ym9vbCkgewpAQCAtMjA0MSw3ICsyMDQyLDcgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmFkZFRvT3ZlcmxhcE1hcChMYXllck92ZXJsYXBNYXAmIG92ZXJsYXBNYXAsIGNvbnN0IFIKICAg
ICBhdXRvIGNsaXBwaW5nU2NvcGVzID0gZW5jbG9zaW5nQ2xpcHBpbmdTY29wZXMobGF5ZXIsIHJv
b3RSZW5kZXJMYXllcigpKTsKIAogICAgIExheW91dFJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKGxh
eWVyLmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKSB7CisgICAgaWYgKGxheWVyLnNj
cm9sbGFibGVBcmVhKCkgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yKCkpIHsKICAgICAgICAgLy8gQ29tcHV0ZSBhIGNsaXAgdXAgdG8gdGhl
IGNvbXBvc2l0ZWQgc2Nyb2xsaW5nIGFuY2VzdG9yLCB0aGVuIGNvbnZlcnQgaXQgdG8gYWJzb2x1
dGUgY29vcmRpbmF0ZXMuCiAgICAgICAgIGF1dG8mIHNjcm9sbGluZ1Njb3BlID0gY2xpcHBpbmdT
Y29wZXMubGFzdCgpOwogICAgICAgICBhdXRvJiBzY29wZUxheWVyID0gc2Nyb2xsaW5nU2NvcGUu
bGF5ZXI7CkBAIC0yODg5LDcgKzI4OTAsNyBAQCBWZWN0b3I8Q29tcG9zaXRlZENsaXBEYXRhPiBS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVBbmNlc3RvckNsaXBwaW5nU3RhY2soYwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JM
YXllci5yZW5kZXJlcigpLmhhc0NsaXBPck92ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoYW5jZXN0b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAg
ICAgICAgICAgIGlmIChhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCkgJiYgYW5jZXN0b3JM
YXllci5zY3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoaGF2ZU5vblNjcm9sbGFibGVDbGlwcGluZ0ludGVybWVk
aWF0ZUxheWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2hOb25TY3JvbGxhYmxlQ2xpcCgq
Y3VycmVudENsaXBwZWRMYXllciwgYW5jZXN0b3JMYXllcik7CiAgICAgICAgICAgICAgICAgICAg
IGhhdmVOb25TY3JvbGxhYmxlQ2xpcHBpbmdJbnRlcm1lZGlhdGVMYXllciA9IGZhbHNlOwpAQCAt
MjkzMyw3ICsyOTM0LDcgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXN5bmNTY3JvbGxhYmxlQ29udGFpbmVyTm9kZUlEKGNvbnN0IFJlbmQKIAogICAgIFNjcm9sbGlu
Z05vZGVJRCBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSAwOwogICAgIHRyYXZlcnNlQW5jZXN0
b3JMYXllcnMoKmVuY2xvc2luZ0xheWVyLCBbJl0oY29uc3QgUmVuZGVyTGF5ZXImIGFuY2VzdG9y
TGF5ZXIsIGJvb2wgaXNDb250YWluaW5nQmxvY2tDaGFpbiwgYm9vbCAvKmlzUGFpbnRPcmRlckFu
Y2VzdG9yKi8pIHsKLSAgICAgICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0
b3JMYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgaWYg
KGlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5zY3JvbGxhYmxlQXJlYSgp
ICYmIGFuY2VzdG9yTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpKSB7CiAgICAgICAgICAgICBjb250YWluZXJTY3JvbGxpbmdOb2RlSUQgPSBs
YXllclNjcm9sbGluZ05vZGVJRChhbmNlc3RvckxheWVyKTsKICAgICAgICAgICAgIHJldHVybiBB
bmNlc3RvclRyYXZlcnNhbDo6U3RvcDsKICAgICAgICAgfQpAQCAtMzI0Myw3ICszMjQ0LDcgQEAg
Ym9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JQb3NpdGlv
bihSZW5kZXJMYXllck1vZGVsT2JqZWMKIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJl
cXVpcmVzQ29tcG9zaXRpbmdGb3JPdmVyZmxvd1Njcm9sbGluZyhjb25zdCBSZW5kZXJMYXllciYg
bGF5ZXIsIFJlcXVpcmVzQ29tcG9zaXRpbmdEYXRhJiBxdWVyeURhdGEpIGNvbnN0CiB7Ci0gICAg
aWYgKCFsYXllci5jYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgaWYgKCFsYXllci5z
Y3JvbGxhYmxlQXJlYSgpIHx8ICFsYXllci5zY3JvbGxhYmxlQXJlYSgpLT5jYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChxdWVyeURh
dGEubGF5b3V0VXBUb0RhdGUgPT0gTGF5b3V0VXBUb0RhdGU6Ok5vKSB7CkBAIC0zMjUxLDcgKzMy
NTIsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0Zv
ck92ZXJmbG93U2Nyb2xsaW5nKGNvbnN0IFJlbmRlcgogICAgICAgICByZXR1cm4gbGF5ZXIuaXND
b21wb3NpdGVkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGxheWVyLmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+aGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogfQogCiBJbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUluZGlyZWN0Q29tcG9zaXRpbmdS
ZWFzb24oY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBib29sIGhhc0NvbXBvc2l0ZWREZXNjZW5k
YW50cywgYm9vbCBoYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFudHMsIGJvb2wgcGFpbnRzSW50b1By
b3ZpZGVkQmFja2luZykgY29uc3QKQEAgLTMyNzMsNyArMzI3NCw3IEBAIEluZGlyZWN0Q29tcG9z
aXRpbmdSZWFzb24gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlSW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvCiAgICAgfQogCiAgICAgLy8gSWYgdGhpcyBsYXllciBzY3JvbGxzIGluZGVwZW5k
ZW50bHkgZnJvbSB0aGUgbGF5ZXIgdGhhdCBpdCB3b3VsZCBwYWludCBpbnRvLCBpdCBuZWVkcyB0
byBnZXQgY29tcG9zaXRlZC4KLSAgICBpZiAoIXBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYg
bGF5ZXIuaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkpIHsKKyAgICBpZiAoIXBhaW50
c0ludG9Qcm92aWRlZEJhY2tpbmcgJiYgbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSAmJiBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkgewogICAg
ICAgICBhdXRvKiBwYWludERlc3RpbmF0aW9uID0gbGF5ZXIucGFpbnRPcmRlclBhcmVudCgpOwog
ICAgICAgICBpZiAocGFpbnREZXN0aW5hdGlvbiAmJiBsYXllclNjcm9sbEJlaGFoYXZpb3JSZWxh
dGl2ZVRvQ29tcG9zaXRlZEFuY2VzdG9yKGxheWVyLCAqcGFpbnREZXN0aW5hdGlvbikgIT0gU2Ny
b2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBJbmRpcmVj
dENvbXBvc2l0aW5nUmVhc29uOjpPdmVyZmxvd1Njcm9sbFBvc2l0aW9uaW5nOwpAQCAtMzMxMCw3
ICszMzExLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzQXN5bmNTY3JvbGxhYmxl
U3RpY2t5TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWUKIAogICAgIGF1dG8qIGVuY2xvc2lu
Z092ZXJmbG93TGF5ZXIgPSBsYXllci5lbmNsb3NpbmdPdmVyZmxvd0NsaXBMYXllcihFeGNsdWRl
U2VsZik7CiAKLSAgICBpZiAoZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVy
Zmxvd0xheWVyLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICBpZiAo
ZW5jbG9zaW5nT3ZlcmZsb3dMYXllciAmJiBlbmNsb3NpbmdPdmVyZmxvd0xheWVyLT5zY3JvbGxh
YmxlQXJlYSgpICYmIGVuY2xvc2luZ092ZXJmbG93TGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPmhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgewogICAgICAgICBpZiAoZW5jbG9zaW5n
QWNjZWxlcmF0ZWRPdmVyZmxvd0xheWVyKQogICAgICAgICAgICAgKmVuY2xvc2luZ0FjY2VsZXJh
dGVkT3ZlcmZsb3dMYXllciA9IGVuY2xvc2luZ092ZXJmbG93TGF5ZXI7CiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMzM0Miw3ICszMzQzLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OmlzVmlld3BvcnRDb25zdHJhaW5lZEZpeGVkT3JTdGlja3lMYXllcihjb25zdCBSZW5kZXIKIAog
ICAgIC8vIEZJWE1FOiBIYW5kbGUgZml4ZWQgaW5zaWRlIG9mIGEgdHJhbnNmb3JtLCB3aGljaCBz
aG91bGQgbm90IGJlaGF2ZSBhcyBmaXhlZC4KICAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gbGF5
ZXIucGFyZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnQoKSkgewot
ICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkK
KyAgICAgICAgaWYgKGFuY2VzdG9yLT5zY3JvbGxhYmxlQXJlYSgpICYmIGFuY2VzdG9yLT5zY3Jv
bGxhYmxlQXJlYSgpLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5pc1N0YWNraW5nQ29udGV4
dCgpICYmIGFuY2VzdG9yLT5pc0NvbXBvc2l0ZWQoKSAmJiBhbmNlc3Rvci0+cmVuZGVyZXIoKS5p
c0ZpeGVkUG9zaXRpb25lZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5Myw4
ICszMzk0LDEwIEBAIHN0YXRpYyBSZW5kZXJMYXllciogZW5jbG9zaW5nQ29tcG9zaXRlZFNjcm9s
bGluZ0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGFuY2VzdG9y
TGF5ZXIgPT0gJmludGVybWVkaWF0ZUxheWVyKQogICAgICAgICAgICAgc2F3SW50ZXJtZWRpYXRl
TGF5ZXIgPSB0cnVlOwogCi0gICAgICAgIGlmIChhbmNlc3RvckxheWVyLT5oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5k
ZXJMYXllcio+KGFuY2VzdG9yTGF5ZXIpOworICAgICAgICBpZiAoYXV0byogYW5jZXN0b3JMYXll
clNjcm9sbGFibGVBcmVhID0gYW5jZXN0b3JMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAg
ICAgICAgICAgaWYgKGFuY2VzdG9yTGF5ZXJTY3JvbGxhYmxlQXJlYS0+aGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PFJl
bmRlckxheWVyKj4oYW5jZXN0b3JMYXllcik7CisgICAgICAgIH0KIAogICAgICAgICBhbmNlc3Rv
ckxheWVyID0gYW5jZXN0b3JMYXllci0+cGFyZW50KCk7CiAgICAgfQpAQCAtMzQwNCw3ICszNDA3
LDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb21wb3NpdGVkU2Nyb2xsaW5nTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLAogCiBTY3JvbGxQb3NpdGlvbmluZ0JlaGF2aW9y
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJTY3JvbGxCZWhhaGF2aW9yUmVsYXRpdmVUb0Nv
bXBvc2l0ZWRBbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IFJlbmRlckxh
eWVyJiBjb21wb3NpdGVkQW5jZXN0b3IpCiB7Ci0gICAgaWYgKCFsYXllci5oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkgfHwg
IWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcigp
KQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25pbmdCZWhhdmlvcjo6Tm9uZTsKIAogICAg
IGJvb2wgY29tcG9zaXRlZEFuY2VzdG9ySXNJbnNpZGVTY3JvbGxlciA9IGZhbHNlOwpAQCAtMzQ0
Myw3ICszNDQ2LDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdFN0YXRpb25hcnlMYXllclJlbGF0ZWRP
dmVyZmxvd05vZGVzKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwKICAgICAgICAgaWYgKGlzQ29u
dGFpbmluZ0Jsb2NrQ2hhaW4gJiYgaXNQYWludE9yZGVyQW5jZXN0b3IpCiAgICAgICAgICAgICBy
ZXR1cm4gQW5jZXN0b3JUcmF2ZXJzYWw6OlN0b3A7CiAKLSAgICAgICAgaWYgKHNlZW5QYWludE9y
ZGVyQW5jZXN0b3IgJiYgIWlzQ29udGFpbmluZ0Jsb2NrQ2hhaW4gJiYgYW5jZXN0b3JMYXllci5o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIGlmIChzZWVuUGFpbnRP
cmRlckFuY2VzdG9yICYmICFpc0NvbnRhaW5pbmdCbG9ja0NoYWluICYmIGFuY2VzdG9yTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSAmJiBhbmNlc3RvckxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKICAgICAgICAgICAgIGFwcGVuZE92ZXJmbG93
TGF5ZXJOb2RlSUQoYW5jZXN0b3JMYXllcik7CiAKICAgICAgICAgcmV0dXJuIEFuY2VzdG9yVHJh
dmVyc2FsOjpDb250aW51ZTsKQEAgLTM0NTgsNyArMzQ2MSw3IEBAIFNjcm9sbFBvc2l0aW9uaW5n
QmVoYXZpb3IgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29vcmRpbmF0ZWRQb3NpdGlv
bmluZ0ZvCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSkKICAg
ICAgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uaW5nQmVoYXZpb3I6Ok5vbmU7CiAgICAgCi0gICAg
aWYgKCFsYXllci5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSkKKyAgICBpZiAoIWxh
eWVyLnNjcm9sbGFibGVBcmVhKCkgfHwgIWxheWVyLnNjcm9sbGFibGVBcmVhKCktPmhhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpKQogICAgICAgICByZXR1cm4gU2Nyb2xsUG9zaXRpb25p
bmdCZWhhdmlvcjo6Tm9uZTsKIAogICAgIGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhp
cy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKQEAgLTQ0NDAsNyArNDQ0Myw4IEBAIFNjcm9sbGlu
Z05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFNjcm9sbGluZ05vZGUoUmVuZGVy
TGF5ZXImIGxheWVyLCBTCiAgICAgICAgIG1fY2xpcExheWVyLT5zZXRTY3JvbGxpbmdOb2RlSUQo
bm9kZUlEKTsKICNlbmRpZgogCi0gICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5hZGQobm9k
ZUlELCBtYWtlV2Vha1B0cihsYXllcikpOworICAgIEFTU0VSVChsYXllci5zY3JvbGxhYmxlQXJl
YSgpKTsKKyAgICBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmFkZChub2RlSUQsIG1ha2VXZWFr
UHRyKCpsYXllci5zY3JvbGxhYmxlQXJlYSgpKSk7CiAKICAgICByZXR1cm4gbm9kZUlEOwogfQpA
QCAtNDQ3NSw4ICs0NDc5LDggQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmRldGFjaFNj
cm9sbENvb3JkaW5hdGVkTGF5ZXJXaXRoUm9sZShSZW5kZXJMYXllciYgbGEKICAgICBhdXRvIHVu
cmVnaXN0ZXJOb2RlID0gWyZdKFNjcm9sbGluZ05vZGVJRCBub2RlSUQpIHsKICAgICAgICAgYXV0
byBjaGlsZE5vZGVzID0gc2Nyb2xsaW5nQ29vcmRpbmF0b3IuY2hpbGRyZW5PZk5vZGUobm9kZUlE
KTsKICAgICAgICAgZm9yIChhdXRvIGNoaWxkTm9kZUlEIDogY2hpbGROb2RlcykgewotICAgICAg
ICAgICAgaWYgKGF1dG8gd2Vha0xheWVyID0gbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQo
Y2hpbGROb2RlSUQpKQotICAgICAgICAgICAgICAgIHdlYWtMYXllci0+c2V0TmVlZHNTY3JvbGxp
bmdUcmVlVXBkYXRlKCk7CisgICAgICAgICAgICBpZiAoYXV0byB3ZWFrU2Nyb2xsYWJsZUFyZWEg
PSBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwLmdldChjaGlsZE5vZGVJRCkpCisgICAgICAgICAg
ICAgICAgd2Vha1Njcm9sbGFibGVBcmVhLT5sYXllcigpLnNldE5lZWRzU2Nyb2xsaW5nVHJlZVVw
ZGF0ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgbV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5y
ZW1vdmUobm9kZUlEKTsKQEAgLTQ2NTcsOCArNDY2MSwxMSBAQCBTY3JvbGxpbmdOb2RlSUQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRDb25zdHJh
aW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Ny
b2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJMYXllciog
YW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXllciBuZWVk
cyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVuY2UuCi0g
ICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExh
eW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JMYXllcikg
eworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNp
emUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0KIAogICAg
IExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4obGF5ZXIu
cmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0Njg1LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQs
IFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExheWVyKCks
IHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
fSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUFyZWEpOworCiAgICAg
ICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3JvbGxpbmdD
b29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIo
KSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5z
Y3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51
bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwg
bGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAgc2Nyb2xs
YWJsZUFyZWEtPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxhYmxlQXJlYS0+
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0KIH0KIApAQCAtNDcyMCw4ICs0
NzMwLDEwIEBAIFNjcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNj
cm9sbGluZ05vZGVGb3JTY3JvbGxpbmdSb2xlKFJlbmRlCiAgICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllcikKICAgICAgICAgICAgIHVwZGF0ZVNjcm9s
bGluZ05vZGVMYXllcnMobmV3Tm9kZUlELCBsYXllciwgKnNjcm9sbGluZ0Nvb3JkaW5hdG9yKTsK
IAotICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXJH
ZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKQotICAgICAgICAgICAgc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05v
ZGVJRCwgbGF5ZXIpOworICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VG
bGFnczo6TGF5ZXJHZW9tZXRyeSAmJiB0cmVlU3RhdGUucGFyZW50Tm9kZUlEKSB7CisgICAgICAg
ICAgICBBU1NFUlQobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3
Tm9kZUlELCAqbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gbmV3Tm9kZUlEOwpAQCAtNTAzNSwxMSArNTA0NywxNCBAQCB2b2lkIExlZ2FjeVdl
YktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRl
ckxheWVyJiBsYQogICAgIGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNT
RVJUKGJhY2tpbmcpOwogCi0gICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5
ZXIuaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVy
dGljYWxTY3JvbGxiYXIgPSAhbGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Ny
b2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKTsKKyAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVy
LT52ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50
LmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJh
Y2tpbmctPnNjcm9sbENvbnRhaW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+
c2Nyb2xsZWRDb250ZW50c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIu
cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBh
bGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFi
bGVUb3RhbENvbnRlbnRzU2l6ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVy
dGljYWxTY3JvbGxiYXIpOwogfQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29v
cmRpbmF0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAppbmRleCBjMTUxZTIzZDBlZjYu
LjJjZDcxY2I4ZjNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXJVcGRhdGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQu
aD4KIApAQCAtNjM1LDcgKzYzNiw3IEBAIHByaXZhdGU6CiAgICAgQ29sb3IgbV92aWV3QmFja2dy
b3VuZENvbG9yOwogICAgIENvbG9yIG1fcm9vdEV4dGVuZGVkQmFja2dyb3VuZENvbG9yOwogCi0g
ICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFdlYWtQdHI8UmVuZGVyTGF5ZXI+PiBtX3Njcm9s
bGluZ05vZGVUb0xheWVyTWFwOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBXZWFrUHRy
PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+PiBtX3Njcm9sbGluZ05vZGVUb0xheWVyTWFwOwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExlZ2FjeVdlYktp
dFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I+IG1fbGVnYWN5U2Nyb2xsaW5nTGF5ZXJDb29yZGlu
YXRvcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IDA1MmE5Yzc1ZTYzNS4uYzdmYzY2YzcwMTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
Y3BwCkBAIC0xNzYsOCArMTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBz
Y3JvbGxTbmFwQ29udGFpbmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUs
IG5ld1N0eWxlKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5
ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0g
ICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAg
ICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zm
c2V0cygpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJl
bmRlcmVyKCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZy
YW1lVmlldygpOwogICAgICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBA
IC0xOTUsOCArMTk2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNj
cm9sbFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAg
ICAgIGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0
cmljdG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigp
LT51cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxh
eWVyKCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBP
ZmZzZXRzKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxT
bmFwU3RhdGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkg
fHwgc2Nyb2xsU25hcEJveC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTVmM2VhYTBj
Y2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuY3BwCkBAIC0wLDAgKzEsMTg0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKKyAgICA6IG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKKyAgICAs
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorICAgICwgbV9oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxl
T3ZlcmZsb3coZmFsc2UpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKKyAgICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24oZmFsc2UpCisgICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhmYWxzZSkKKyAgICAsIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCisgICAgLCBt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldChmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIp
Cit7Cit9CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsK
KyNlbmRpZgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQor
ICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3Np
dGlvbik7CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAg
IGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVB
cmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVy
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3Np
dGlvbigpCit7CisgICAgYXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50
KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXll
ci5yZW5kZXJCb3goKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhl
IHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVk
LgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBv
c2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKKyAgICAg
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24pOworICAgIH0KKworICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJ
bnRQb2ludCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVu
dCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGlu
ZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBp
ZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hF
dmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVy
LmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkg
fHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAg
ICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5k
bGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYWJs
ZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLnJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNm
b3JtcyAqLyB0cnVlLCBpc0luc2lkZUZpeGVkKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1VzZXJTY3JvbGxJblBy
b2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jl
c3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKCk7CisjZW5kaWYKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9s
bGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKTsKK30KKworLy8gRklYTUU6IHRoaXMg
aXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5jb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xh
eWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAg
IGlmICghcG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBT
Y3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9
IGZhbHNlOworICAgIH0KKworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRp
b24udmFsdWUoKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
blNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNj
cm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Ny
b2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNj
cm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVk
QmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25O
YXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9u
cygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+
c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3Jv
bGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShz
Y3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNj
cm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xs
VHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sK
KyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3
U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFt
cFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRp
b24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlm
IChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsK
KworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxU
byAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMg
dXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2Vy
KSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Ig
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNv
ZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVt
b3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhP
ZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0
aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBj
YXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsK
KyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09m
ZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0
aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTog
Tm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQg
cG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhy
ZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZp
ZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMg
KGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBz
Y3JvbGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1
c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2Vz
dG9yLgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRl
clRyZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxh
eW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4K
KyAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwor
CisgICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAg
Ly8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0
YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlv
bnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10
by1kYXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Un
cmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRp
bmcgbGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAg
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAg
ICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEg
Y29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIp
LAorICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0
aGUgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJl
bnQgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWlu
dFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9u
cywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4K
KyAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50
UmVnaW9ucygpOworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVy
LmZyYW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
LmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBi
ZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9
IHJlbmRlcmVyLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91
dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50
Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENv
bnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
KyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25J
blF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVw
YWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAg
ICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
bV9sYXllci5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7CisgICAgICAgIHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVk
c1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVk
dWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWlu
dCkKKyAgICAgICAgcmVuZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIHJlY3RGb3JSZXBhaW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNj
cm9sbC1yZWxhdGVkIERPTSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Nj
cm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkK
KyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAg
IHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkK
K3sKKyAgICBpZiAobV9sYXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5
ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVk
IHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAg
IC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVy
ZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXll
ci5zdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAg
ICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBt
X2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0
byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3Jv
bGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFu
dHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAg
ICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgp
KTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0
ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFt
X21hcnF1ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRv
IHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisg
ICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247CisgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJx
dWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhh
dmlvcjo6Tm9uZSAmJiByZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVl
KQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9s
YXllcik7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
Ym9vbCBpc1Zpc2libGUgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dT
Y3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092
ZXJmbG93KCkgJiYgIW1fbGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQor
ICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0
eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCku
YWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2xheWVyLmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2xheWVyLmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxD
b29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQorICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkg
eworICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2Uo
KS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9s
bGluZ05vZGVJRCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50KTsKK30KKworSW50UmVj
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBW
aXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNjcm9sbGJh
clNwYWNlOworICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNs
dXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Ny
b2xsYmFySW50cnVzaW9uKCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJs
ZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZp
c2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwg
dmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50KCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJh
bmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIElu
dFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJWE1FOiB1c2UgbWF4
aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4K
KyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQorICAgICAg
ICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBlbHNlIGlmIChyZWFj
aGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3Jv
bGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkp
KTsKKworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRX
aWR0aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRo
KCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVX
aWR0aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAgIHJldHVybiBzdHJl
dGNoOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7CisgICAgcmV0dXJu
ICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJlY3QpOworfQorCitJ
bnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRSZWN0KTsK
KyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4g
cmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQ
b2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICBy
ZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0Nv
bnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29u
c3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsKKyAgICBwb2ludC5t
b3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHBvaW50OworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplKCkgY29uc3QK
K3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFi
b3gpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICByZXR1cm4gSW50U2l6ZShyb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVp
Z2h0KCkpOworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJs
ZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9
IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250
ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRI
ZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdo
dCgpKSk7CisKKyAgICByZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXpl
Q2hhbmdlUmVhc29uIHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29u
dGVudFNpemVDaGFuZ2VkKHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246
OlNjcm9sbGJhcnNDaGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVy
ZXIpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91
bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRz
TGF5b3V0KCk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1l
VmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNj
cm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRP
dmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRp
ZEVuZFNjcm9sbCgpCit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
RW5kT3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpkaWRVcGRhdGVTY3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hl
biB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQu
CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNs
aWVudDo6U2Nyb2xsKTsKK30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9s
UmVjdHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkg
Y29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBB
U1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lk
ZSB0aGUgYm9yZGVyIGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1Jl
Y3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3Jv
bGxiYXIoKSk7CisKKyAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIg
PyBtX2hCYXItPmhlaWdodCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
PSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07
CisKKyAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3Zl
cmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0
aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAg
IGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVy
ZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJz
QXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVO
b25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxi
YXIpKTsKKworICAgIEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKSB7CisgICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0
aGUgY29ybmVyIGlzIHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAg
ICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
OiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoCisgICAgICAgIH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIHJlc3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5z
aGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsK
KyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5z
aGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0
aCgpLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFy
UmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0
aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFy
UmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKKworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFy
UmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQu
dmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVj
dCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVm
dENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAg
fTsKKworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3Jv
bGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVy
KSB7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwor
CisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9J
bnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUs
IHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xs
UmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxv
Y2F0aW9uKCkpOworCisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7Cisg
ICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWlu
dFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Cisg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29y
bmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAg
IG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Ny
b2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4g
c2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxT
Y3JvbGxiYXIoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0
JiByZW5kZXJlcikKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1l
bnQoKSkgeworICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNv
bnRhaW5pbmdTaGFkb3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2Rl
KCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuICZyZW5kZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIpKTsKKyAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcik7CisgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRl
ckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVy
ZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAg
IHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3Jv
bGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBh
Z2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOworICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRk
Q2hpbGQoKndpZGdldCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNj
cm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBt
X3ZCYXI7CisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
c2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xs
YmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1v
dmVGcm9tUGFyZW50KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFz
U2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAg
ICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3Jv
bGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3Jv
bGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFz
VmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9s
bGJhcikgeworICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxi
YXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0
eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9t
YXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0
VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9s
bGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0
ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7Cit9CisKK1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1
cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVCb3goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXll
ciA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdD
b250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAg
ICBpZiAobmV4dExheWVyLT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVC
b3goKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAorewor
ICAgIGlmICghbV92QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAg
ICAgICB8fCAobV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53
aWR0aCgpOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9s
cygpCisgICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFu
Y3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGlj
aXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2hCYXItPmhlaWdodCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFy
IHx8IG1fc2Nyb2xsQ29ybmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpw
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7
CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBpZiAobV92QmFyKSB7CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zm
c2V0RnJvbVJvb3QpOworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXIt
PnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBp
ZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3Qo
cmVjdHMuc2Nyb2xsQ29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVz
aXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKworTGF5
b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0
Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5tYXhZKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3Zl
cmZsb3dMZWZ0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9
IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAg
UmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOwor
CisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsV2lk
dGggPSByb3VuZFRvSW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAgICBt
X3Njcm9sbEhlaWdodCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9w
KCkpOworCisgICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJm
bG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZs
b3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3Zl
cmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAg
ICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3Jv
bGxhYmxlVG9wT3ZlcmZsb3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
JiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Ny
b2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgo
KSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVy
ZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisK
KyAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94
KCktPmNsaWVudEhlaWdodCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9s
bGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMp
Cit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9u
OjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxv
d1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0g
T3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9s
bGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7
CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNT
Y3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBh
eGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3Zl
cmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93
ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpT
Y3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFy
cygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9s
YXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBh
cnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFy
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0
aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZs
b3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyBy
ZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2Fi
bGUuCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKG1f
aEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92
ZXJmbG93KTsKKyAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVy
ZXIuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJs
ZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBi
ZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVk
IG9yIHJlbW92ZWQuCisgICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6
b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0
b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRo
QXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxP
dmVyZmxvdyk7CisKKyAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpv
bnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+
aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBtX2xh
eWVyLnVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVwYWlu
dCgpOworCisgICAgICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJm
bG93OjpBdXRvIHx8IHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1
dG8pIHsKKyAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAg
ICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVu
ZGVyZXIuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAo
aXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJC
bG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAgICAg
ICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJh
ckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAg
ICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9p
bk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAgICAg
IGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNCb3go
KSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVh
ckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0KKwor
ICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBp
ZiAobV9oQmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5j
bGllbnRXaWR0aCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3Rl
cChjbGllbnRXaWR0aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhl
bHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlv
bihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQo
KSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVp
Z2h0KTsKKyAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhl
aWdodCwgbV9zY3JvbGxIZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVh
U2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29k
ZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gq
IGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxPZmZz
ZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigp
OworCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRo
YXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxl
IGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94
LT5pc0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2Vy
U2Nyb2xsSW5Qcm9ncmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8g
YmUgYXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisg
ICAgICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3Ig
cHVzaCB0aGVtIHVwIHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNj
cm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhl
IGNhcmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxh
dGVkIGVudHJ5IHBvaW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXgg
YW4gaXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBk
cmF3biBvbiB0aGUgcmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2Ug
Y29udGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3
OTc+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyh0cnVlKTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3Jv
bGxPZmZzZXQpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlzQ29t
cG9zaXRlZCgpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5
VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRp
b25VcGRhdGUoKTsKKyAgICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
KQorICAgICAgICBtX2xheWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7
CisKKyAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOworCisgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2Nh
bFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBj
b25zdAoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Ny
b2xsYmFycyBhcmUgbWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNPdmVy
Zmxvd0NsaXAoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29u
dHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBh
aW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkg
d2lsbCBwYWludAorICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMg
dGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8v
IHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRo
YXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBw
YWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVy
IHRyZWUgdG8gcnVuLAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVu
LiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8vIHNl
Y29uZCBwYXNzIGRvZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQg
aXQgcmlnaHQuCisgICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9
IHBhaW50T2Zmc2V0OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUg
c2Vjb25kIHBhc3MgaWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAg
IGlmICgobV9oQmFyICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFy
ICYmIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIEludFJlY3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2Nh
bERhbWdlUmVjdC5tb3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9zaW5n
Q29tcG9zaXRpbmdMYXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAg
ICAgIHBhaW50aW5nUm9vdCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycyh0cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hl
Y2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3
aWNlLgorICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9m
ZnNldCA9IHBhaW50T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAg
ICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNl
dDsKKworICAgIC8vIE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ug
bm9ybWFsbHkgbW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0
aW1lcworICAgIC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nICht
b3N0IG5vdGFibHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRh
aW5zIGZpeGVkIHBvc2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyh0b0ludFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQg
d2UncmUgc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0
aGVtLgorICAgIGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQor
ICAgICAgICBtX2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZC
YXIgJiYgIWxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWlu
dChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdp
dGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUg
d2F5IHVwIHRvIHRoZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8v
IFBhaW50IG91ciByZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3Jv
bGwgY29ybmVyLgorICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWlu
dFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFi
c1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOworICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewor
ICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5w
YWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYg
d2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUg
d2hhdCBpcyBiZWhpbmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAg
ICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBh
YnNSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZv
cm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByZXNpemVyQ29ybmVyUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0
U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElt
YWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNv
cm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXpl
clNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVy
U2l6ZS5zY2FsZSgwLjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVz
aXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJl
Y3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgp
ICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAg
ICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgq
cmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJT
aXplKSk7CisgICAgICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZs
b2F0UmVjdCBpbWFnZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVz
aXplckNvcm5lclJlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3Ju
ZXJSZXNpemVyU2l6ZSksIHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CisgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6
Ok5vbmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNp
emVyOworICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFy
ZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBh
aW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisg
ICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYg
dGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBl
eGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYg
KCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAg
IGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2Vy
Q29ybmVyID0gcmVzaXplckFic1JlY3Q7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExh
eW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0
KCkgKyAxX2x1KSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhf
dD4geyAyMTcsIDIxNywgMjE3IH0pOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cygxLjBmKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
QmxhY2spOworICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNv
cm5lcikpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIu
Y2FuUmVzaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRl
cmVyLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0
cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxD
b3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJh
ciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAg
ICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFy
LT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5o
b3Jpem9udGFsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAg
cmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUo
KSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5p
c0FjdGl2ZSgpOworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5y
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVs
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXllci5yZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFC
TEUoQ1NTX1NDUk9MTF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTbmFwT2Zmc2V0cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBI
VE1MRWxlbWVudHMuCisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4obV9sYXllci5lbmNsb3NpbmdF
bGVtZW50KCkpIHx8ICFtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5lbmNsb3NpbmdF
bGVtZW50KCktPnJlbmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsK
K30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dy
ZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVy
LnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdD
b29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5p
bWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxB
bmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5
U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXI6OkxheWVy
UGFpbnRpbmdJbmZvIHBhaW50aW5nSW5mbygmbV9sYXllciwgZW5jbG9zaW5nSW50UmVjdChkYW1h
Z2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsK
KyAgICBtX2xheWVyLnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBSZW5kZXJMYXll
cjo6UGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0
TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYg
KGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byBib3JkZXJCb3hS
ZWN0ID0gc25hcHBlZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuYm9yZGVy
Qm94UmVjdCgpKTsKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisK
KyAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdt
ZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJ
bnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0
LnNpemUoKSB9OworICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1h
eFlDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhY
TWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgp
LCByZXNpemVyUmVjdC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVy
RnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVy
RnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8g
cmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJl
Y3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNp
emVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgp
KSkgeworICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0
TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFj
a2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6
IG51bGxwdHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5n
TWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxv
dygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0
LgorICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBz
Y3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlm
IChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1
cm47CisKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7
CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisg
ICAgLy8gVG8gYXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJM
YXlvdXQsIHdlIHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFs
cmVhZHkgcHJlc2VudC4KKyAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZp
bmVzQXV0b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
IHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSk7CisgICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAoKHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGlj
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVp
cmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBX
aXRoIG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZp
c2libGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90
aGVyIHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAg
ICBpZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBv
bGRTdHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0g
T3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisg
ICAgaWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9s
ZFN0eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBP
dmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAg
ICBpZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxl
QXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJs
ZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNpYmxlVG9I
aXRUZXN0ID0gcmVuZGVyZXIudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkp
CisgICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25l
ci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9s
bGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRl
ZE9yUmVtb3ZlZCA9IGZhbHNlOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID09IGZyYW1lVmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlm
IChpc1Njcm9sbGFibGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSkgeworICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
KSB7CisgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVB
cmVhKHRoaXMpOworICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOwor
ICAgIH0KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVt
b3ZlZCkgeworICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCisgICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRo
ZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNv
IGlmIHdlIGJlY2FtZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2
ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1l
bnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAg
IGF1dG8gY29ybmVyID0gcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJl
ci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwg
JmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikg
eworICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdU
Rk1vdmUoKmNvcm5lcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUg
YSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50
KCZyZW5kZXJlcik7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNv
cm5lcikpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xs
Q29ybmVyKCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5l
ciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
UmVzaXplclN0eWxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xs
YmFyKHJlbmRlcmVyKTsKKyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0Ns
aXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6
OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBp
ZiAoIXJlc2l6ZXIpIHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZN
b3ZlKCpyZXNpemVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBh
IGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5k
ZXJlcik7CisgICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNl
CisgICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYg
KCFtX3Jlc2l6ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChu
dWxscHRyKTsKKyAgICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpCit7CisgICAg
aWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92
QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7CisgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cit9CisKKyNpZiBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAg
Ly8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJl
IGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVu
dCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cjsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7
CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxz
ZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworLy8gRklYTUU6IHRo
aXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLmlzQ29tcG9zaXRlZCgpICYmIG1fbGF5ZXIuYmFja2luZygpLT5oYXNT
Y3JvbGxpbmdMYXllcigpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERl
bHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRj
aGVzIEZpcmVmb3gncy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291
cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBp
bnQgc3BlZWRSZWR1Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmlu
Z0RlbHRhIC8gc3BlZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAg
ICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQo
c3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChh
ZGp1c3RlZERlbHRhIDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVs
dGEpKSkgKyAxOworCisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQorewor
ICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFk
anVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJj
ZVBvaW50KQoreworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBtX2xheWVy
LnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9u
KCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBv
c2l0aW9uIGlzIG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhl
IHdpbmRvdywgdGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQg
cHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngo
KSA8IDAgfHwgbGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25v
d25Nb3VzZVBvc2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAg
ICAgcHJldmlvdXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAg
IEludFNpemUgZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisK
KyAgICBpZiAoYWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFk
aXVzKSAvLyBhdCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAg
ICAgIGRlbHRhLnNldFdpZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNj
cm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7
CisKKyAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsK
K30KKworT3B0aW9uYWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU2Nyb2xsUG9zaXRpb24oU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IsIGNvbnN0IExheW91dFJl
Y3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAg
ICBBU1NFUlQobV9sYXllci5hbGxvd3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgYXV0
byBzaG91bGRVc2VBbmltYXRlZFNjcm9sbCA9IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3Jv
bGxCZWhhdmlvciBiZWhhdmlvcikKKyAgICB7CisgICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3Jv
bGxpbmcgPSAhbV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Nj
cm9sbEluUHJvZ3Jlc3MoKQorICAgICAgICAgICAgJiYgZWxlbWVudCAmJiB1c2VTbW9vdGhTY3Jv
bGxpbmcoYmVoYXZpb3IsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdXNlQW5pbWF0ZWRTY3Jv
bGxpbmcgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgIH07
CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zm
c2V0KHNjcm9sbE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3Qp
LmxvY2F0aW9uKCkpKTsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxkVXNl
QW5pbWF0ZWRTY3JvbGwoYm94LT5lbGVtZW50KCksIGJlaGF2aW9yKTsKKyAgICAgICAgc2V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
LCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmlt
YXRlZCk7CisgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRT
Y3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7CisKKyAgICAgICAgYXV0byBsb2NhbEV4cG9z
ZVJlY3RTY3JvbGxlZCA9IGxvY2FsRXhwb3NlUmVjdDsKKyAgICAgICAgbG9jYWxFeHBvc2VSZWN0
U2Nyb2xsZWQubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7CisgICAgICAgIHJldHVybiBM
YXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxv
Y2FsRXhwb3NlUmVjdFNjcm9sbGVkKSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOwor
ICAgIH0KKworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwg
U2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChy
ZW5kZXJlci5wYXJlbnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRl
cmVyLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJl
bmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVs
dGE7CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlm
IChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAg
ICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0
IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5p
bmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIucGFyZW50
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVz
LgorICAgICAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IG1fbGF5
ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1
cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJlbmRlcmVyLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRl
QXV0b3Njcm9sbFJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBi
ZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZl
IGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2Rl
IHRoYXQgY2FuIGJlIHNjcm9sbGVkLgorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuc2Nyb2xsQnkoZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAg
ICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2Fu
dCB0byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpCit7CisgICAgQVNTRVJUKCZtX2xheWVyID09IG1fbGF5ZXIucmVu
ZGVyZXIoKS52aWV3KCkubGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
Iik7CisKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsK
KyAgICBtX2xheWVyLnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFw
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21l
dHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIGlmICgmbV9sYXllciAhPSBtX2xheWVyLnJlbmRl
cmVyKCkudmlldygpLmxheWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1Rv
QW5jZXN0b3IobV9sYXllci5wYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5
IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3Jk
ZXIgdG8KKyAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIG1f
bGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIFJlbmRl
ckxheWVyOjpJc092ZXJmbG93U2Nyb2xsKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVw
cmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgbV9sYXllci5yZW5kZXJlcigp
LmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3Nh
Z2VMZXZlbDo6RGVidWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOworfQorCitTdHJpbmcg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIuZGVidWdEZXNjcmlwdGlvbigpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmIzMzBlNDM5YTliYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBM
Iikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91
bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwi
KSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJl
CisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUg
dGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQ
TCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxl
dGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
IGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEws
IGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxh
YmxlQXJlYS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlck1hcnF1ZWU7
CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEgZmluYWwgOiBwdWJsaWMgU2Nyb2xs
YWJsZUFyZWEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4
cGxpY2l0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImKTsKKyAgICB2aXJ0
dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBSZW5kZXJMYXllciYgbGF5
ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9CisKKyAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9CisgICAgdm9pZCB1cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKKyAgICB2b2lkIGNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKworICAgIHZv
aWQgc3RvcmVTY3JvbGxQb3NpdGlvbigpOworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
CisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNl
bmRpZgorCisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Ny
b2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZO
ZWVkZWQoKTsKKworICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxI
ZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBv
aW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNj
cm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3Qg
SW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9m
ZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5
cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQpOworCisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0
ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRp
b24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmlt
YXRlZFNjcm9sbDo6Tm8pOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVl
LgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9s
bE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQo
aW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwg
eSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
IH0KKworICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0
IHsgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9
CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpv
bnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250
YWxTY3JvbGxiYXIoYm9vbCk7CisgICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
KTsKKworICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRh
dGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2
b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVz
UmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVl
IHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9v
ayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAg
Ym9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMg
bGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdzsgfQorCisgICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAg
aW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092
ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBo
aXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAg
ICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZv
aWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxi
YXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVs
bHB0cik7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAg
Ym9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciA9IDEpOworCitwdWJsaWM6CisgICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0
aW9uIG92ZXJyaWRlIFNjcm9sbGFibGVhQXJlYSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBh
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmlu
YWw7CisKKyAgICBib29sIGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBm
aW5hbDsKKworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFs
U2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Ny
b2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5n
ZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpIGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBm
aW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9m
ZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRT
Y3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQg
ZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7CisjZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJM
YXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2li
bGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAg
IFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIElu
dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVk
ZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Cisg
ICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFu
ZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5h
bDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3Jp
cHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNp
emUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xs
VHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6
OkNsYW1wZWQpIGZpbmFsOworCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQor
ICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
ID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisKKyAgICBib29sIGNvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzOyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93
Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsK
KyAgICB2b2lkIGNsZWFyUmVzaXplcigpOworCisgICAgdm9pZCB1cGRhdGVBbGxTY3JvbGxiYXJS
ZWxhdGVkU3R5bGUoKTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAg
IExheW91dFVuaXQgb3ZlcmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93
Qm90dG9tKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpP
dmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAg
IGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdDsKKworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNv
bnN0OworCisgICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29t
cHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7CisKKyAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAg
Ly8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0
U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25z
dCBTY3JvbGxQb3NpdGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFy
JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3Zl
cmZsb3cpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3Zl
cmZsb3dTY3JvbGwoKTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCgpOworCisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRp
b24oU2Nyb2xsQmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZzsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTY3Jv
bGxDb3JuZXJTdHlsZSgpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKK3ByaXZh
dGU6CisgICAgLy8gTWluaW11bSBwYWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1f
c2Nyb2xsSGVpZ2h0KQorICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAg
IGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEgOiAxOworICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IgOiAxOyAvLyBJbiB0aGUgbGF5ZXItb3JkZXIgdHJlZS4KKyAgICBib29sIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWly
ZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gOiAxOworICAgIGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOwor
CisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQg
bV9zY3JvbGxXaWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXll
ciYgbV9sYXllcjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNj
cm9sbFBvc2l0aW9uIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxh
eWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisK
KyAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBS
ZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisg
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJl
bmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKaW5kZXggN2U5ZjM4MzJkMzZlLi41MjIwMjU5YmVlYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVB
cmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAg
aWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXIt
PmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6
OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wg
UmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyAr
ODk3LDEwIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSgpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3RvcigpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5
ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJv
dW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5Ni4uOWE0ODFhOTdhZjA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRl
ck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXll
cihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVk
KQogewotICAgIGxheWVyLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxz
ZSk7CisgICAgQVNTRVJUKGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Ny
b2xsYWJsZUFyZWEoKS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2Up
OwogfQogCiBSZW5kZXJNYXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3
Myw5ICsxNzQsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9z
dXNwZW5kZWQgJiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwg
MCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChT
Y3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIG1fbGF5
ZXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0
YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBt
X3N0b3BwZWQgPSBmYWxzZTsKQEAgLTI0NCwxMiArMjQ1LDE1IEBAIHZvaWQgUmVuZGVyTWFycXVl
ZTo6dGltZXJGaXJlZCgpCiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRz
TGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5
ZXIpOworCiAgICAgaWYgKG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hP
ZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9m
ZnNldChtX3N0YXJ0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xs
VG9ZT2Zmc2V0KG1fc3RhcnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxU
b1lPZmZzZXQobV9zdGFydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIs
NyArMjc2LDcgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9v
bCBwb3NpdGl2ZSA9IHJhbmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jp
em9udGFsKCkgPyByb3VuZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
KSA6IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAg
ICAgICAgIGludCBpbmNyZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAg
ICBpbnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNl
dCgpLngoKSA6IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJy
ZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQo
KS54KCkgOiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5l
d1BvcyA9ICBjdXJyZW50UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1l
bnQpOwogICAgICAgICBpZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1p
bihuZXdQb3MsIGVuZFBvaW50KTsKQEAgLTI4OSw5ICsyOTMsOSBAQCB2b2lkIFJlbmRlck1hcnF1
ZWU6OnRpbWVyRmlyZWQoKQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0g
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9s
YXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggMTdmYzMzZDQxZTA0
Li4xMTA1MTE3MjNhZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xMDAxLDcgKzEwMDEsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVj
dDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGlj
IHZvaWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAg
c3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTils
aW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9h
dGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5
ZXIsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAg
c3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0Zp
KFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBB
bm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxl
QXJlYSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAg
ICBzdHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNSwxMCArMTExNSwxNCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBt
YXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAg
aWYgKGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8
ICJMIjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwog
CiAgICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGI5MTU5MjJiMjFlOS4uMDExMzg0
MWU2YzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAs
NiArMTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyQmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0
aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2Fs
bHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKaW5kZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTM5NywxOSArMzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVs
ZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQm
IHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0
byogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9
IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xs
YWJsZSA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVy
U2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAm
JiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50
LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYm
IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9s
bGFibGUgPSBsYXllciA/IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5z
Y3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJl
bmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggN2MwMWYwMjBmZTgyLi41OTIwZDU4ZjIwYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpA
QCAtNjAwLDIwICs2MDEsMjQgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAg
ICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAo
bGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIg
PDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0
aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5y
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVh
KCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngo
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAg
dHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsK
KyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWln
aHQoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5
ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVN
YWMmIG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJh
clRoZW1lKTsKLSAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgq
bGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxiYXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKCFzY3Jv
bGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxT
Y3JvbGxiYXIoKSkgeworICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVt
ZSA9ICpzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxh
YmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKaW5kZXggYjEwMzNkYTA3OTMwLi42OTFlNzU1ODdmNmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMzLDEwIEBAIHZv
aWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0
KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUo
KSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJv
dW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAg
IGlmIChsYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9pZCBS
ZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFkNjM3ZmY0NGY5Ni4uZmU1Y2U0MDU5
NjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgpAQCAtMTgzMyw3ICsxODM0LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3Jv
bGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAg
aWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NTQsOCArMjg1Niwx
MCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFy
ZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxS
ZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZW5kZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YSA9IHJlbmRlckJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNWM0OTkzYmFlMDI4Li4yZWU2YmUz
YzdmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAy
MC0xMS0yNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVy
TGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxv
dyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRz
IGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVz
IHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93
LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAg
ICAgICogRE9NL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9sbFhP
ZmZzZXRdKToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWU9mZnNldF0pOgorICAg
ICAgICAoLVtET01IVE1MRWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRq
dXN0Rm9ySU9TQ2FyZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtX
ZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTEx
LTIxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBhbiBFeHBlcmltZW50YWwgRmVhdHVyZXMgZm9yIHdoZWVsIGV2ZW50IGdlc3R1cmVzIGJlY29t
aW5nIG5vbi1ibG9ja2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUwubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRl
eCA4NTg0YzIzMWZlZjguLmNiYzU2N2UzYmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTUhUTUwubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzgs
MTQgQEAgLSAoaW50KXNjcm9sbFhPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJv
eD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5k
ZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93
bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFs
YXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eCgpOwogfQogCiAtIChpbnQpc2Nyb2xsWU9mZnNldApAQCAtOTEsNyArOTksMTQgQEAgLSAoaW50
KXNjcm9sbFlPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVy
KSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIo
KS0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29y
ZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOwogfQogCiAt
ICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5CkBAIC0x
MTEsMTEgKzEyNiwxNCBAQCAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlP
ZmZzZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFkagogICAgICAgICByZXR1cm47
CiAKICAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRl
cmVyKS5sYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwog
ICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2Vi
Q29yZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0
aWMsIFdlYkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5
KSwgV2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFt
cGluZzo6VW5jbGFtcGVkKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxh
eWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7
CiB9CiAKIC0gKHZvaWQpYWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQg
Kil3IDooaW50ICopaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KaW5kZXggM2ZlYTE2MDgzOTJmLi4xMmQxNTllYzhmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3Vt
ZW50TWFya2VyLmg+CkBAIC03MzgsOSArNzM5LDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdl
VG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCiAjZWxzZQogICAgICAgICBhdXRvKiBsYXllciA9
IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxh
eWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2lu
Z0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2
ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZO
ZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2Vi
Q29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICB9CkBAIC03NTgsOSAr
NzYwLDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJh
bmdlIHdpdGhJbnNldDooQ0dGbG9hdClpbnNldAogICAgIGlmIChzdGFydE5vZGUgJiYgc3RhcnRO
b2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5k
ZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAg
ICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAg
ICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVy
KCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJl
Y3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWws
IFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxv
d0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXN9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogCiAgICAg
ICAgICAgICBhdXRvIGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CiAgICAgICAgICAgICBpZiAoY29y
ZUZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggNjIzNmExMWJmMjk2Li41
OGRkZTA1ZDcwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBA
QAorMjAyMC0xMS0yNiAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNv
bT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwg
UmVuZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9v
dmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxp
bmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVy
IHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292
ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgor
CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJWaWV3OjpnZXN0dXJlKToKKwog
MjAyMC0xMS0xOSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbVGV4dHVyZU1hcHBlcl0gUmVtb3ZlIG1fdGV4dHVyZU1hcHBlciBmcm9tIFRleHR1
cmVNYXBwZXJMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNzdjMjYy
ZTA5NGYuLjJmZGNmOWY5Y2I5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAg
LTE0Nyw2ICsxNDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
ckxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVu
ZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjA0
OCw4ICsyMDQ5LDEwIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFS
QU0gbFBhcmFtKQogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1
bWVudCB3aXRob3V0IGhpdHRpbmcgYW55IG5vZGVzCiAgICAgICAgICAgICBjb3JlRnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVk
QXJlYSA9IGNvcmVGcmFtZS0+dmlldygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZz
Y3JvbGxlZEFyZWEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbGFibGVBcmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERl
bHRhLCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBh
bm5pbmdGZWVkYmFja1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFu
bmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxl
UHRyKCkoZ2VzdHVyZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431903"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414917</attachid>
            <date>2020-11-27 00:12:46 -0800</date>
            <delta_ts>2020-11-27 01:06:17 -0800</delta_ts>
            <desc>Patch, v14 (squashed for testing)</desc>
            <filename>patch-v14.diff</filename>
            <type>text/plain</type>
            <size>307582</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li45YmZmOWFiYzA0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNjAgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpp
bnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omxv
Z2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXF1aXJlc0xheWVy
V2l0aFNjcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElz
S25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxv
d0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3Ry
YWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJv
bHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJv
bVJlc2l6ZUNvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXpl
Q29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JG
cmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVz
ZXNBc3luY1Njcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGp1
c3RlZFNjcm9sbERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYW5TY3JvbGxGcm9tUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9YUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFRvWVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzZXRTY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNldFNjcm9sbE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmhhbmdB
bW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omlz
QWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxDb3JuZXJSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc0hh
bmRsaW5nV2hlZWxFdmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNl
RGFya0FwcGVhcmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5p
bWF0b3JNZXNzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6Om92ZXJmbG93VG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNIb3Jp
em9udGFsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2Vj
dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNo
b3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVy
Zmxvd1RpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDbGlwcGluZ1N0YWNrTGF5ZXJH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZU92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNj
cm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9k
ZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9y
bWFuY2VUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRl
c3Ryb3lNYXJxdWVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyaGFuZ0Ft
b3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNv
bnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxk
U3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVj
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsYmFyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFz
VmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoYXNPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxv
d0JvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpvdmVyZmxvd0xlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRy
b2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
c0FjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtB
cHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0
UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3Jv
bGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlUmVzaXplclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNsZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYW5TY3JvbGxGcm9tUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFu
aW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJx
dWVlOjpSZW5kZXJNYXJxdWVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3V0
cHV0UmVuZGVyVHJlZUxlZ2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om91
dHB1dFJlbmRlck9iamVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2Fs
U2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0xMS0yMiAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIENvbnZlcnQg
c29tZSByZW1haW5pbmcgSW5saW5lQm94IGFjY2VzcyB0byB1c2UgaW5saW5lIGl0ZXJhdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCAzNzg5YWEzODM5NDAuLjc1MTE0MTg0ZTFhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xNDYyLDYgKzE0NjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcy
NjI4OTFlY2M2My4uOTgzYzVmM2RjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjIxNyw2ICsyMjE3
LDcgQEAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggOTFkNzRjNzQ1MjI1Li5kODA4ZDM3YzM4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNzMsNiArNDA3Myw3IEBA
CiAJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MzcwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlckltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4Mzkw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODdBMDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFQTQ4M0IwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1M0ZCODQyMTNCN0E2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODAwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
QTQ4NDEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODg3MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLmgg
Ki87IH07CiAJCUJDRUE0ODhBMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NEIwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwMTUsNiArNjAxNiw4IEBACiAJCTBGNENERUFBMjNEOTFB
OEEwMDI1MUIwMiAvKiBTY3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxU
eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgxMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZC
ODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1
M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjUzRkI4MzIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXll
ckZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCOEIyMTNCNzY4
NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJMYXllckZpbHRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU0
RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEF1dG9TaXppbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk1ODYsNiArMjk1ODksOCBAQAogCQkJCTBGNTNGQjg5MjEzQjc2
ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLywKIAkJCQkzQzI0NEZFNUEzNzVB
QzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJM0MyNDRG
RTRBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCAqLywKKwkJCQkw
RjUzRkI4MzIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAg
Ki8sCisJCQkJMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlv
dXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVFODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5l
Qm94TGlzdC5jcHAgKi8sCkBAIC0zNDA1Myw2ICszNDA1OCw3IEBACiAJCQkJMEY1ODBDRkYwRjEy
REU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkwNjYw
NzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxpbmVCcmVh
ay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3ZjJiZGE4YmUxM2Mu
LmQxNjhiM2JmZTBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MDMsNyArMzkwNCw3IEBA
IFNjcm9sbGFibGVBcmVhKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxl
QXJlYUlmU2Nyb2xsYWJsZSgpIGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGJveC5sYXllcigpOworICAgIHJldHVybiBib3gubGF5ZXIoKSA/IGJveC5sYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0zOTE2LDcgKzM5
MTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IGlz
IHBvaW50IGEgU2Nyb2xsT2Zmc2V0IG9yIFNjcm9sbFBvc2l0aW9uPyBUZXN0IGluIFJUTCBvdmVy
Zmxvdy4KLSAgICBib3gubGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOworICAgIGJveC5s
YXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYx
YzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYg
KzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJl
bmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9s
bFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2Vy
KG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9y
OjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxl
Y3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2
NGUyZS4uNDQwOWRmN2JhOTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc2
LDEwIEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmpl
Y3QoKS0+bGF5ZXIoKS0+bWFycXVlZSgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJl
bmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHNj
cm9sbGFibGVMYXllci0+bWFycXVlZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggMmRlNDNkYWQ1
YTlmLi5jMDJhOGQ3NmMyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0
VHlwZS5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC0yNTMsOSArMjU0LDExIEBAIHZvaWQgVGV4dEZp
ZWxkSW5wdXRUeXBlOjplbGVtZW50RGlkQmx1cigpCiAgICAgaWYgKCFpbm5lckxheWVyKQogICAg
ICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBpbm5lckxheWVyU2Nyb2xsYWJsZSA9IGlubmVyTGF5
ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIGJvb2wgaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4oKnJlbmRl
cmVyKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBTY3JvbGxPZmZzZXQg
c2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPyAwIDogaW5uZXJMYXllci0+c2Ny
b2xsV2lkdGgoKSwgMCk7Ci0gICAgaW5uZXJMYXllci0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zm
c2V0KTsKKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24gPyAwIDogaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFdpZHRoKCksIDApOworICAgIGlu
bmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXQpOwogCiAjaWYg
RU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgY2xvc2VTdWdnZXN0aW9ucygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDY1ZWIyMDlkNGQzNy4uNWIxY2JjM2NhM2Yx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBACiAj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0zNDEsNyArMzQyLDcgQEAg
c3RhdGljIGJvb2wgaGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9k
ZSogc3RhcnROb2RlLCBjb25zdCBXaGUKIAogICAgIFJlbmRlckJveCogY3VycmVudEVuY2xvc2lu
Z0JveCA9ICZpbml0aWFsRW5jbG9zaW5nQm94OwogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5n
Qm94KSB7Ci0gICAgICAgIGlmIChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9z
aW5nQm94LT5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBib3hMYXllciA9IGN1cnJlbnRF
bmNsb3NpbmdCb3gtPmxheWVyKCkgPyBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50
ID0gd2hlZWxFdmVudC51bmRlcmx5aW5nUGxhdGZvcm1FdmVudCgpOwogICAgICAgICAgICAgYm9v
bCBzY3JvbGxpbmdXYXNIYW5kbGVkOwogICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsK
QEAgLTE1NjIsNyArMTU2Myw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxl
Y3RDdXJzb3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgICAg
ICBpZiAoYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVu
ZGVyZXIpLmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQ
b2ludEluUmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkp
OwogICAgICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBsYXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8g
c291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291
dGhFYXN0UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTkx
Miw5ICsxOTEzLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcm9s
bGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2Nyb2xsYWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJ
bmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYg
KCFlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDMw
NThkOTFkZTY1YS4uODVlNTdlOThjMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBA
IC04MSw2ICs4MSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
Um9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhclBhcnQuaCIKQEAgLTI1OTUsNyArMjU5Niw4IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKCkKICAgICBpZiAoIWxheW91dENvbnRleHQo
KS5pc0xheW91dE5lc3RlZCgpICYmIGhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzKCkpIHsK
ICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSB0aGlzLT5yZW5kZXJWaWV3KCkp
IHsKICAgICAgICAgICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotICAgICAgICAgICAgcmVu
ZGVyVmlldy0+bGF5ZXIoKS0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCk7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyVmlldy0+
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwogICAgICAgICB9
CiAgICAgfQogfQpAQCAtMzIxMCw2ICszMjEyLDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxU
b0FuY2hvcigpCiAKICAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIiBh
bmNob3Igbm9kZSByZWN0ICIgPDwgcmVjdCk7CiAKKyAgICBhdXRvKiBlbmNsb3NpbmdMYXllciA9
IGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CisgICAgaWYgKGVuY2xv
c2luZ0xheWVyICYmICFlbmNsb3NpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAg
ZW5jbG9zaW5nTGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8vIFNj
cm9sbCBuZXN0ZWQgbGF5ZXJzIGFuZCBmcmFtZXMgdG8gcmV2ZWFsIHRoZSBhbmNob3IuCiAgICAg
Ly8gQWxpZ24gdG8gdGhlIHRvcCBhbmQgdG8gdGhlIGNsb3Nlc3Qgc2lkZSAodGhpcyBtYXRjaGVz
IG90aGVyIGJyb3dzZXJzKS4KICAgICBpZiAoYW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUo
KS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQpAQCAtMzg2Miw3ICszODY4LDExIEBAIFNjcm9s
bGFibGVBcmVhKiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAg
ICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXll
ci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5v
dDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogSW50
UmVjdCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CkBA
IC00MzI2LDggKzQzMzYsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICAgICAgcmVu
ZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCk7CiAKICAgICByb290TGF5ZXItPnBhaW50KGNvbnRl
eHQsIGRpcnR5UmVjdCwgTGF5b3V0U2l6ZSgpLCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyLCB7
IH0sIHNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPT0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGlj
eTo6QW55T3JpZ2luID8gUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFu
eU9yaWdpbiA6IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBY2Nlc3Np
YmxlT3JpZ2luT25seSwgZXZlbnRSZWdpb25Db250ZXh0KTsKLSAgICBpZiAocm9vdExheWVyLT5j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRSZWdpb25Db250ZXh0KQot
ICAgICAgICByb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlS
ZWN0LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlUm9vdExheWVyID0gcm9vdExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGlm
IChzY3JvbGxhYmxlUm9vdExheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAm
JiAhZXZlbnRSZWdpb25Db250ZXh0KQorICAgICAgICAgICAgc2Nyb2xsYWJsZVJvb3RMYXllci0+
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlv
ciwgcmVuZGVyZXIpOworICAgIH0KIAogICAgIGRpZFBhaW50Q29udGVudHMoY29udGV4dCwgZGly
dHlSZWN0LCBwYWludGluZ1N0YXRlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2
aWdhdGlvbi5jcHAKaW5kZXggMzhmYjQ5NzFkMmEzLi44MDliYzE5MTM0NzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTUsOCBA
QCBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1
cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVs
eShJbnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMzJkMzJlNTliMjQyLi42ZTBmMTkwYmEzZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC04MTksMTQgKzgxOSwxNSBAQCB2
b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5o
YXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAq
ZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBh
dXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxh
eWVyKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRT
Y3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xs
ID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5
ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5z
ZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5
cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpV
c2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRp
ZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAg
c2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdh
eXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlz
c2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXgg
YWZkNzZkMjU2ZWQwLi4wMDc5OTdlMmIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisj
aW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIK
QEAgLTc4NCw3ICs3ODUsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YUZvckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0
dXJuIGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNj
cm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li45NWYwMTc0Yzc4OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTksNiArNTks
NyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTExMTMs
OCArMTExNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgLy8gei1pbmRleC4gV2UgcGFp
bnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNj
cm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAg
ICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0g
UGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFp
bnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50
T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CisgICAg
ICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkg
PT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAg
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludElu
Zm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBw
ZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCkKQEAgLTIwMDcsNyArMjAwOCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5P
dmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5oaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFp
bmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5k
ZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjUwMywxMCArMjUwOSwyMyBAQCBp
bnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlw
ZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRo
ZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9t
LWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJh
c2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3Jv
bGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxv
Y2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFz
ZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0g
SG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigp
LT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6
b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkg
fHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCi0gICAg
ICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFs
PGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKKyAgICAgICAgYXV0byBp
Z25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICAgICAgICAg
IGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEhvcml6b250
YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lKCkgPyBPcHRpb25h
bDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewogICAgICAgICAgICAgLy8gSGlz
dG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2VsaW5lcy4gQnV0IHdlIGNh
bid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0OCw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dp
Y2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGlu
ZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxk
cmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigp
LT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFi
bGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpLT5pc0hvcml6
b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDMwN2Y5YjJjN2YyZi4uNWJhZjc5
MDI4NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjMsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKQEAgLTMxOSwxMCArMzIwLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAg
ICAgLy8gSWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNj
cm9sbExlZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAg
Ly8gbmV3IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0g
bmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9s
bFBvc2l0aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgZmxvYXQgem9v
bVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUoem9vbVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZmxv
YXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21T
Y2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxh
eW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgp
IGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewotICAgIHJldHVy
biBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24o
KS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xp
cCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBv
c2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVy
Zmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQ
b3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWln
aHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEgKzU5NSwzOCBAQCBzdGF0aWMgdm9p
ZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKICAgICBQYWdlJiBw
YWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmlu
Z1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBsYXllci5zY3JvbGxBbmltYXRv
cigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgYXV0byYgc2Nyb2xsQW5pbWF0b3Ig
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7CisgICAgc2Nyb2xsQW5pbWF0b3Iu
c2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBj
bGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YUG9zaXRp
b24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKICAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1cm47Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVy
KCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1h
dGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0
ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVy
U2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsK
LSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJl
bmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MjYsMTIgKzgzOCwxOCBAQCBi
b29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIAog
aW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Ny
b2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkg
OiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXll
cigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5z
aWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTcsMTYgQEAgaW50
IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICBp
ZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygp
KSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFi
bGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAg
IH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygp
KSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xs
YWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzSG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzUsOCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNT
Y3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5
ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5k
ZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXll
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgYXV0
byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBi
b3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1l
bnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTA4LDEzIEBAIGJvb2wgUmVuZGVyQm94Ojps
b2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAgIGlmIChsKSB7
CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkg
d2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3Vt
ZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxh
cml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3Jv
bGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQg
PSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxp
bmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGll
cik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGJv
eExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0
cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEsNiArOTQzLDIw
IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29u
c3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAK
K2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Zl
cnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFp
bmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2Fu
IGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4g
dGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQo
KSBjb25zdAogewpAQCAtOTk3LDggKzEwMzMsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6Zmlu
ZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94
OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkK
LSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cikKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYW5TY3JvbGxGcm9tUG9pbnQo
c291cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkg
Y29uc3QKQEAgLTEwMjcsNyArMTA2MywxMSBAQCBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwogCiAgICAgQVNT
RVJUKGhhc0xheWVyKCkpOwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiB7IDAsIDAgfTsKKworICAg
IHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIExheW91dFNp
emUgUmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29uc3QKQEAgLTE1NzUs
OSArMTYxNSwxMCBAQCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9C
ZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dy
b3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5n
TWF5UmV2ZWFsQmFja2dyb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgcmV0dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVj
dCwgYmFja2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKIH0KIApAQCAtMTg5NCwxMCAr
MTkzNSwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUo
Y2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgp
LCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQg
c2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKSB7CiAgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRy
YWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBS
ZWN0Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5j
eSksIDApOworICAgICAgICBjbGlwUmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAzY2Q4MGJjZDA3MmQuLmRm
MGVhMWMwNzE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTYsNiAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRl
eCgpIHx8IGhhc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKKyAgICBi
b29sIHJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICBib29sIGJh
Y2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJl
Y3QpIGNvbnN0IGZpbmFsOwogICAgIAogICAgIC8vIFJldHVybnMgZmFsc2UgZm9yIHRoZSBib2R5
IHJlbmRlcmVyIGlmIGl0cyBiYWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCBiOTgyN2M4YTE0ZDIuLmJhNWRjZmE0MDM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAt
NDg5LDggKzQ5MCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5
UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBGbG9hdFBv
aW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0gY29udGFp
bmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAgICAgICAg
ICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3Np
bmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwot
ICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAg
ICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9
IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVu
Y2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgY29udGFpbmVy
UmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRz
LnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3Rvcik7CkBAIC01MDcsOCArNTEwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAg
ICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25S
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5n
Qm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAg
ICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdC
b3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zm
c2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Js
b2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5n
TGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IHNj
cm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
fQogICAgIH0KICAgICAvLyBGSVhNRTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5v
dCB0cmFuc2Zvcm1lZC4KICAgICBzdGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iu
c2V0TG9jYXRpb24oc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpA
QCAtNTQ3LDExICs1NTIsMTQgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25z
dHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVj
dCBjb25zdHJhaW5pbmdSZWN0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5l
clF1YWQoRmxvYXRSZWN0KGNsaXBSZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAg
ICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlRW5j
bG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQg
PSBGbG9hdFBvaW50KCkgKyBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xs
T2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAg
aWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdC
b3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAg
ICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlm
IChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94
LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSAmJiBzY3JvbGxhYmxl
RW5jbG9zaW5nQ2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IHNj
cm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwg
c2Nyb2xsT2Zmc2V0LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUyNDNlYTFjMWIwNC4u
MDU4ZmQ4OTU0YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgog
ICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9u
cyBDb3Jwb3JhdGlvbi4KICAqCkBAIC05Nyw2ICs5OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0
aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCkBAIC0zMDQsNDAgKzMw
NiwyNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRy
dWUpCiAgICAgLCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdChmYWxzZSkKICAgICAsIG1faW5SZXNp
emVNb2RlKGZhbHNlKQotICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAs
IG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFy
ZW5jeShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAg
ICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVl
ZHNOb3JtYWxSZXBhaW50KQogICAgICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUp
CiAgICAgLCBtX2hhc1Zpc2libGVDb250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2Vu
ZGFudFN0YXR1c0RpcnR5KGZhbHNlKQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxz
ZSkKLSAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0Zp
eGVkSW50ZXJzZWN0aW5nVmlld3BvcnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZh
bHNlKQogICAgICwgbV8zRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCiAg
ICAgLCBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21w
b3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWlu
ZWREZXNjZW5kYW50cyhmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yKGZhbHNlKQotICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNl
KQogICAgICwgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9oYXMzRFRy
YW5zZm9ybWVkQW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3Qo
ZmFsc2UpCiAgICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9y
dENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQot
I2VuZGlmCi0gICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNl
bmRpZgotICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAs
IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM2MSwxNiArMzQ5
LDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0Rp
cnR5ID0gZmFsc2U7CiAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0
eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAv
LyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIg
c2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgotICAgICAgICBpZiAocmVuZGVyQm94KCkp
IHsKLSAgICAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Ny
b2xsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8o
KSkKLSAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbiht
X3Njcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKQEAgLTM3OCwyOSArMzU2LDEwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVy
TGF5ZXIoKQogICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7CiAKLSAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
Ci0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5k
aWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAg
ICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlv
bik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRl
c3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8qIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFy
ZWEoKnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVj
dGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIoKTsK
LQorICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGNsZWFyTGF5ZXJGaWx0ZXJz
KCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC05NDksNyAr
OTA4LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91
dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0
PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbigmZmxhZ3MpOwotICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQo
KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21l
dHJ5TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlz
LCBwYXJlbnQoKSk7CkBAIC05NTcsNyArOTE3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQK
ICAgICAvLyBDbGVhciBvdXIgY2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVh
ckNsaXBSZWN0cygpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJv
bHMoKSkgewogICAgICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAo
Z2VvbWV0cnlNYXApCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9G
bG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAt
OTY2LDcgKzkyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBh
cyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxh
eWVyLgogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9v
dCgpKTsKICAgICAgICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRl
ZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAg
ICAgfQogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDEzLDcg
Kzk3Myw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgbV9oYXNUcmFuc2Zvcm1lZEFu
Y2VzdG9yID0gZmxhZ3MuY29udGFpbnMoU2VlblRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1faGFz
M0RUcmFuc2Zvcm1lZEFuY2VzdG9yID0gZmxhZ3MuY29udGFpbnMoU2VlbjNEVHJhbnNmb3JtZWRM
YXllcik7CiAgICAgbV9iZWhhdmVzQXNGaXhlZCA9IGZsYWdzLmNvbnRhaW5zKFNlZW5GaXhlZExh
eWVyKTsKLSAgICBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxhZ3MuY29udGFp
bnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoZmxhZ3MuY29udGFpbnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOwog
CiAgICAgLy8gVXBkYXRlIHRoZSByZWZsZWN0aW9uJ3MgcG9zaXRpb24gYW5kIHNpemUuCiAgICAg
aWYgKG1fcmVmbGVjdGlvbikKQEAgLTEwNDMsMTMgKzEwMDQsOCBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAs
IGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cg
dXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewot
ICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQg
ZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFy
cXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRV
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRp
bmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsK
ICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXll
ckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg1LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBh
aW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJl
cigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJH
ZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVy
R2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0g
cmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBp
bmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlz
IGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIg
dG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2Vz
dG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xs
KTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpA
QCAtMTIwMiwxMiArMTEzNyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2Yg
YW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBw
cm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4K
IAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQ
b3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjI5LDEwIEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAg
aWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJl
bnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3Np
dGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFj
dCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAg
ICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50
LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJl
YSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9u
ZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93
UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVy
ZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3Np
dGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDks
OCArMTY0MiwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9z
aXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAg
ICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAg
ICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9u
KCkpOworICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0g
cGFyZW50TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2lu
dCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRp
b24oKSk7CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRM
YXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwpAQCAtMTg0Miw5ICsxNzc3LDkgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3Jk
ZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QK
IHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MCwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQog
ICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxh
eWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENy
b3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlm
IChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tP
cmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWlu
aW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jv
c3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxh
eWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRh
cmllcykgY29uc3QKQEAgLTE4NzcsNyArMTgxMiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYs
CiAgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYm
IGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVz
KTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigq
bmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRM
YXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVz
KTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRl
cmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7
CiAgICAgfQpAQCAtMTg4NSw1MCArMTgyMCw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRy
dWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3Vy
ciA9IHBhcmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0NSw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5
ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
Q29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rv
ckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wg
aXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5
OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Nj
cm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3Zl
cmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVy
biBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5
c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRl
ckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hF
dmVudCkKIHsKQEAgLTI0OTYsMjg5ICsyMzc0LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRl
ciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygp
LT5oYXNTY3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlk
IGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Ny
b2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVk
U2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3Rl
ZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVu
dGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2Zp
cmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAg
ICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9
IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4g
MSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0
YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBl
bHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0
aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFk
anVzdGVkRGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRl
bHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lk
dGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2lu
dCkKLXsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5m
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlz
IG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywg
dGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNN
b3VzZVBvc2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwg
bGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlv
dXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUg
ZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAo
YWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBh
dCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRh
LnNldFdpZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6
Om5vUGFuU2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBz
Y3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8g
RklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgot
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0
YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVy
bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9
IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVk
QnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5p
c05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0
cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNl
dCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Nj
cm9sbE9mZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Ny
b2xsZWRBcmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRo
ZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkK
LSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQg
LSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNa
ZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0
LCBzY3JvbGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5k
ZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAot
ICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMg
YSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxl
ZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3
aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVs
ZW1lbnQ/IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xs
VG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVs
bG9wdDsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xs
UG9zaXRpb24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9Z
UG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBv
c2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9u
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRl
ZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6
OlllcykKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiks
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpj
bGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgp
LCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFt
IDw8ICp0aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24p
OwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3Vy
cmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9u
TmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlv
bnMoKTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcg
PT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMt
PnNjcm9sbE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Ny
b2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
c2Nyb2xsVHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNs
YW1waW5nKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRT
Y3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3Jv
bGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJl
dmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Ny
b2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0
KG9mZnNldCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9m
ZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8
PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5
cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8g
YmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0
IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0
aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkg
LSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZz
ZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAg
IGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAo
c2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxY
T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Ny
b2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhP
ZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmICht
X3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAg
ICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBh
biB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAg
ICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2Ug
dGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGlu
Z0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcm
IHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25z
IG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91
bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20g
dGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdy
ZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2Ug
bGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92
ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0
ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJz
IGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0g
ICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJl
cyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAg
ICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3
ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVu
IHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBs
b2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGlu
ZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFu
dCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1
dG8qIHBhaW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
IHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSBy
ZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVn
aW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0Rl
cGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChy
ZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVy
KCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
ID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJl
Y3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0
IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJl
bmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCku
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBG
bG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVw
YWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRG
b3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNo
RmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
LQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRh
dGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNo
eVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRz
UmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1
bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50
KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBz
Y3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGlu
Z1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQot
ICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFt
ZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRC
YXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJ
ZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGlu
Zy4KQEAgLTI4MjMsNyArMjQxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zp
c2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBM
YXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZp
ZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXll
ciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNl
QW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3Ig
YmVoYXZpb3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDI4LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0
IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAg
ICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkg
dGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwpAQCAtMjg0MywyNCArMjQ0MCwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAog
ICAgICAgICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRo
ZSBzY3JvbGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91
dFBvaW50KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAg
aWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAg
ICBpZiAoYm94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsK
ICAgICAgICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9u
dGFsLXRiIGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2li
bGUgcmVjdAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Ny
b2xsIGJhci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRo
ZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnko
TGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAg
bG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRI
ZWlnaHQoKSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9J
bmNsdWRlU2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwog
ICAgICAgICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3Vu
ZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25z
LmFsaWduWSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBj
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVj
dChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9
IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Ny
b2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAg
YXV0byBhbmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBv
cHRpb25zLmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAg
SW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9s
ZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkp
LCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byByZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlv
bnMuYmVoYXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBu
ZXdSZWN0ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsK
ICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigp
LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2NCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24g
ZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0
cm95ZWQuCiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJl
YWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2
aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRW
aXNpYmxlUmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50
VmlzaWJsZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxl
bWVudC0+Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBA
IC0yOTUxLDIzICsyNTQxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFy
ZW50TGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlv
bnMpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVy
U2Nyb2xsKCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xh
eWVycygpKSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVl
ZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAg
ICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhl
cmUuCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNr
aW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0
b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29t
cG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxh
eWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAg
ICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3Io
KS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xs
LCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGlu
c2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4Nyw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5
b3V0U2l6ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyht
aW5pbXVtU2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExh
eW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdP
ZmZzZXQud2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1
c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTQzLDEwNzQgKzI3MTYsMTUyIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFy
Z2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAg
fQogICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAo
aXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFj
dG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgp
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5
b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1
dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIg
dGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9z
aXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2Rl
SURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQo
KSkgewotICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGlu
YXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdO
b2RlSUQoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCk7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdElu
Y2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJl
aGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7Ci0gICAgaWYgKHNo
b3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Ny
b2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsK
LSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKLSAgICBy
ZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRo
KCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVp
Z2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQot
ICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9m
ZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KLSAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhl
aWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgp
IC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIGlm
IChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xs
T2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQotICAg
ICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBzdHJldGNoOwotI2Vsc2UK
LSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
QWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlz
QWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBj
b25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0dXJuICFzY3JvbGxDb3Ju
ZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0g
c2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
UmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAot
ewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsK
LSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4g
cmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFy
UG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJU
b0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0g
ICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBw
b2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUoKSBjb25zdAotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOwotfQotCi1J
bnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEludFNp
emUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBpZiAoIWhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldFdp
ZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkp
KTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAgICAgICAg
Y29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZp
c2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250ZW50c1NpemU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVhc29uID09IEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOwotICAg
ICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW5kZXJMYXll
cjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRT
dGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xs
KCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwoKQotewotICAg
IC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMg
aG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0jZW5kaWYKLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxheWVyOjpPdmVyZmxvd0Nv
bnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgcmVuZGVy
Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAgICAvLyBTY3JvbGxiYXJz
IHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5j
bHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0byB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKLQotICAgIGF1dG8gaXNO
b25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIg
PSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICBib29sIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdl
dCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAgYm9vbCBoYXZlUmVzaXpl
ciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci0gICAgYm9v
bCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAm
JiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVy
dGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6ZTsKLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBp
cyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAgY29ybmVyU2l6ZSA9IElu
dFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAotICAgICAgICAgICAgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgT3ZlcmZsb3dDb250
cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBhdXRvIGJhclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBiYXJSZWN0LnNo
aWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwot
ICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgICAgICBpZiAocGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgICAgICBiYXJSZWN0LnNo
aWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRo
KCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIg
PSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgaWYgKHBsYWNl
VmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRo
KHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgp
OwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICBiYXJS
ZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHJlc3VsdC52
ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgYXV0byBjb3JuZXJSZWN0
ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0g
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0
Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKLSAgICB9
OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgcmVzdWx0LnNjcm9s
bENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBpZiAoaGF2ZVJlc2l6ZXIp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIHJlc3Vs
dC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNj
cm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJS
ZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
OjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9o
QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElmIHdlIGFyZSBub3QgeWV0
IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KLSAg
ICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJh
ci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgTGF5b3V0UmVjdCByZXBh
aW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9k
ZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRS
ZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotICAg
IGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0
KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNj
cm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5C
eVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSho
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFp
bmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9
PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzaGFk
b3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxT
Y3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFy
KHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5k
ZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRl
cmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwotICAgIGlm
IChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xs
YmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxS
ZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAgIGVsc2UgewotICAgICAg
ICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAgICAgICAgZGlkQWRkU2Ny
b2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAgICBpZiAocGFnZSgpLmlz
TW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwot
ICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0
KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJh
cigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50
YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xs
YmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9s
bEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCku
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGlj
aXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGlu
ZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4g
IFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBp
ZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlm
IChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYg
cmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9u
c0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5
Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxF
bGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8gRGVzdHJveWluZyBvciBj
cmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFu
ZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4K
LSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGFi
bGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewot
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZvciAoYXV0byogbmV4dExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Ci0gICAg
ICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQotewotICAgIC8v
IEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRzLgotICAgIGlmICghaXM8
SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+
cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCogYm94ID0gZW5j
bG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNj
cm9sbGFibGVBcmVhKCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJl
Y3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQot
Ym9vbCBSZW5kZXJMYXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVi
dWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6
OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4
Jywgc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNC
YWNrZHJvcEZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBm
aWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAg
aWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVp
bGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsK
LSAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICgh
bV92QmFyCi0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAo
bV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFy
Ci0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQot
SW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Nj
cm9sbENvcm5lciB8fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewot
ICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIp
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1p
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
Qm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGgg
YWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVh
ZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVp
Z2h0KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QK
LXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19
Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25z
RGlydHkgPSBmYWxzZTsKLQotICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92
ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhl
aWdodChyb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAg
ICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkg
LSBib3gtPmJvcmRlckxlZnQoKSk7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJv
dW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9s
bE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BP
dmVyZmxvdykpOwotICAgIAotICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkKLXsKLSAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cg
PSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3Jv
bGxzT3ZlcmZsb3dYKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygp
ICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5
ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9J
bnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVu
ZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5
bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBz
Y3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlm
IChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250
YWxPdmVyZmxvdygpOwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1Zl
cnRpY2FsT3ZlcmZsb3coKTsKLQotICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xs
YmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9o
QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRl
cmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0
byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFk
ZGVkIG9yIHJlbW92ZWQuCi0gICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
PSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJX
aXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJv
eC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgp
OwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpB
dXRvKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAg
ICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAg
ICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigp
LnBhcmVudCgpOwotICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgp
ICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhp
YmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgp
KTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUg
c3RlcCkuCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9s
bGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9
Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0lu
dChib3gtPmNsaWVudEhlaWdodCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFy
OjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNl
dFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0K
LQotICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhp
cyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25z
KS4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9s
bE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwot
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQg
b2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNo
YW5nZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTk2NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5p
c0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICAgICAgYmFzZUhl
aWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VI
ZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAg
fQogCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgc2V0TmVl
ZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlv
dXQoKTsKIAotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIC8vIEZJWE1FIChSYWRh
ciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vz
c2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKK1JlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKIHsKLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKIAotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94Lgor
ICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKIAotICAgIGlm
IChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHJlbmRlckJveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Cisg
ICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7CiAKLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVz
dWx0OworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAg
IGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21M
ZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgp
LCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJT
aXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhdmVSZXNp
emVyKSB7CisgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemVyID0g
Y29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwor
ICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAorU3RyaW5nIFJlbmRl
ckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHBy
b2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxh
eWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNh
c2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KKyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZs
b3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlD
b250cm9scykKLXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJm
bG93LgotICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMg
ZmlsdGVyIl9zKTsKIAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIC8vIE92ZXJsYXkgc2Nyb2xs
YmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhh
dCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0
aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMK
LSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBs
YXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQg
dG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJh
cnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0g
ICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVl
IHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRv
IGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4K
LSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8
IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAg
ICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jv
b3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFpbnRpbmdS
b290KQotICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KTsKKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotICAgICAgICBwYWludGluZ1Jvb3QtPnNldENvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxk
ZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Cisg
ICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1
aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAg
aWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAg
Ly8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkg
bW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAg
IC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFi
bHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVk
IHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0lu
dFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3Vy
ZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAg
IGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBt
X2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0
LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUg
aWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRv
IHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWlu
dCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNv
cm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFt
YWdlUmVjdCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitJbnRT
aXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KSBjb25zdAogewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJl
Y3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250
ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxD
b3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwg
cGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xs
YmFycywgc2luY2Ugd2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KLSAg
ICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworICAgIGF1dG8gcmVz
aXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVz
aXplQ29ybmVyID0gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4
WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCitpbnQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IHJl
c2l6ZUNvcm5lckltYWdlOwotICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKLSAgICBp
ZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgewotICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4Iiku
bGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUhpUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3Ju
ZXIiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5l
ckltYWdlTG9SZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1h
Z2UtPnNpemUoKTsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxXaWR0aCgpOwogCi0gICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNh
dmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsg
Y29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXpl
ckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVz
aXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29y
bmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0g
ICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJD
b3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVz
aXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0g
ICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0
dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QpCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6
ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4
dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7
Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwg
cmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEhlaWdo
dCgpOwogCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkg
bGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCi0gICAgLy8gQ2xpcHBp
bmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUu
Ci0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIExheW91dFJl
Y3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5z
ZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3Ju
ZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JH
QkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0
KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5t
YXhZKCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNQb2lu
dEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAordm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKIHsKLSAgICBpZiAoIWNhblJlc2l6
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICB1cGRhdGVMYXllclNj
cm9sbGFibGVBcmVhKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCi1ib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQorYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdo
IHRoZSByZXN1bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNv
bnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1f
dkJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
K2Jvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG1f
aEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsK
KyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9m
ZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVj
dCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdz
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRl
eHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQyMjgsMTcgKzI4NzksNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2Up
OwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50
Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywg
ZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgp
LCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJM
YXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJl
aGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVs
ZSBydWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjYxLDcgKzI5MDEsOCBAQCB2b2lkIFJl
bmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhl
IGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRo
ZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sg
Y2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBs
YXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50
KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Ny
b2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAg
ICAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbGF5ZXItPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWlu
dEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJl
bmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNv
bnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ3NjYsOCArMzQwNywxMCBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVy
TGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJh
cnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8pOworICAgICAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgaWYg
KGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3Jv
bGxiYXJzKCkpCisgICAgICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwor
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8v
IFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlS
ZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MjM3LDEx
ICszODgwLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYg
bGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQogeworICAgIEFTU0VSVChtX3Njcm9sbGFibGVB
cmVhKTsKKwogICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykg
ewogICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJm
bG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21l
bnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBh
aW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5w
YWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9p
bnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkg
KyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAogICAgICAgICAgICAgc25hcHBl
ZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CiAgICAgfQpAQCAtNTI4MCw3ICszOTI1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6
aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNj
YWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxh
eW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFy
ZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0
QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRl
bnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAg
ICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMs
IG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwg
ZmFsc2UpOwpAQCAtNTUxMSw3ICs0MTU2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAg
ICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQg
bG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAg
IGlmIChjYW5SZXNpemUoKSAmJiBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEt
PmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlv
biwgbG9jYWxQb2ludCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgbG9jYWxQb2ludCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTU1
ODYsMzUgKzQyMzEsNiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewot
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0g
WyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVy
UmVjdCkgewotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9y
ZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIo
KTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0
LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9Owot
Ci0gICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVu
dHMuYXQoaSk7Ci0gICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVj
dEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5y
ZXNpemVyKTsKLSAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMo
aGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVz
dExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50
ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQp
CiB7CkBAIC02MDc2LDcgKzQ2OTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCByZWN0ID0g
bV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0
aW9uKCkpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZWN0Lm1vdmVCeSgt
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaWYgKHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAg
IHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dD
bGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYzNzQsMjEg
KzQ5OTEsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1H
cmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9i
YWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRy
OwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRo
VHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAog
ewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygp
LT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02NDE5LDExICs1MDIxLDYgQEAgYm9vbCBSZW5kZXJM
YXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRC
ZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxh
Zzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxh
eWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9v
bCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExh
eW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5
ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NjY0LDcgKzUy
NjEsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25z
dAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhh
c092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzQs
NyArNTI3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVk
Q29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVu
dCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZs
b3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8
IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJv
bHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTY2OTksMzggKzUyOTYsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9u
RW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBo
YXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2Vs
dmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cg
b3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJm
bG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5n
IGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2Vl
cCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAg
Ym9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYm
ICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9s
bGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wg
bmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNW
ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihi
b3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3Zlcmxh
eSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkg
YmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2Ug
bmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAm
JiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3Jv
bGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIg
JiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1h
bEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzUxLDYgKzUzMTYsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkg
aGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBi
aXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRo
IHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCArNTMyOSwxNCBAQCB2
b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0
eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2
aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5p
c0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9
IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAg
aWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRl
ck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgp
OwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRy
OwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0
ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5
IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQK
ICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVw
ZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzNTEs
OCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTog
TmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChh
bmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXpl
clN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1
LDk4ICs1MzczLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQot
ewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRv
SGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJh
bWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVz
dCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zp
c2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAot
ICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewot
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBh
ZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlm
IChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZv
ciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAg
ICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50
IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJM
RShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCog
YWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAg
ICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNj
cm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVs
bHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkg
OiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
TGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVu
aXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNj
cm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0
aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIo
KTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkp
IHsKQEAgLTcwMDQsNiArNTQ5MCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJz
QWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmls
dGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclNjcm9sbGFi
bGVBcmVhKCkKK3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKKyAgICAg
ICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIGlm
ICghYm94LnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBjbGVh
ckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgbV9zY3JvbGxhYmxlQXJl
YS0+Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG51bGxwdHIpOworICAgIHVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVBbGxTY3JvbGxiYXJS
ZWxhdGVkU3R5bGUoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRp
bmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0
byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUgbW9kZSwKQEAgLTcwMzgsNyArNTU0Nyw3
IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkpCiAg
ICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJM
YXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
KTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRG
cmFtZXMoKSBjb25zdApAQCAtNzA2MCw2ICs1NTY5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNp
bXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xlUGFpbnRGcmVxdWVuY3lUcmFja2luZyB7
IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCkubGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVz
dGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjpz
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0
KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVh
c29uIHJlYXNvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
YTE1ZDUxYmZmZjVjLi44OTlhYWU2MzQ1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChD
KSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTUxLDcg
KzUyLDYgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIK
ICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFw
OwogY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OwogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTsKIGNsYXNzIFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwogY2xhc3Mg
UmVuZGVyU2Nyb2xsYmFyUGFydDsKQEAgLTE0MywxNyArMTQ0LDIxIEBAIHN0cnVjdCBTY3JvbGxS
ZWN0VG9WaXNpYmxlT3B0aW9ucyB7CiB1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90Owog
CiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7Ci1j
bGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBS
ZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsK
IHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tp
bmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIAogICAgIGV4cGxpY2l0IFJlbmRlckxh
eWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhKiBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIC8vIENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBh
bnkpIGhhcyBiZWVuIG51bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAg
LTIyMyw2ICsyMjgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFs
bG93ZWQoYm9vbCBmbGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQog
I2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRlc3Ryb3koKTsKKwogcHJpdmF0ZToKICAg
ICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSku
CiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEsOCArNDE5LDYgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNh
bm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEwNyArNDM5LDI4IEBAIHB1YmxpYzoK
IAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRp
b24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFs
OwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBy
ZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNjcm9s
bFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGlu
ZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAg
IHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJs
ZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9s
bFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZp
bmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3Jv
bGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgs
IFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFu
aW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBv
c2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9p
ZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFy
cXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChT
Y3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zm
c2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54
KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1w
ZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCgpOwotCiAgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIg
dGhhdCBpcyBzY3JvbGxhYmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJl
bmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3
IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAK
LSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdl
UmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1
bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0
VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBi
b29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNT
Y3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJv
b2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAg
Ly8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hC
YXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Ci0gICAgYm9v
bCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7Ci0gICAgYm9vbCBoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBib29sIHJl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9u
ID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVp
cmVzUmVjb25jaWxpYXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkaWRTdGFy
dFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9p
ZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCiAgICAgLy8gUmV0dXJucyB0cnVl
IHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9v
ayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCiAgICAg
Ym9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0
cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMg
bGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdzsgfQorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0
OwogCi0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVD
b3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwogCi0gICAgdm9pZCBwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFs
c2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVz
aXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CkBAIC01NTYsOSArNDgzLDYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91
dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5
ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVk
ZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC02
MzgsNiArNTYyLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3Rv
ckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
cykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBj
b25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0
cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5n
Um9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTksNyArNjI1LDYgQEAgcHVibGljOgogICAg
ICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8
UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVs
bHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xp
cFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5
cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNo
b3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92
ZXJmbG93Q2xpcCkKQEAgLTc4NSwxMSArNzEwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3Rh
dGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBv
c2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5
b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAg
ICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5z
Zm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNm
b3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OSwxNSArNzc5LDgg
QEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAg
IHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29s
IGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0gICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3I7IH0KKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdDsKIAogICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgogICAg
IC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJv
b2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBj
b25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Owot
Ci0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29s
IHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllcklt
YWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgogCiAg
ICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsK
IAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJl
cXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1
cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAt
OTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxp
ZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3Np
dGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbklu
dmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBh
aW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewog
ICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAg
ICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0x
MDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBj
bGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5
b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigp
IDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwog
CisgICAgdm9pZCB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgdm9pZCBjbGVhckxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0Zv
clBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNv
bnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExh
eWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlv
dXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFw
aGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMTAw
LDY0ICsxMDA0LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0
OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0Owot
ICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNv
bnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRz
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsK
IAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBM
YXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJv
b2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9s
bENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYp
IGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5h
bDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29u
c3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAg
IEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91
bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmco
KSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xs
QW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJs
ZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBz
Y3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29s
IGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNo
YWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNTAsNiBAQCBwcml2
YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXll
ciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50
IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0g
ICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwot
Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdp
bmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIp
ICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1OCw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9z
aXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0
aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZs
b3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0K
ICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6
b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0x
MjMwLDggKzEwNzAsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVj
dHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAg
ICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBj
b25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg2LDYgQEAg
cHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJy
ZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5k
IHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7
CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0
IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFk
IHRvCkBAIC0xMjYwLDE0ICsxMDk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBk
ZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlv
biA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRl
IGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNp
Z25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1f
dmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250
ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAg
ICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdw
b3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDggKzEx
MTIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAx
OyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25D
b250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFu
c2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9y
IDogMTsKQEAgLTEyODgsMTcgKzExMjEsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24K
ICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDog
MjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYK
LSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgot
Ci0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0g
ICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
Ym9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzksMjUg
KzExNjEsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAg
ICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3Np
dGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgot
ICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJm
bG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9p
bnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xs
aW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1h
cmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNl
ZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMg
Zm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFs
dWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRV
bml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcsMTAgKzExNzUsNiBAQCBwcml2YXRl
OgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdp
dGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4g
bV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3Jv
bGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0
PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9y
ZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRo
YXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2lu
YXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXll
cjsKIApAQCAtMTM3OCw2ICsxMTgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVx
dWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiArMTI1
NSwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVy
Kik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAj
ZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXll
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEm
IGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDU5N2JlYmI4YzRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgs
OSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJh
bWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29t
cG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8u
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMg
VGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292
ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3Zl
cmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVz
ZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7
CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0
aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxp
bmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxl
QXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRp
bGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGls
ZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtMTIyOCw5ICsxMjMxLDEyIEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVu
ZGVyTGF5ZXIqCiAgICAgfQogCiAgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVDb21w
b3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIEFTU0VSVChzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yKTsKKwogICAgICAgICBM
YXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29t
cG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9
IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9z
aXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXll
clJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5
b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNp
emUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApA
QCAtMTM2Nyw3ICsxMzczLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5l
ckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAg
ICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNp
emUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQo
KSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXll
ci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVy
KTsKKworICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3Jv
bGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC0xMzgxLDcgKzEzOTAs
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZz
ZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXpl
KG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQo
KSk7CisgICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVM
YXllcikKKyAgICAgICAgICAgIHNjcm9sbFNpemUgPSBJbnRTaXplKHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFk
ZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0OTAsMTQgKzE1MDEsMTcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9m
ZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVy
LmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NF
UlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRT
Y3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxp
bmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxh
eWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAg
ICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xs
aW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVl
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBj
b250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhl
ciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9m
U2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFT
U0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0x
OTA5LDcgKzE5MjMsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdT
dGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5j
bGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwog
CiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdM
YXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAg
ICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBw
aW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5z
ZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJS
ZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjcsMTYgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6
b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXll
ci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25z
dAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIu
dmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Nj
cm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDQsMTYgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlm
ICghaXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29y
bmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xs
Q29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3du
aW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRp
Y2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxT
Y3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIwODksMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3Jv
bGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JT
Y3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVy
Iik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVy
LnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hh
bmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNo
YW5nZWQpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgSG9yaXpvbnRhbFNj
cm9sbGJhcik7CisgICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgVmVydGljYWxTY3JvbGxiYXIp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2
LDcgKzIxMDIsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1f
b3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXll
ciB8fCAhc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5
OCwxNiArMjEyNSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0
aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVy
Lm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVM
YXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJM
YXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7
Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRv
KiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlv
blNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdC
b3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTEy
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5S
ZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAg
ICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWlu
dGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Ny
b2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxP
ZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRp
cnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVy
KCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVu
ZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcg
KzMxNjEsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3Qg
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09
ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMo
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxh
eWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRl
eHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxl
QXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5
ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRl
eHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBh
aW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFp
bnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5
ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CkBAIC0zNDIwLDE3ICszNDUwLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAg
ICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAg
ICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Ny
b2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNl
IGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAg
ICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NM
YXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVj
dCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JS
ZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOwor
CisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQu
dHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRy
YW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xp
cC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5w
YWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFu
c2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4
dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0
cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIo
Y29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5E
RUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRl
eCBjZmM0YWIxNTI4ODYuLmE0MmE5NjE0NmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlk
ZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00NjU3LDggKzQ2NTgsMTEgQEAgU2Ny
b2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZv
clZpZXdwb3J0Q29uc3RyYWluZWQKIExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpw
YXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFu
Y2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21l
IGEgcmVmZXJlbmNlLgotICAgIGlmICghYW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAo
IWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnNjcm9sbGFibGVBcmVhKCktPnZpc2libGVTaXplKCkp
KTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0OwogICAgIGlmIChpczxS
ZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDY3OCwxMSArNDY4MiwxNCBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhTY3JvbGxp
bmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290QmFja2dyb3VuZExheWVy
KCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigpLAogICAgICAgICAgICAgZnJhbWVW
aWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXIpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwog
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNr
aW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVy
TGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSwgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAg
fQogfQogCkBAIC00NzIwLDggKzQ3MjcsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAg
ICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAg
ICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Ny
b2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9k
ZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0g
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFi
bGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJl
bnROb2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpzY3Jv
bGxhYmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsK
QEAgLTQ4OTYsNyArNDkwNSw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAgICAgaWYgKG5v
ZGVJRCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlEKCkpCiAgICAg
ICAgIHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0dXJuIG1fc2Ny
b2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0dXJuIG1fc2Ny
b2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRo
QmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykK
QEAgLTUwMzUsMTEgKzUwNDQsMTQgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGEKICAgICBhdXRv
KiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKIAotICAg
IGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIWxheWVyLmhvcml6b250YWxTY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKCk7Ci0gICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyID0gIWxh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVM
YXllcik7CisKKyAgICBib29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFzY3JvbGxhYmxl
TGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYm9vbCBhbGxv
d1ZlcnRpY2FsU2Nyb2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCk7CiAKICAgICBtX2Nocm9tZUNsaWVudC5hZGRPclVwZGF0ZVNjcm9sbGlu
Z0xheWVyKGxheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpLCBiYWNraW5nLT5zY3JvbGxDb250YWlu
ZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGVkQ29udGVudHNMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCksCi0gICAgICAgIGxheWVyLnJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKIH0K
IAogdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZWdpc3RlckFs
bFNjcm9sbGluZ0xheWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggMDUyYTljNzVlNjM1Li5jN2ZjNjZjNzAxM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKQEAgLTE3Niw4ICsxNzYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9sZFN0eWxl
ICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRlKCpvbGRT
dHlsZSwgbmV3U3R5bGUpKSB7CiAgICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIg
PSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9mZnNldHMo
KTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlckxheWVyLT5lbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNu
YXBPZmZzZXRzKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFNu
YXBTdGF0ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9keSgpIHx8IGlzRG9jdW1lbnRFbGVt
ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSB2aWV3
KCkuZnJhbWVWaWV3KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXcudXBkYXRlU25hcE9mZnNldHMo
KTsKQEAgLTE5NSw4ICsxOTYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICBp
ZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7CiAgICAgICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5zdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxT
bmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxh
eWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJv
eC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0Jv
ZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVT
Y3JvbGxpbmdDb29yZGluYXRvclNjcm9sbFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NWYz
ZWFhMGNjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTAsMCArMSwxODQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIp
IG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiks
IGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQor
ICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxs
b3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRl
cm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwp
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRp
bmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBh
bmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBh
cyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVyKQorICAgIDogbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQor
ICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAg
ICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAgICwgbV9sYXllcihs
YXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50
KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9s
bFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xs
YWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJl
c2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9s
bFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5yZW5kZXJlcigpLmVs
ZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Ny
b2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQor
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0
aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Ny
b2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0Lgor
ICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0
b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1l
bnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVu
dEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VU
cmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlm
ICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChh
dXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9s
bEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5
ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFu
aW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xs
YmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisvLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVy
KG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7
CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
biA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
U2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBw
b3NpdGlvbi52YWx1ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gdHJ1
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pKTsKKyAgICBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7Cisg
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0
aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlv
bihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRp
b24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0
ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAg
ICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihw
b3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCBtX2xheWVyIDw8ICIgcmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOworCisgICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAgaWYg
KGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJ
bk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmlt
YXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1w
aW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0
aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2aW91
c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxU
eXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBl
LCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFt
cGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMo
U2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNl
dCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
KQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsK
KyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNl
dCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/
IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFu
aW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Cisg
ICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAg
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZz
ZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQ
b3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRl
ckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAi
IChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6
OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUg
KGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRo
aXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBp
dCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSBy
b3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
bmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAg
ICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlm
IChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAg
ICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xs
UG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0
IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZz
ZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
bmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xs
UG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkg
PT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hh
bmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBU
aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFp
biB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xs
UG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRz
Q29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVy
ZXIudmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxh
eWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBi
eSBhIHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywg
YmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcg
YW5jZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0lu
UmVuZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUg
b2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlz
aGVkLgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
KworICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25z
KCk7CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAg
ICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0
aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBv
c2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9m
IHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2Fz
ZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMu
CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAg
ICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24g
b2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1v
cmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBm
cm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWlu
dFBhcmVudCA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAgICAg
IHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSBy
ZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVn
aW9uLgorICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBl
bmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVu
ZGVyZXIuZnJhbWUoKSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIuZnJh
bWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRz
IHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBh
aW50ID0gcmVuZGVyZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlci5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIuY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJl
cGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBh
aW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZl
bnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50
U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWly
ZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewor
ICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAg
ICAgICBtX2xheWVyLnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlU
cmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gbV9sYXllci5iYWNraW5nKCkt
Pm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1c3Qg
c2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWlyZXNS
ZXBhaW50KQorICAgICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBh
bmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5k
aW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxv
dygpKQorICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwor
CisgICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZy
YW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5ZXIpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3Jv
bGwoKQoreworICAgIGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRp
bmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJh
bnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAg
ICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9t
IHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBt
X2xheWVyLnN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsK
KyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAg
ICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBu
aWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5
IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAg
ICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29t
cG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVy
Qm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgp
IGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxX
aWR0aDsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0
ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWlnaHQ7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fbWFycXVlZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHdvdWxkIGxp
a2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxk
cy4KKyAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICBt
X21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIG1fdXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNIVE1M
TWFycXVlZSgpICYmIHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVl
ZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21h
cnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+
KCZtX2xheWVyKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAg
ICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3JvbGxzT3ZlcmZsb3coKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZp
c2liaWxpdHk6OlZpc2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNldHRpbmdzKCkuYXN5bmNPdmVy
Zmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9V
Q0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVy
ZXIuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIuc2V0dGlu
Z3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAgc2Ny
b2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxpbmdO
b2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNj
cm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCisgICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJ
RCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIu
cGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwg
c2Nyb2xsaW5nTm9kZUlEKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQpOworfQorCitJ
bnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVy
bmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNp
b24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Ny
b2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2Ug
PSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52
aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgo
MCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1h
eCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVz
ZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVB
cmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hh
YmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisg
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNp
emUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0
KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNo
LnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUu
d2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAt
IChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJu
IHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICBy
ZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0
KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
LmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcmVjdCk7Cit9
CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFJl
Y3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJl
dHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9s
bGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwor
ICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJl
clRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50
KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgIHBv
aW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUoKSBj
b25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBp
ZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXpl
KHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhl
aWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVu
dHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3Jv
bGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNpemUgY29udGVudHNT
aXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWlu
KGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKworICAgIGlm
ICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXpl
LnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCku
aGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJl
YXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLnNl
dFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAgcmVuZGVyZXIuc2V0
TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCku
ZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0
YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRT
dGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlv
biB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBk
YXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hy
b21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVyOjpPdmVyZmxvd0Nv
bnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0byYgcmVuZGVyQm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQg
aW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9u
aW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGlu
Z1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1f
aEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3Zl
cmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Cisg
ICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNO
b25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7
CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSBy
ZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9s
bGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZl
Tm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNl
bnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7
CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJMYXllcjo6T3ZlcmZs
b3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRv
IGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJS
ZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXpl
LndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3Jv
bGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0
byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNl
dFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAg
ICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJl
c3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3Ju
ZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29y
bmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwor
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0
b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsK
KyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0
LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJl
c2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBj
b3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7
CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxSZWN0
ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
QVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUg
dHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICghYm94LT5wYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICBz
Y3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAg
ICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVj
dDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgYm94LT5y
ZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAg
ICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitzdGF0aWMgYm9v
bCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJl
dHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2
ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIu
ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVu
dC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3Qt
Pm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJl
dHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Ny
b2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxS
ZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAg
ICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFk
ZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbGF5
ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAgICAgICBzY3JvbGxB
bmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBhZ2UoKS53aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
PiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJh
ciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVT
Y3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
KyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNj
cm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1
YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6
IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9s
bGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0
ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFz
U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFz
dGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJC
YW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5
QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVh
OjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9
IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAg
fQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIg
c2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAg
IHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4
dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Cisg
ICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygp
CisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kg
PT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZC
YXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5j
eSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJl
bGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBt
X3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9v
dCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJlc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVyQm94KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92
ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1f
aEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKwor
ICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1l
UmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAg
bV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25zdAoreworICAgIFJl
bmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJm
bG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOworfQor
CitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tKCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5y
ZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwor
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAgIFJlbmRlckJveCog
Ym94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sK
KyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJv
eCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3Jv
bGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpOwor
ICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZs
b3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQo
b3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRP
dmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVU
b3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkp
OworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywg
LXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hv
cml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxv
d1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVy
biBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGllbnRX
aWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
YXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92
ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9t
YXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlzdCBi
b3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Ri
b3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxv
dyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGljYWxP
dmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92ZXJm
bG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3Ig
ZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBp
ZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgSG9y
aXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9u
dGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihy
ZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0
RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBh
dXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3Qg
YWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdl
ZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9v
bCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJh
cldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0
aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
fHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNI
b3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAo
Ym94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAg
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAg
IG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlci5y
ZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAg
ICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAg
IGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAgICAgICAgICAgICAg
ICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsKKyAg
ICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlci5p
c0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkt
PmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJCb3goKSk7CisgICAg
fQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBh
Z2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9CisgICAgaWYgKG1fdkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhl
aWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGll
bnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xp
ZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYWJs
ZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91
dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9s
bE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1
cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMg
c3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRpZgorCisgICAgaWYg
KCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1
cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5l
ZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4
IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25n
LiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5n
IHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRv
IGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlz
IGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3
aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8x
NTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBl
ZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQorCisg
ICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKG1fbGF5ZXIu
aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2Vv
bWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRh
dGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IElu
dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9s
cygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRo
ZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7
CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmhh
c092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZs
b3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJh
cnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQg
dGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhp
cyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisg
ICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5
ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRv
IGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUg
bGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJz
IHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlCisgICAg
Ly8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRv
IGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRp
bmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRv
IHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KKyAg
ICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8ICht
X3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgICAg
IGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJm
bG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gbV9sYXllci5lbmNs
b3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAg
ICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVyKCk7CisKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhp
cyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJh
cnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5
U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5
LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQg
c29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJp
bmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8g
Y29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cg
dGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBh
aW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYg
KG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZCYXIt
PnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3Ju
ZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxs
IHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Ny
b2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworCisg
ICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhl
IHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRP
ZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJl
Y3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygp
KSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5l
ciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRv
IHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkp
CisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRl
eHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQ
bGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAg
RmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKKyAgICAgICAgcmVz
aXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOworICAgICAg
ICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7CisgICAgICAgIGNv
cm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICB9CisKKyAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29y
bmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVj
dC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhl
aWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Cisg
ICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVz
aXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVj
dChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUs
IGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVj
dCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpID09IFJl
c2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3Rz
LnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBp
ZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAg
ICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4
dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7
CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5l
KSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3
aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAg
ICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAg
ICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBs
YXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNp
emUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5o
ZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1
aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFy
Z2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50
UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9s
YXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9s
UmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
cmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sK
KyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0Fj
dGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZvY3VzQ29udHJvbGxl
cigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25J
blZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5n
V2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKK30KKworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5
b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihtX2xheWVyLmVuY2xv
c2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3go
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLmVuY2xv
c2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3Jv
bGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0
KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
bGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvKiBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92
ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJl
bmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllcjo6
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNsb3NpbmdJbnRSZWN0
KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJv
b3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAg
ICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAg
ICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvIGJvcmRl
ckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5i
b3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYg
ZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7CisgICAgICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAg
ICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0
dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJv
bUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXpl
clJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90
dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRz
Lm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5z
aXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBmb3IgKGludCBpID0g
bGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3Qg
TGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAg
YXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVk
SW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOworICAgICAgICBp
ZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYm
IHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBv
aW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhp
dFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclNjcm9sbENvcm5l
cigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092
ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNv
bmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlm
ICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUg
dGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisg
ICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAg
IHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxv
d1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7
CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3
YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0g
Ym94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxT
Y3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092
ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAg
IHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAg
IC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdh
eXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRv
IGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUp
LgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93
WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7
CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUg
JiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZ
ICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsK
KworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9s
bGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZyYW1lVmlldyYgZnJh
bWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2li
bGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisgICAgaWYgKEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1l
bnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYm
IG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAgICBib29sIGlz
U2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKKyAgICBib29s
IGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisg
ICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFs
c2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVk
T3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGlu
Zywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91
cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVy
RWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7
CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5l
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghY29y
bmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQo
KSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3Vs
ZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQ
YXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJT
Y3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xs
Q29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5k
ZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyLmhhc092ZXJm
bG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1
ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKwor
ICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCks
IFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxk
IGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQo
JnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAg
ICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFy
ZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCkKK3sK
KyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlm
IChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKK30KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sK
KyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxp
bmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVu
ZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXllci5iYWNraW5nKCkt
Pmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Ny
b2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9u
IG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZv
eC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNv
bnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVn
aW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQor
ICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICog
c3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2Ug
aWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19j
YXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0
ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGlj
IGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEp
Cit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgp
KSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYg
c291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IG1f
bGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9z
aXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91
c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBv
ZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRpYyBJbnRQ
b2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAgICAgIGxh
c3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgZWxzZQor
ICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOwor
CisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2lu
dDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3Jv
bGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24K
KyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkg
PD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNldEhlaWdo
dCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0
YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciBiZWhhdmlvciwgY29uc3QgTGF5
b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KQor
eworICAgIEFTU0VSVChtX2xheWVyLmFsbG93c0N1cnJlbnRTY3JvbGwoKSk7CisKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAg
ICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQs
IFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VBbmltYXRl
ZFNjcm9sbGluZyA9ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5h
dXRvc2Nyb2xsSW5Qcm9ncmVzcygpCisgICAgICAgICAgICAmJiBlbGVtZW50ICYmIHVzZVNtb290
aFNjcm9sbGluZyhiZWhhdmlvciwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiB1c2VBbmltYXRl
ZFNjcm9sbGluZyA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87Cisg
ICAgfTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFs
UmVjdCkubG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91
bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgYmVoYXZpb3IpOworICAgICAgICBz
ZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9m
ZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IGFuaW1hdGVkKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xh
bXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKKworICAgICAgICBhdXRvIGxvY2Fs
RXhwb3NlUmVjdFNjcm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0OworICAgICAgICBsb2NhbEV4cG9z
ZVJlY3RTY3JvbGxlZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJl
Y3QobG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3go
KSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRl
bHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAg
aWYgKHJlbmRlcmVyLnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAh
cmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBp
ZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkg
eworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkg
KyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAg
ICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOwor
CisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhl
IG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJl
bWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOwor
ICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlci5w
YXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBm
cmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0g
bV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51
cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQg
Y2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8v
IGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50
IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAg
ICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKwor
ICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3
ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PworICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXll
ci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRT
Y3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9y
bXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0
cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIu
cmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBp
bmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1F
OiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBp
biBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFp
bmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Cisg
ICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwg
UmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVy
biBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwg
TWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0
cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uYjMzMGU0MzlhOWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtMCwwICsxLDI5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhl
ICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4w
LCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUg
IkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQ
TCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNo
IHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVy
IHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0
aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAq
IGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhl
IEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNj
cm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTWFy
cXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYpOworICAg
IHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIFJlbmRlckxheWVy
JiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1
ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworCisg
ICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25h
bDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNj
cm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3Qg
SW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBj
YW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShj
b25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxs
cHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4
LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBB
bmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQ
b3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9
IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1h
cnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQo
U2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9m
ZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCku
eCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFt
cGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkg
Y29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQor
ICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVx
dWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24n
dCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4K
KyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1
cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1
aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsK
KyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wg
aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBi
b29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsK
KworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJs
YXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Cisg
ICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlz
IHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2
b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29u
KSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAg
ICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92
QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVT
bmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRT
dGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAg
dm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhp
Y3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1c2Vz
QXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1Jl
bmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOwor
ICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVy
VmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNv
bnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJ
bnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBv
aW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7
CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOworCisg
ICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJ
bmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50UG9p
bnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1c3Bl
bmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZvcmNl
VXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0
IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9sbFNu
YXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRv
ck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKKyAgICBTdHJpbmcgZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNv
bnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAg
SW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAg
Ym9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
OyB9CisgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KKworICAgIGJvb2wgY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3Zl
cmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5l
cigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9s
bGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwor
CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3Zl
cmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5
ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Owor
CisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5k
KCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9p
ZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBo
YXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisK
KyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRl
biBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRv
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3Jv
bGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQ
b3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0
ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcgb24geDg2XzY0ICg0IGJ5dGVzKSwgYWZ0
ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7
CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgorICAgIGJvb2wgbV9oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9y
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOworICAgIGJvb2wgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA6
IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAg
IGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Njcm9sbEhlaWdodDsKKworICAgIFJlbmRl
ckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Cisg
ICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBG
b3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJh
cjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAg
IC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXpl
ci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVl
Pi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQzNmUuLjUyMjAyNTliZWVjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDksNiArNDks
NyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg4Miw3ICs4ODMsMTEgQEAgU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
ICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9s
bGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAog
Ym9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5
Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3Np
bmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdM
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworCisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2Li43YjRlNzZkYzU3YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAg
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBt
X2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVy
RmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpOworICAgIGxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShm
YWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpA
QCAtMTcxLDExICsxNzIsMTQgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpzdGFydCgpCiAgICAgaWYg
KG1fdGltZXIuaXNBY3RpdmUoKSB8fCBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVl
ZUluY3JlbWVudCgpLmlzWmVybygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3Jv
bGxhYmxlTGF5ZXIpOworCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KG1fc3RhcnQsIDApLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFy
dCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwog
ICAgICAgICBtX3N0b3BwZWQgPSBmYWxzZTsKQEAgLTI0MywxMyArMjQ3LDE2IEBAIHZvaWQgUmVu
ZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCku
dmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJU
KHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAgICAgICBtX3Jlc2V0
ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5
ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTI3Miw3ICsyNzksNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQo
KQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAgICBpbnQgY2xpZW50
U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCkt
PmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRWYWx1ZUZvckxlbmd0
aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVudCgpLCBjbGllbnRT
aXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gbV9sYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKTsKKyAg
ICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgp
KTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVtZW50ID8gaW5jcmVt
ZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAgICAgICAgICAgIG5l
d1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkgKzI5Niw5IEBAIHZv
aWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAogICAgIGlmIChpc0hv
cml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7Cisg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7CiAgICAgZWxz
ZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRl
eCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9wdGlvbmFsPEZsb2F0UmVj
dD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0
IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKFRleHRTdHJlYW0mIHN0
cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJlYW0gPDwgIihCKWxvY2sv
KEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0
aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVy
YXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkg
bGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ss
IChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2
ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgaGFzTGF5
ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0eWxlLCAoKylEaXJ0
eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBAIC0xMTE1LDEwICsxMTE1
LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYg
c3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAgICAgICAgIHN0cmVhbSA8
PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAg
ICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAg
ICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJTIjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVsc2UKKyAgICAgICAgc3Ry
ZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAgICAgICAgIHN0cmVhbSA8
PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYjkxNTky
MmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2Fj
aGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1l
bnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3Rz
IHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRo
ZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNv
bnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2NWMuLjI1N2FmYmUxOTA0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlLCBTY3Jv
bGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBj
b25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0gICAgUmVuZGVyVGV4
dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVy
ZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVy
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgYXV0byog
Ym94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIo
KS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5
ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
UmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAK
IGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAg
ICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24s
IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGxh
eWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOworICAgIGF1dG8q
IGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXll
clNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAyMGZlODIuLjU5MjBk
NThmMjBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0TWFya2VyLmgiCkBAIC02MDAsMjAgKzYwMSwyNCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
YwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7
Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0gICAgICAgIGlmIChs
YXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8
PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3go
KSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBsYXll
ci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGxh
eWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gbGF5ZXIuc2Nyb2xs
SGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGxheWVyLnNj
cm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAg
ICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94
KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAg
ICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5k
VG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0
ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgfQogI2lmIFBM
QVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2Nr
VGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBT
Y3JvbGxiYXJUaGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVN
YWMqPigmc2Nyb2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0
RGlyZWN0aW9uUlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgICAg
ICB0cyA8PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAg
ICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVy
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhl
bWVNYWMmIG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9s
bGJhclRoZW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJlY3Rp
b25SVEwoKnNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGlyZWN0aW9uIjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBiMTAzM2RhMDc5MzAuLmZmNDIyMjA3MzIxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMzMiw4
ICszMzMsMTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVy
KCktPmNhblJlc2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZv
LmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludElu
Zm8ucmVjdCk7CisgICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpIHsK
KyAgICAgICAgQVNTRVJUKGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICBsYXll
cigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwg
cm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBp
c092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWQ2Mzdm
ZjQ0Zjk2Li5mZTVjZTQwNTk2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTE1OCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xODMzLDcgKzE4MzQsOCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVu
dCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NF
UlQoYm94LmxheWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5z
Y3JvbGxhYmxlQXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpA
QCAtMjg1NCw4ICsyODU2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJu
YWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBp
ZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWROb2RlVHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA1YzQ5
OTNiYWUwMjguLjJlZTZiZTNjN2ZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2IEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBS
ZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPdmVyaGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwg
c2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwg
dG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJs
ZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBz
Y3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdT
IHRlc3RpbmcuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRN
TEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3Jv
bGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6
c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6
XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3aXRoSW5z
ZXQ6XSk6CisKIDIwMjAtMTEtMjEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGFuIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyBmb3Igd2hlZWwgZXZl
bnQgZ2VzdHVyZXMgYmVjb21pbmcgbm9uLWJsb2NraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4uY2JjNTY3ZTNiZTU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9K
U0V4ZWNTdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dB
S1dpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2Vu
ZGlmCkBAIC03Nyw3ICs3OCwxNCBAQCAtIChpbnQpc2Nyb2xsWE9mZnNldAogICAgIGlmICghaXM8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dD
bGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6
OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5
ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFi
bGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC05MSw3
ICs5OSwxNCBAQCAtIChpbnQpc2Nyb2xsWU9mZnNldAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVu
ZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIg
PSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS55KCk7CiB9CiAKIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9m
ZnNldDooaW50KXkKQEAgLTExMSwxMSArMTI2LDE0IEBAIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNl
dDooaW50KXggc2Nyb2xsWU9mZnNldDooaW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6KEJPT0wpYWRq
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotICAgIGxheWVyLT5z
Y3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6
U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdl
YkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIGlmIChhZGp1c3RGb3JJT1ND
YXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhm
YWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKIH0KIAogLSAodm9pZClhYnNvbHV0ZVBvc2l0aW9uOihpbnQgKil4
IDooaW50ICopeSA6KGludCAqKXcgOihpbnQgKiloCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzZmVhMTYwODM5MmYuLjEyZDE1OWVjOGZmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NSw2ICs5
NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAgQEAgLSAodm9p
ZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICNlbHNlCiAgICAg
ICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
OwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7
CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUo
V2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJD
b3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgICAgICAgICBf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAg
ICAgIH0KQEAgLTc1OCw5ICs3NjAsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAgICAgaWYgKHN0
YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0byogbGF5ZXIg
PSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChs
YXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5l
bnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3Np
bmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdl
YkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CiAKICAgICAgICAgICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAg
ICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRl
eCA2MjM2YTExYmYyOTYuLjU4ZGRlMDVkNzA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemlt
bWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91
dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBPdmVyaGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92
ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJM
YXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJl
LXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3Vw
cG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBm
b3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXc6Omdlc3R1cmUpOgorCiAyMDIwLTExLTE5ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1
amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtUZXh0dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJl
TWFwcGVyIGZyb20gVGV4dHVyZU1hcHBlckxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4uMTUyNDk4YWIzMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1
cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIwNDksMTEgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJl
Y3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAg
ICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAg
ICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2lj
YWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xs
ZWRBcmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFj
a1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNr
UHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVy
ZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431927"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414922</attachid>
            <date>2020-11-27 01:06:17 -0800</date>
            <delta_ts>2020-11-28 00:28:43 -0800</delta_ts>
            <desc>Patch, v15 (squashed for testing)</desc>
            <filename>patch-v15.diff</filename>
            <type>text/plain</type>
            <size>307810</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOTE2YjIzMTEwMWUuLjY2NjZhODE1NDZjYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBA
CisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10
by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTExLTIyICBEaWVnbyBQaW5vIEdh
cmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdW0dUS10gVW5yZXZpZXdl
ZCB0ZXN0IGdhcmRlbmluZy4gVXBkYXRlZCBleHBlY3RhdGlvbnMgYW5kIGJhc2VsaW5lcyBhZnRl
ciAyNzAxNjQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9j
ay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9pZC1mbG9hdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQvbWFycXVlZS1zaHJpbmstdG8t
YXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAppbmRleCBlOGFkM2I3Y2MzMmYuLmU4MzVhZmUzNjlm
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3QvYmxvY2svZmxvYXQv
bWFycXVlZS1zaHJpbmstdG8tYXZvaWQtZmxvYXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9ibG9jay9mbG9hdC9tYXJxdWVlLXNocmluay10by1hdm9p
ZC1mbG9hdHMtZXhwZWN0ZWQudHh0CkBAIC0yMyw1ICsyMyw1IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAogICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDAp
IHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCiAgICAgICAgIFJlbmRlckJsb2NrIHtESVZ9
IGF0ICgwLDApIHNpemUgMTAweDEwMAogICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAotbGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMCBzY3JvbGxYIC01MAor
bGF5ZXIgYXQgKDU4LDk0KSBzaXplIDUweDEwMAogICBSZW5kZXJCbG9jayB7TUFSUVVFRX0gYXQg
KDUwLDApIHNpemUgNTB4MTAwIFtiZ2NvbG9yPSMwMDgwMDBdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzIzYWI2
YjRlNmM0Li45YmZmOWFiYzA0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNjAgQEAKKzIwMjAt
MTEtMjYgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICBXSVAgcGF0Y2gsIHNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1
ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVdoZWVs
RXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9s
bEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUpOgor
ICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsTGVm
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbFRvcCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpp
bnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omxv
Z2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXF1aXJlc0xheWVy
V2l0aFNjcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElz
S25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpvdmVyZmxv
d0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29uc3Ry
YWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xs
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJv
bHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNj
cmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJv
bVJlc2l6ZUNvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXpl
Q29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2xpcFRvUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JG
cmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3Jv
bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVz
ZXNBc3luY1Njcm9sbGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphZGp1
c3RlZFNjcm9sbERlbHRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpwYW5TY3JvbGxGcm9tUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9YUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNj
cm9sbFRvWVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzZXRTY3JvbGxQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNldFNjcm9sbE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmhhbmdB
bW91bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omlz
QWN0aXZlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxDb3JuZXJSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkU3RhcnRTY3JvbGwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5W
aWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc0hh
bmRsaW5nV2hlZWxFdmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGVBbmNlc3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXNl
RGFya0FwcGVhcmFuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5p
bWF0b3JNZXNzYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6Om92ZXJmbG93VG9wIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRT
Y3JvbGxhYmxlT3ZlcmZsb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNIb3Jp
em9udGFsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2Vj
dFJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNo
b3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyOjpwYWludFNjcm9sbENvcm5lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllci5oOgorICAgICAgICAoaXNUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVy
Zmxvd1RpbGVkQmFja2luZ0NvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDbGlwcGluZ1N0YWNrTGF5ZXJH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxheWVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZU92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFyZW50UmVsYXRpdmVTY3JvbGxhYmxlUmVjdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNj
cm9sbGluZ05vZGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9k
ZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRv
dWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1VzZXJTY3JvbGxJblByb2dyZXNzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9y
bWFuY2VUZXN0aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVzZXNBc3luY1Njcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRl
c3Ryb3lNYXJxdWVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdO
b2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyaGFuZ0Ft
b3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNv
bnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxk
U3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVj
dHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsYmFyT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFz
VmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoYXNPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxv
d0JvdHRvbSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpvdmVyZmxvd0xlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlUmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVT
Y3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRy
b2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxv
d0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
c0FjdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtB
cHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0
UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3Jv
bGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXBkYXRlUmVzaXplclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNsZWFyUmVzaXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYW5TY3JvbGxGcm9tUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFu
aW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJx
dWVlOjpSZW5kZXJNYXJxdWVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3V0
cHV0UmVuZGVyVHJlZUxlZ2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om91
dHB1dFJlbmRlck9iamVjdCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2Fs
U2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToKKwogMjAyMC0xMS0yMiAgQW50dGkgS29pdmlzdG8g
IDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIENvbnZlcnQg
c29tZSByZW1haW5pbmcgSW5saW5lQm94IGFjY2VzcyB0byB1c2UgaW5saW5lIGl0ZXJhdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQppbmRleCAzNzg5YWEzODM5NDAuLjc1MTE0MTg0ZTFhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xNDYyLDYgKzE0NjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCiAgICAgcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaAorICAgIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgK
ICAgICByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuaAogICAgIHJlbmRlcmluZy9SZW5kZXJN
ZWRpYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDcy
NjI4OTFlY2M2My4uOTgzYzVmM2RjNmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjIxNyw2ICsyMjE3
LDcgQEAgcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcAogcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCityZW5kZXJpbmcvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXlvdXRTdGF0ZS5jcHAKIHJlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAKIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggOTFkNzRjNzQ1MjI1Li5kODA4ZDM3YzM4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNzMsNiArNDA3Myw3IEBA
CiAJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4MzcwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlckltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4Mzkw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODdBMDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNFQTQ4M0IwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY1M0ZCODQyMTNCN0E2NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODAwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
QTQ4NDEwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODg3MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNFQTQ4NDgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLmgg
Ki87IH07CiAJCUJDRUE0ODhBMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFQTQ4NEIwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwMTUsNiArNjAxNiw4IEBACiAJCTBGNENERUFBMjNEOTFB
OEEwMDI1MUIwMiAvKiBTY3JvbGxUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxU
eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgxMjEzQjFCQjgw
MEM0MEQzNCAvKiBDU1NGaWx0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTRmlsdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZC
ODMyMTNCMUJCODAwQzQwRDM0IC8qIENTU0ZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NGaWx0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1
M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjUzRkI4MzIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCODkyMTNCNzY4NDAw
QzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJMYXll
ckZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1M0ZCOEIyMTNCNzY4
NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyRmlsdGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW5kZXJMYXllckZpbHRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU0
RENFMzE4ODEwNTFEMDAzRUVEQkIgLyogVGV4dEF1dG9TaXppbmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dEF1dG9TaXppbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk1ODYsNiArMjk1ODksOCBAQAogCQkJCTBGNTNGQjg5MjEzQjc2
ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLywKIAkJCQkzQzI0NEZFNUEzNzVB
QzYzM0Y4OEJFNkYgLyogUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgKi8sCiAJCQkJM0MyNDRG
RTRBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCAqLywKKwkJCQkw
RjUzRkI4MzIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAg
Ki8sCisJCQkJMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCAqLywKIAkJCQkyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuY3BwICovLAogCQkJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBSZW5kZXJMYXlv
dXRTdGF0ZS5oICovLAogCQkJCUJDMzNGQjFBMEYzMEVFODUwMDJDREQ3QyAvKiBSZW5kZXJMaW5l
Qm94TGlzdC5jcHAgKi8sCkBAIC0zNDA1Myw2ICszNDA1OCw3IEBACiAJCQkJMEY1ODBDRkYwRjEy
REU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQ29tcG9zaXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9k
ZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAv
KiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkwNjYw
NzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBSZW5kZXJMaW5lQm94TGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxpbmVCcmVh
ay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA3ZjJiZGE4YmUxM2Mu
LmQxNjhiM2JmZTBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MDMsNyArMzkwNCw3IEBA
IFNjcm9sbGFibGVBcmVhKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxl
QXJlYUlmU2Nyb2xsYWJsZSgpIGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IGJveC5sYXllcigpOworICAgIHJldHVybiBib3gubGF5ZXIoKSA/IGJveC5sYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBAIC0zOTE2LDcgKzM5
MTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IGlz
IHBvaW50IGEgU2Nyb2xsT2Zmc2V0IG9yIFNjcm9sbFBvc2l0aW9uPyBUZXN0IGluIFJUTCBvdmVy
Zmxvdy4KLSAgICBib3gubGF5ZXIoKS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOworICAgIGJveC5s
YXllcigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKIH0KIAogI2lmIEVOQUJMRShNQVRITUwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZDYx
YzdmNjk1NDEyLi5lZDE5NWJiMDNjNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTkyLDYg
KzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5o
IgpAQCAtMTMzNCw4ICsxMzM1LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGludCBu
ZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdMZWZ0
ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0ZWRT
Y3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1dG8s
IHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAgICAg
ICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7Cisg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJl
bmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CiAgICAgfQogfQogCkBAIC0xMzU4LDggKzEzNTksOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNjcm9s
bFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRlZ2Vy
KG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFu
aW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9y
OjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87
CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlwZTo6
UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0cnVl
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXllcigp
ID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggOWI2N2QyOTdlMTkxLi44NGRlOThjOGJhZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxl
Y3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2RlLCBjb25zdCBTY3JvbAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKSB7CiAgICAg
ICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCkgewotICAgICAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgICAgICBsYXllci0+c2Ny
b2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwgeyByZXZlYWxNb2RlLCBhbGlnbm1l
bnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwot
ICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgICAgICB1cGRhdGVBcHBlYXJh
bmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ub3RpZnlS
ZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1fZG9jdW1lbnQtPmZyYW1lKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCmluZGV4IDBhZGY3ZDE2
NGUyZS4uMmY4Y2I2OWJlMzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXJxdWVlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVs
ZW1lbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1
ZWUuaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCkBAIC0xNzUsNyArMTc2
LDEwIEBAIFJlbmRlck1hcnF1ZWUqIEhUTUxNYXJxdWVlRWxlbWVudDo6cmVuZGVyTWFycXVlZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5oYXNMYXllcigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVuZGVyQm94TW9kZWxPYmpl
Y3QoKS0+bGF5ZXIoKS0+bWFycXVlZSgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJl
bmRlckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IDJkZTQzZGFk
NWE5Zi4uYzAyYThkNzZjMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjUzLDkgKzI1NCwxMSBAQCB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYXV0byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxh
eWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICBib29sIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KCpyZW5k
ZXJlcikuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgU2Nyb2xsT2Zmc2V0
IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlubmVyTGF5ZXItPnNj
cm9sbFdpZHRoKCksIDApOwotICAgIGlubmVyTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldCk7CisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uID8gMCA6IGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxXaWR0aCgpLCAwKTsKKyAgICBp
bm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNsb3NlU3VnZ2VzdGlvbnMoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA2NWViMjA5ZDRkMzcuLjViMWNiYzNjYTNm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtODAsNiArODAsNyBAQAog
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMzQxLDcgKzM0Miw3IEBA
IHN0YXRpYyBib29sIGhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5v
ZGUqIHN0YXJ0Tm9kZSwgY29uc3QgV2hlCiAKICAgICBSZW5kZXJCb3gqIGN1cnJlbnRFbmNsb3Np
bmdCb3ggPSAmaW5pdGlhbEVuY2xvc2luZ0JveDsKICAgICB3aGlsZSAoY3VycmVudEVuY2xvc2lu
Z0JveCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVudEVuY2xv
c2luZ0JveC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogYm94TGF5ZXIgPSBjdXJyZW50
RW5jbG9zaW5nQm94LT5sYXllcigpID8gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKS0+c2Ny
b2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1FdmVu
dCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKICAgICAgICAgICAgIGJv
b2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7
CkBAIC0xNTYyLDcgKzE1NjMsNyBAQCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2Vs
ZWN0Q3Vyc29yKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICAg
ICAgaWYgKGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJl
bmRlcmVyKS5sYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlz
UG9pbnRJblJlc2l6ZUNvbnRyb2wocm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkp
KTsKICAgICAgICAgICAgICAgICBpZiAoaW5SZXNpemVyKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGF5ZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/
IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsYXllci0+cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNv
dXRoRWFzdFJlc2l6ZUN1cnNvcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE5
MTIsOSArMTkxMyw5IEBAIFNjcm9sbGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKE5vZGUqIG5vZGUpCiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgewotICAgICAgICAgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHNjcm9sbGFibGVMYXllcjsKKyAgICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVM
YXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6
SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgICAgIGlm
ICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAz
MDU4ZDkxZGU2NWEuLjg1ZTU3ZTk4YzExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJT
Y3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTk1LDcgKzI1OTYsOCBAQCB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRDb250ZXh0
KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7
CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygp
KSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgICAgIHJl
bmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpOworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlclZpZXct
PmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMyMTAsNiArMzIxMiwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIg
YW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIg
PSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmIChlbmNs
b3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBT
Y3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAg
IC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjIsNyArMzg2OCwxMSBAQCBTY3Jv
bGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIElu
dFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApA
QCAtNDMyNiw4ICs0MzM2LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwg
eyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNz
aWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkK
LSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVSb290TGF5ZXIt
PnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZp
b3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRp
cnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEzNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOTQsNyArMzk1LDgg
QEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIsIEZvY3VzRGlyZWN0aW9u
IGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbEJ5UmVj
dXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0Mi4uOGE0Y2E3YmNkMDQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNTcsNiArNTcsNyBAQAogI2lt
cG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCiAjaW1wb3J0ICJSZW5kZXJM
YXllckNvbXBvc2l0b3IuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAj
aW1wb3J0ICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCkBAIC04MTksMTQgKzgyMCwxNSBAQCB2
b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZvck5vZGUoY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5o
YXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJMYXllciYgbGF5ZXIgPSAq
ZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBh
dXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxh
eWVyKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9IGxheWVyLmN1cnJlbnRT
Y3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xs
ID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7Ci0gICAgbGF5
ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKLSAgICBsYXllci5z
ZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBhdXRvIG9sZFNjcm9sbFR5
cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2Nyb2xsYWJs
ZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpV
c2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKIAotICAgIGxheWVyLmRp
ZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CisgICAg
c2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdh
eXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdlb2xvY2F0aW9uUGVybWlz
c2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXgg
YWZkNzZkMjU2ZWQwLi4wMDc5OTdlMmIwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisj
aW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIK
QEAgLTc4NCw3ICs3ODUsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YUZvckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkK
ICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0
dXJuIGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKworICAgIHJldHVybiBudWxs
cHRyOwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNj
cm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggYzhkODFlZjI0ODY2Li45NWYwMTc0Yzc4OTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcApAQCAtNTksNiArNTks
NyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKQEAgLTExMTMs
OCArMTExNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgLy8gei1pbmRleC4gV2UgcGFp
bnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNvIHRoYXQgdGhlIHNj
cm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dyb3VuZC9ib3JkZXIuCiAg
ICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91bmQgfHwgcGhhc2UgPT0g
UGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092ZXJmbG93Q2xpcCgpICYm
IGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6
VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFp
bnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50
T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRq
dXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CisgICAg
ICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkg
PT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCisgICAgICAg
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludElu
Zm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBw
ZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCkKQEAgLTIwMDcsNyArMjAwOCwxMiBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5P
dmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQbwogICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQ
b2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0
KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5oaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFp
bmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwogfQogCiBOb2RlKiBSZW5k
ZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjUwMywxMCArMjUwOSwyMyBAQCBp
bnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lIGJhc2VsaW5lVHlw
ZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNvbnRlbnQgaW5zaWRlIHRo
ZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdoaWNoIGp1c3QgYm90dG9t
LWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAgb24gZmluZGluZyBhIGJh
c2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9yIGlmIHdlIGFyZSBzY3Jv
bGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVyZmxvdzpoaWRkZW4gYmxv
Y2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAgIGJvb2wgaWdub3JlQmFz
ZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8IChkaXJlY3Rpb24gPT0g
SG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXIoKSB8fCBsYXllcigp
LT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDogKGxheWVyKCktPmhvcml6
b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCkgIT0gMCkpKSkg
fHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsKLSAgICAgICAgCi0gICAg
ICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSA/IE9wdGlvbmFs
PGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKKyAgICAgICAgYXV0byBp
Z25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICAgICAgICAg
IGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09IEhvcml6b250
YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAg
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAgICAgIH07CisKKyAgICAg
ICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lKCkgPyBPcHRpb25h
bDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CiAgICAgICAgIAogICAg
ICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewogICAgICAgICAgICAgLy8gSGlz
dG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2VsaW5lcy4gQnV0IHdlIGNh
bid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4
IGJiMjJmMzRmZDNmMy4uYmQ3MGQ2MWQ0MTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ4LDcgKzM0OCw4IEBAIHZvaWQgUmVuZGVyQmxv
Y2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dp
Y2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAmJiBjaGlsZHJlbklubGlu
ZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxk
cmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5ZXIoKSAmJiBsYXllcigp
LT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKKyAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVB
cmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFi
bGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpLT5pc0hvcml6
b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDMwN2Y5YjJjN2YyZi4uNWJhZjc5
MDI4NDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjMsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJs
ZUNlbGwuaCIKQEAgLTMxOSwxMCArMzIwLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAg
ICAgLy8gSWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNj
cm9sbExlZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAg
Ly8gbmV3IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBsYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0g
bmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9s
bFBvc2l0aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgZmxvYXQgem9v
bVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUoem9vbVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNj
cm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZmxv
YXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21T
Y2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAv
LyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxh
eW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgp
IGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewotICAgIHJldHVy
biBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24o
KS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xp
cCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9u
KCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBv
c2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8g
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVy
Zmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQ
b3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWln
aHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEgKzU5NSwzOCBAQCBzdGF0aWMgdm9p
ZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKICAgICBQYWdlJiBw
YWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmlu
Z1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBsYXllci5zY3JvbGxBbmltYXRv
cigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigp
KTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgYXV0byYgc2Nyb2xsQW5pbWF0b3Ig
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7CisgICAgc2Nyb2xsQW5pbWF0b3Iu
c2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwog
fQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBj
bGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YUG9zaXRp
b24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKICAg
ICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1cm47Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVy
KCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1h
dGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBz
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0
ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAg
cmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVy
U2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsK
LSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJl
bmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MjYsMTIgKzgzOCwxOCBAQCBi
b29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIAog
aW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/
IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Ny
b2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkg
OiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXll
cigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsK
KyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5z
aWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTcsMTYgQEAgaW50
IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICBp
ZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygp
KSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9s
bGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFi
bGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAg
IH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVy
Zmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygp
KSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xs
YWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzSG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzUsOCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNT
Y3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5
ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5k
ZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXll
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgYXV0
byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBi
b3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1l
bnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTA4LDEzIEBAIGJvb2wgUmVuZGVyQm94Ojps
b2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAgIGlmIChsKSB7
CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkg
d2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3Vt
ZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxh
cml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3Jv
bGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQg
PSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxp
bmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGll
cik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJl
Y3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGJv
eExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0
cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEsNiArOTQzLDIw
IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29u
c3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAK
K2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Zl
cnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoc3R5bGUo
KS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUgfHwgc3R5bGUoKS5oYXNWaWV3cG9ydENvbnN0cmFp
bmVkUG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2Fu
IGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4g
dGhhdCBjYXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQo
KSBjb25zdAogewpAQCAtOTk3LDggKzEwMzMsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6Zmlu
ZEF1dG9zY3JvbGxhYmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94
OjpwYW5TY3JvbGwoY29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkK
LSAgICAgICAgbGF5ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cikKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYW5TY3JvbGxGcm9tUG9pbnQo
c291cmNlKTsKIH0KIAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkg
Y29uc3QKQEAgLTEwMjcsNyArMTA2MywxMSBAQCBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNj
cm9sbFBvc2l0aW9uKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwogCiAgICAgQVNT
RVJUKGhhc0xheWVyKCkpOwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOwor
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiB7IDAsIDAgfTsKKworICAg
IHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIExheW91dFNp
emUgUmVuZGVyQm94OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29uc3QKQEAgLTE1NzUs
OSArMTYxNSwxMCBAQCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9C
ZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dy
b3VuZFBhaW50ZWRFeHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5n
TWF5UmV2ZWFsQmFja2dyb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAg
ICAgcmV0dXJuIGZvcmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVj
dCwgYmFja2dyb3VuZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKIH0KIApAQCAtMTg5NCwxMCAr
MTkzNSwxMCBAQCBMYXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYgbG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUo
Y2xpcFJlY3Quc2l6ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgp
LCBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQg
c2Nyb2xsYmFycyBpZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKSB7CiAgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRy
YWN0KGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBS
ZWN0Lm1vdmUoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5j
eSksIDApOworICAgICAgICBjbGlwUmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAzY2Q4MGJjZDA3MmQuLmRm
MGVhMWMwNzE0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTYsNiAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRl
eCgpIHx8IGhhc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKKyAgICBi
b29sIHJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICBib29sIGJh
Y2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJl
Y3QpIGNvbnN0IGZpbmFsOwogICAgIAogICAgIC8vIFJldHVybnMgZmFsc2UgZm9yIHRoZSBib2R5
IHJlbmRlcmVyIGlmIGl0cyBiYWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCBiOTgyN2M4YTE0ZDIuLmJhNWRjZmE0MDM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAt
NDg5LDggKzQ5MCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5
UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBGbG9hdFBv
aW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0gY29udGFp
bmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAgICAgICAg
ICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3Np
bmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBp
bmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwot
ICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAg
ICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9
IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVu
Y2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBp
bmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgY29udGFpbmVy
UmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2Nh
dGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRz
LnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3Rvcik7CkBAIC01MDcsOCArNTEwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAg
ICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25S
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5n
Qm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAg
ICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0Ns
aXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdC
b3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2
ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zm
c2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Js
b2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5n
TGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IHNj
cm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
fQogICAgIH0KICAgICAvLyBGSVhNRTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5v
dCB0cmFuc2Zvcm1lZC4KICAgICBzdGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iu
c2V0TG9jYXRpb24oc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpA
QCAtNTQ3LDExICs1NTIsMTQgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25z
dHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVj
dCBjb25zdHJhaW5pbmdSZWN0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5l
clF1YWQoRmxvYXRSZWN0KGNsaXBSZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAg
ICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlRW5j
bG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQg
PSBGbG9hdFBvaW50KCkgKyBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xs
T2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAg
aWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdC
b3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAg
ICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlm
IChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94
LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSAmJiBzY3JvbGxhYmxl
RW5jbG9zaW5nQ2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IHNj
cm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwg
c2Nyb2xsT2Zmc2V0LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUyNDNlYTFjMWIwNC4u
MDU4ZmQ4OTU0YmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgog
ICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9u
cyBDb3Jwb3JhdGlvbi4KICAqCkBAIC05Nyw2ICs5OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJGaWx0ZXJzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0
aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCkBAIC0zMDQsNDAgKzMw
NiwyNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRy
dWUpCiAgICAgLCBtX2hhZE5lZ2F0aXZlWk9yZGVyTGlzdChmYWxzZSkKICAgICAsIG1faW5SZXNp
emVNb2RlKGZhbHNlKQotICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAs
IG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxm
UGFpbnRpbmdMYXllckRlc2NlbmRhbnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFy
ZW5jeShmYWxzZSkKICAgICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAg
ICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVl
ZHNOb3JtYWxSZXBhaW50KQogICAgICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUp
CiAgICAgLCBtX2hhc1Zpc2libGVDb250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2Vu
ZGFudFN0YXR1c0RpcnR5KGZhbHNlKQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxz
ZSkKLSAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0Zp
eGVkSW50ZXJzZWN0aW5nVmlld3BvcnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZh
bHNlKQogICAgICwgbV8zRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCiAg
ICAgLCBtX2hhczNEVHJhbnNmb3JtZWREZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21w
b3NpdGluZ0Rlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWlu
ZWREZXNjZW5kYW50cyhmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yKGZhbHNlKQotICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNl
KQogICAgICwgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9oYXMzRFRy
YW5zZm9ybWVkQW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3Qo
ZmFsc2UpCiAgICAgLCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9y
dENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAg
ICAsIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQot
I2VuZGlmCi0gICAgLCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNl
bmRpZgotICAgICwgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAs
IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM2MSwxNiArMzQ5
LDYgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0Rp
cnR5ID0gZmFsc2U7CiAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0
eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAv
LyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIg
c2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgotICAgICAgICBpZiAocmVuZGVyQm94KCkp
IHsKLSAgICAgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Ny
b2xsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8o
KSkKLSAgICAgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbiht
X3Njcm9sbFBvc2l0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExh
eWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKQEAgLTM3OCwyOSArMzU2LDEwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVy
TGF5ZXIoKQogICAgIGlmIChpblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7CiAKLSAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJl
bW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
Ci0gICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5k
aWYKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAg
ICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlv
bik7Ci0KLSAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRl
c3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8qIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFy
ZWEoKnRoaXMpOwotCiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVj
dGlvbigpOwogCi0gICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIoKTsK
LQorICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGNsZWFyTGF5ZXJGaWx0ZXJz
KCk7CiAKICAgICBpZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC05NDksNyAr
OTA4LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91
dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0
PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbigmZmxhZ3MpOwotICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQo
KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21l
dHJ5TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlz
LCBwYXJlbnQoKSk7CkBAIC05NTcsNyArOTE3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQK
ICAgICAvLyBDbGVhciBvdXIgY2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVh
ckNsaXBSZWN0cygpOwogCi0gICAgaWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJv
bHMoKSkgewogICAgICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAo
Z2VvbWV0cnlNYXApCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9G
bG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAt
OTY2LDcgKzkyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBh
cyBjYW5Vc2VPZmZzZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxh
eWVyLgogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9v
dCgpKTsKICAgICAgICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRl
ZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAg
ICAgfQogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDEzLDcg
Kzk3Myw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdl
b21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgbV9oYXNUcmFuc2Zvcm1lZEFu
Y2VzdG9yID0gZmxhZ3MuY29udGFpbnMoU2VlblRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1faGFz
M0RUcmFuc2Zvcm1lZEFuY2VzdG9yID0gZmxhZ3MuY29udGFpbnMoU2VlbjNEVHJhbnNmb3JtZWRM
YXllcik7CiAgICAgbV9iZWhhdmVzQXNGaXhlZCA9IGZsYWdzLmNvbnRhaW5zKFNlZW5GaXhlZExh
eWVyKTsKLSAgICBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxhZ3MuY29udGFp
bnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoZmxhZ3MuY29udGFpbnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOwog
CiAgICAgLy8gVXBkYXRlIHRoZSByZWZsZWN0aW9uJ3MgcG9zaXRpb24gYW5kIHNpemUuCiAgICAg
aWYgKG1fcmVmbGVjdGlvbikKQEAgLTEwNDMsMTMgKzEwMDQsOCBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldAogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAs
IGZsYWdzKTsKIAogICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cg
dXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewot
ICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQg
ZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFy
cXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRV
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRp
bmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsK
ICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXll
ckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg1LDYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBh
aW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJl
cigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJH
ZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVy
R2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0g
cmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBp
bmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlz
IGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIg
dG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2Vz
dG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xs
KTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9s
bChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpA
QCAtMTIwMiwxMiArMTEzNyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2Yg
YW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBw
cm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4K
IAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQ
b3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlm
IChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjI5LDEwIEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAg
aWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJl
bnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3Np
dGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFj
dCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAg
ICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkp
Ci0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50
LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJl
YSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9u
ZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93
UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVy
ZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVy
SW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3Np
dGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDks
OCArMTY0MiwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9z
aXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hT
Y3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUo
KTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAg
ICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAg
ICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9u
KCkpOworICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0g
cGFyZW50TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2lu
dCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRp
b24oKSk7CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRz
U2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRM
YXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwpAQCAtMTg0Miw5ICsxNzc3LDkgQEAgUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3Jk
ZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QK
IHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1NSwxNSArMTc5MCwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQog
ICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxh
eWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENy
b3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlm
IChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tP
cmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWlu
aW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jv
c3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxh
eWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRh
cmllcykgY29uc3QKQEAgLTE4NzcsNyArMTgxMiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYs
CiAgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYm
IGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2Fz
dDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVz
KTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigq
bmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRM
YXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVz
KTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRl
cmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7
CiAgICAgfQpAQCAtMTg4NSw1MCArMTgyMCw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRy
dWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29y
ZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRv
ciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1h
dG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsK
LSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdUcmFuc2Zvcm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3Vy
ciA9IHBhcmVudCgpOwpAQCAtMjQ1NCwxOSArMjM0NSw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5
ZXI6Om9mZnNldEZyb21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwg
Q29sCiAgICAgcmV0dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rv
ckxheWVyLCBMYXlvdXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wg
aXNWaXNpYmxlID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5
OjpWaXNpYmxlOwotICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Nj
cm9sbGluZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3Zl
cmZsb3coKSAmJiAhaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVy
biBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5
c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxz
ZTsKLSNlbmRpZgotfQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRl
ckxheWVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hF
dmVudCkKIHsKQEAgLTI0OTYsMjg5ICsyMzc0LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU9TX1RPVUNIX0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRl
ciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygp
LT5oYXNTY3JvbGxpbmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlk
IGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Ny
b2xsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVk
U2Nyb2xsaW5nRm9yTGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3Rl
ZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVu
dGlvbiBtYXRjaGVzIEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2Zp
cmVmb3gvc291cmNlL3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAg
ICBjb25zdCBpbnQgc3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9
IGJlZ2lubmluZ0RlbHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4g
MSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0
YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBl
bHNlIGlmIChhZGp1c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0
aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFk
anVzdGVkRGVsdGEpKSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRl
bHRhKQotewotICAgIHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lk
dGgoKSksIGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2lu
dCkKLXsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5m
cmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlz
IG91dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywg
dGhlIHBvc2l0aW9uIGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNN
b3VzZVBvc2l0aW9uOwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwg
bGFzdEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlv
dXNNb3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUg
ZGVsdGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAo
YWJzKGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBh
dCB0aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRh
LnNldFdpZHRoKDApOwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6
Om5vUGFuU2Nyb2xsUmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBz
Y3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8g
RklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgot
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0
YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVy
bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9
IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVk
QnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5p
c05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0
cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNl
dCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Nj
cm9sbE9mZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Ny
b2xsZWRBcmVhID0gdGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRo
ZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkK
LSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQg
LSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNa
ZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0
LCBzY3JvbGxlZEFyZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5k
ZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAot
ICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMg
YSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxl
ZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3
aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVs
ZW1lbnQ/IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFt
X3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xs
VG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVs
bG9wdDsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xs
UG9zaXRpb24ueSgpKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9Z
UG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xh
bXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBv
c2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9u
LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRl
ZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6
OlllcykKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZy
b21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0g
ICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiks
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpj
bGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgp
LCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3Jv
bGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFt
IDw8ICp0aGlzIDw8ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24p
OwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOwotI2VuZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3Vy
cmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9u
TmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlv
bnMoKTsKLQotICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcg
PT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZz
ZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMt
PnNjcm9sbE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Ny
b2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUo
c2Nyb2xsVHlwZSk7Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3Jv
bGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNs
YW1waW5nKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRT
Y3JvbGxPZmZzZXQsIGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3Jv
bGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9s
bFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJl
dmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Ny
b2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0
KG9mZnNldCkgOiBvZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygp
ID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9m
ZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsK
LQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6
OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8
PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5
cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBv
c2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8g
YmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0
IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0
aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkg
LSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZz
ZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAg
IGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAo
c2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxY
T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Ny
b2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhP
ZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZz
ZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmICht
X3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAg
ICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBh
biB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAg
ICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2Ug
dGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHND
b21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGlu
Z0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcm
IHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25z
IG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91
bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20g
dGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlv
dXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdy
ZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2Ug
bGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92
ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0
ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJz
IGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0g
ICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJl
cyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAg
ICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3
ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVu
IHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBs
b2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGlu
ZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFu
dCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1
dG8qIHBhaW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
IHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSBy
ZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVn
aW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0Rl
cGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChy
ZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVy
KCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
ID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJl
Y3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0
IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJl
bmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCku
Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBG
bG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVw
YWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRG
b3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNo
RmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
LQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRh
dGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNo
eVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRz
UmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1
bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50
KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBz
Y3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVu
ZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGlu
Z1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQot
ICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFt
ZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRC
YXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJ
ZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGlu
Zy4KQEAgLTI4MjMsNyArMjQxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zp
c2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBM
YXlvdXRSZWN0IG5ld1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZp
ZXcgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXll
ciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRh
cmllczo6Tm8pOworICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNl
QW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3Ig
YmVoYXZpb3IpCiAgICAgewpAQCAtMjgzMyw2ICsyNDI4LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6
c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wg
aW5zaWQKICAgICB9OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisK
ICAgICAgICAgLy8gRG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0
IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAg
ICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkg
dGhlIHNsaWRlciBpbiBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwpAQCAtMjg0MywyNCArMjQ0MCwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxS
ZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAog
ICAgICAgICAvLyBib3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRo
ZSBzY3JvbGxhYmxlIGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91
dFBvaW50KGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAg
aWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAg
ICBpZiAoYm94LT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsK
ICAgICAgICAgICAgIC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9u
dGFsLXRiIGJveCwgdGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2li
bGUgcmVjdAogICAgICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Ny
b2xsIGJhci4gU28gdGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRo
ZSBzYW1lIHBvc2l0aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnko
TGF5b3V0UG9pbnQoLXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAg
bG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0
IGxheWVyQm91bmRzKDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRI
ZWlnaHQoKSk7CiAgICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9J
bmNsdWRlU2Nyb2xsUGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwog
ICAgICAgICBMYXlvdXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3Vu
ZHMsIGxvY2FsRXhwb3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25z
LmFsaWduWSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBj
bGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVj
dChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9
IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Ny
b2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAg
YXV0byBhbmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBv
cHRpb25zLmJlaGF2aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAg
SW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9s
ZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkp
LCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
YXV0byByZXN1bHQgPSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlv
bnMuYmVoYXZpb3IsIHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBu
ZXdSZWN0ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsK
ICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigp
LmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2NCw3IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24g
ZmlyZXMgd2UgbmVlZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0
cm95ZWQuCiAgICAgICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJl
YWQgc2NyaXB0RGlzYWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2
aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRW
aXNpYmxlUmVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1l
Vmlldy52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50
VmlzaWJsZVJlY3QpOwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxl
bWVudC0+Y29udGVudERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94
KiByZW5kZXJlciA9IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBA
IC0yOTUxLDIzICsyNTQxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFy
ZW50TGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlv
bnMpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVy
U2Nyb2xsKCkKLXsKLSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xh
eWVycygpKSB7Ci0gICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVl
ZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAg
ICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhl
cmUuCi0gICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNr
aW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0
b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29t
cG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxh
eWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAg
ICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3Io
KS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xs
LCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQogTGF5b3V0UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGlu
c2lkZUZpeGVkLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4Nyw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5
b3V0U2l6ZSYgb2xkT2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyht
aW5pbXVtU2l6ZSk7CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExh
eW91dFNpemUob2xkT2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdP
ZmZzZXQud2lkdGgoKSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1
c3RlZE9sZE9mZnNldC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTQzLDEwNzQgKzI3MTYsMTUyIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwg
Y29uc3QgTGF5b3V0U2l6ZSYgb2xkT2ZmCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJ
bmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFy
Z2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAg
fQogICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAo
aXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFk
ZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFj
dG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgp
KSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5
b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1
dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIg
dGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9z
aXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2Rl
SURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQotICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQo
KSkgewotICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGlu
YXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdO
b2RlSUQoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCk7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdElu
Y2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJl
aGF2aW9yKSBjb25zdAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7Ci0gICAgaWYgKHNo
b3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Ny
b2xsYmFycykKLSAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsK
LSAgICAKLSAgICBhdXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKLSAgICBy
ZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRo
KCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVp
Z2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgIGlmICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQot
ICAgIEludFNpemUgc3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9m
ZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KLSAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0
aW9uKCkpOwotICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCk7Ci0gICAgaWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhl
aWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgp
IC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIGlm
IChzY3JvbGxPZmZzZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xs
T2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQotICAg
ICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53
aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBzdHJldGNoOwotI2Vsc2UK
LSAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
QWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlz
QWN0aXZlKCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBj
b25zdAotewotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7
Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0dXJuICFzY3JvbGxDb3Ju
ZXJSZWN0KCkuaXNFbXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0g
c2Nyb2xsYmFyUmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikp
OwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
UmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAot
ewotICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsK
LSAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4g
cmVjdDsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQm
IHNjcm9sbGJhclBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFy
UG9pbnQ7Ci0gICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJU
b0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAg
ICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0g
ICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBw
b2ludDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUoKSBjb25zdAotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOwotfQotCi1J
bnRTaXplIFJlbmRlckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEludFNp
emUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBpZiAoIWhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldFdp
ZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkp
KTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAgICAgICAg
Y29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZp
c2libGVTaXplKCkuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250ZW50c1NpemU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVT
aXplQ2hhbmdlUmVhc29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVhc29uID09IEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4ocmVuZGVyZXIoKSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOwotICAg
ICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW5kZXJMYXll
cjo6ZGlkU3RhcnRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRT
dGFydE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9s
bCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xs
KCk7Ci19Ci0gICAgCi12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwoKQotewotICAg
IC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMg
aG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0jZW5kaWYKLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAotewot
ICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2
ZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxl
cigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxheWVyOjpPdmVyZmxvd0Nv
bnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgcmVuZGVy
Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAgICAvLyBTY3JvbGxiYXJz
IHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9z
aXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5j
bHVkaW5nU2Nyb2xsYmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
ID0gbV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0byB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKLQotICAgIGF1dG8gaXNO
b25PdmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKLSAg
ICAgICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIo
KTsKLSAgICB9OwotCi0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIg
PSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICBib29sIGhhdmVOb25P
dmVybGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdl
dCgpKTsKLSAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAgYm9vbCBoYXZlUmVzaXpl
ciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci0gICAgYm9v
bCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xs
YmFyICYmIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAm
JiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVy
dGljYWxTY3JvbGxiYXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6ZTsKLSAgICBpZiAoc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBp
cyBwcmVzZW50LCB0aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAgY29ybmVyU2l6ZSA9IElu
dFNpemUgewotICAgICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggOiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAotICAgICAgICAgICAgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgT3ZlcmZsb3dDb250
cm9sUmVjdHMgcmVzdWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBhdXRvIGJhclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBiYXJSZWN0LnNo
aWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwot
ICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgICAgICBpZiAocGxh
Y2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgICAgICBiYXJSZWN0LnNo
aWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRo
KCksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIg
PSBiYXJSZWN0OwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgaWYgKHBsYWNl
VmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRo
KHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgp
OwotCi0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICBiYXJS
ZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHJlc3VsdC52
ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgYXV0byBjb3JuZXJSZWN0
ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0g
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAg
ICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0
Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKLSAgICB9
OwotCi0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgcmVzdWx0LnNjcm9s
bENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBpZiAoaGF2ZVJlc2l6ZXIp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIHJlc3Vs
dC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNj
cm9sbGJhclRoaWNrbmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJS
ZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
OjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3Jv
bGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9o
QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIubG9jYXRpb24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElmIHdlIGFyZSBub3QgeWV0
IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KLSAg
ICBpZiAoIWJveC0+cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJh
ci5nZXQoKSkKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgTGF5b3V0UmVjdCByZXBh
aW50UmVjdCA9IHNjcm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9k
ZShyZXBhaW50UmVjdCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRS
ZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3Ju
ZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotICAg
IGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0
KTsKLX0KLQotc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNj
cm9sbGJhcikKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5C
eVN0eWxlKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSho
b3Jpem9udGFsU2Nyb2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyKQotewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgp
KSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFp
bmluZ1NoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9
PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzaGFk
b3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gJnJlbmRlcmVyOwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxT
Y3JvbGxiYXI+IHdpZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFy
KHJlbmRlcmVyKCkpOwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5k
ZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRl
cmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwotICAgIGlm
IChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xs
YmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxS
ZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAgIGVsc2UgewotICAgICAg
ICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50
YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAgICAgICAgZGlkQWRkU2Ny
b2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAgICBpZiAocGFnZSgpLmlz
TW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwot
ICAgIH0KLSAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0
KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhv
cml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJh
cigpKQotICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50
YXRpb24pOwotCi0gICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xs
YmFyID0gbnVsbHB0cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LnNjcm9sbHNPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIg
PT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
aGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9s
bEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCku
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkg
PyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAg
ICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGlj
aXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGlu
ZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4g
IFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBp
ZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZC
YXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlm
IChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYg
cmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9u
c0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5
Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eShlbGFzdGljaXR5KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3Jv
bGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAg
ICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxF
bGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8gRGVzdHJveWluZyBvciBj
cmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFu
ZCBnby4gIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4K
LSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlm
IChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGFi
bGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewot
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIo
SW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZvciAoYXV0byogbmV4dExh
eWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3Vu
ZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKCpuZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Ci0gICAg
ICAgIGlmIChuZXh0TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQotewotICAgIC8v
IEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRzLgotICAgIGlmICghaXM8
SFRNTEVsZW1lbnQ+KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+
cmVuZGVyQm94KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCogYm94ID0gZW5j
bG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNj
cm9sbGFibGVBcmVhKCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJl
Y3QoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQot
Ym9vbCBSZW5kZXJMYXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVi
dWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6
OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4
Jywgc2l6ZSgpLmhlaWdodCgpKTsKLQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkK
LSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNC
YWNrZHJvcEZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBm
aWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBibGVuZCBtb2RlIl9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAg
aWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVp
bGRlci9UZXh0U3RyZWFtIGludGVncmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsK
LSAgICAgICAgc3RyZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChzdHJlYW0ucmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOwotfQotCi1pbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICgh
bV92QmFyCi0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAo
bV92QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNj
cm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFy
Ci0gICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFy
LT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQot
SW50U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplcjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgOiByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2Nh
bFBvaW50IC0gcmVzaXplQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Nj
cm9sbENvcm5lciB8fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25l
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3Qg
SW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxi
YXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJl
Y3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewot
ICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwot
ICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVy
LT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIp
Ci0gICAgICAgIG1fcmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1p
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
Qm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGgg
YWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwot
fQotCi1pbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVh
ZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVp
Z2h0KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QK
LXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19
Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAg
ICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dS
ZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdN
b2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRV
bml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwotICAgIEFTU0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25z
RGlydHkgPSBmYWxzZTsKLQotICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92
ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhl
aWdodChyb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAg
ICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkg
LSBib3gtPmJvcmRlckxlZnQoKSk7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJv
dW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9s
bE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BP
dmVyZmxvdykpOwotICAgIAotICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkKLXsKLSAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cg
PSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3Jv
bGxzT3ZlcmZsb3dYKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygp
ICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5
ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9J
bnQocmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVu
ZGVyQm94KCktPmNsaWVudEhlaWdodCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5
bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92
ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVk
b0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Ny
b2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBz
Y3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlm
IChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250
YWxPdmVyZmxvdygpOwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1Zl
cnRpY2FsT3ZlcmZsb3coKTsKLQotICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xs
YmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9o
QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRl
cmVyKCkuc3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVu
YWJsZWQoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0
byBiZWhhdmlvciBtYXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFk
ZGVkIG9yIHJlbW92ZWQuCi0gICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
PSBib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJX
aXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9y
aXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hv
cml6b250YWxTY3JvbGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJv
eC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgp
OwotCi0gICAgICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZs
b3c6OkF1dG8gfHwgcmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpB
dXRvKSB7Ci0gICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAg
ICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJl
bmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAg
ICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAg
ICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigp
LnBhcmVudCgpOwotICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgp
ICYmIHJlbmRlcmVyKCkuaXNCb3goKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhp
YmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgp
KTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUg
c3RlcCkuCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3Vu
ZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9s
bGJhcjo6cGFnZVN0ZXAoY2xpZW50V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9
Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0lu
dChib3gtPmNsaWVudEhlaWdodCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFy
OjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9s
bGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNl
dFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0K
LQotICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhp
cyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25z
KS4KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9s
bE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwot
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQg
b2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNo
YW5nZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTk2NAotICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5p
c0hUTUxNYXJxdWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUg
YXQgYW4gaW52YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAg
ICAgIC8vIHRvIHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVz
aCB0aGVtIHVwIHRvIHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9s
bE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNh
cmV0IGFkanVzdCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVk
IGVudHJ5IHBvaW50cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4g
aXNzdWUgd2hlcmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3
biBvbiB0aGUgcmlnaHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29u
dGVudCBvdmVyZmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+
IGZvciBtb3JlIGRldGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxP
ZmZzZXQpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oSW50UG9pbnQoc2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkg
ewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAg
c2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICAgICAgYmFzZUhl
aWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5z
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VI
ZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAg
fQogCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgc2V0TmVl
ZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlv
dXQoKTsKIAotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIC8vIEZJWE1FIChSYWRh
ciA0MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vz
c2FyeSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKK1JlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKIHsKLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKIAotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94Lgor
ICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0
KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKIAotICAgIGlm
IChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAg
IHJldHVybiB0cnVlOworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHJlbmRlckJveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Cisg
ICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7CiAKLSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVz
dWx0OworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAg
IGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21M
ZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgp
LCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJT
aXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhdmVSZXNp
emVyKSB7CisgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemVyID0g
Y29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwor
ICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAorU3RyaW5nIFJlbmRl
ckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHBy
b2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxh
eWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNh
c2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KKyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZs
b3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWlu
dE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlD
b250cm9scykKLXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJm
bG93LgotICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMg
ZmlsdGVyIl9zKTsKIAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIC8vIE92ZXJsYXkgc2Nyb2xs
YmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhh
dCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0
aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMK
LSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBs
YXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQg
dG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJh
cnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0g
ICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVl
IHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFp
bnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRv
IGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4K
LSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8
IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAg
ICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92
ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jv
b3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFpbnRpbmdS
b290KQotICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIo
KTsKKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotICAgICAgICBwYWludGluZ1Jvb3QtPnNldENvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChpc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxk
ZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Cisg
ICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoc3RyZWFtLnJlbGVhc2UoKSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1
aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAg
aWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFp
bnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1
c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAg
Ly8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkg
bW92ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAg
IC8vIHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFi
bHkgd2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVk
IHBvc2l0aW9uZWQgZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0lu
dFNpemUoYWRqdXN0ZWRQYWludE9mZnNldCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3Vy
ZSB0aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAg
IGlmIChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBt
X2hCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0
LCBkYW1hZ2VSZWN0KTsKLQotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUg
aWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRv
IHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWlu
dCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNv
cm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFt
YWdlUmVjdCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitJbnRT
aXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KSBjb25zdAogewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJl
Y3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250
ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxD
b3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwg
cGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xs
YmFycywgc2luY2Ugd2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KLSAg
ICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworICAgIGF1dG8gcmVz
aXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVz
aXplQ29ybmVyID0gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4
WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCitpbnQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IHJl
c2l6ZUNvcm5lckltYWdlOwotICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKLSAgICBp
ZiAocmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgewotICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4Iiku
bGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFn
ZUhpUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5z
aXplKCk7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lcklt
YWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3Ju
ZXIiKS5sZWFrUmVmKCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5l
ckltYWdlTG9SZXM7Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1h
Z2UtPnNpemUoKTsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxXaWR0aCgpOwogCi0gICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNh
dmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsg
Y29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXpl
ckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVz
aXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29y
bmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0g
ICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJD
b3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVz
aXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0g
ICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0
dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRh
bWFnZVJlY3QpCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQot
ICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6
ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5p
bnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4
dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7
Ci0gICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwg
cmVzaXplckFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRm
b3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEhlaWdo
dCgpOwogCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkg
bGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCi0gICAgLy8gQ2xpcHBp
bmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUu
Ci0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIExheW91dFJl
Y3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5z
ZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3Ju
ZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JH
QkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAgICBjb250ZXh0LnNldFN0cm9r
ZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0
KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5t
YXhZKCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNQb2lu
dEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAordm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKIHsKLSAgICBpZiAoIWNhblJlc2l6
ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICB1cGRhdGVMYXllclNj
cm9sbGFibGVBcmVhKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCi1ib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQorYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAm
JiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0
OwotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7
Ci0gICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdo
IHRoZSByZXN1bHQuCi0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNv
bnRhaW5zKGxvY2FsUG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1f
dkJhci5nZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0K
K2Jvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhh
c092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG1f
aEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAg
ICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6dXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6
OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsK
KyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9m
ZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVj
dCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdz
LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRl
eHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQyMjgsMTcgKzI4NzksNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3Qm
IGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2Up
OwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0
PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50
Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywg
ZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgp
LCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJM
YXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJl
aGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVs
ZSBydWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjYxLDcgKzI5MDEsOCBAQCB2b2lkIFJl
bmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhl
IGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRo
ZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sg
Y2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBs
YXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50
KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Ny
b2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAg
ICAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbGF5ZXItPnVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWlu
dEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJl
bmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNv
bnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ3NjYsOCArMzQwNywxMCBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVy
TGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZs
YWdzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJh
cnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xz
Rm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8pOworICAgICAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgaWYg
KGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3Jv
bGxiYXJzKCkpCisgICAgICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21l
bnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOwor
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8v
IFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlS
ZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MjM3LDEx
ICszODgwLDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JG
cmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAKIHZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYg
bGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWlu
dGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQogeworICAgIEFTU0VSVChtX3Njcm9sbGFibGVB
cmVhKTsKKwogICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykg
ewogICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGlu
Z0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJm
bG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21l
bnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBh
aW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5w
YWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9p
bnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkg
KyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAogICAgICAgICAgICAgc25hcHBl
ZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAgICAgICAg
IHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3Jv
dW5kUmVjdCk7CiAgICAgfQpAQCAtNTI4MCw3ICszOTI1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6
aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNj
YWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxh
eW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFy
ZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0
QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRl
bnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAg
ICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMs
IG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwg
ZmFsc2UpOwpAQCAtNTUxMSw3ICs0MTU2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAg
ICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQg
bG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAg
IGlmIChjYW5SZXNpemUoKSAmJiBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEt
PmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlv
biwgbG9jYWxQb2ludCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgbG9jYWxQb2ludCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTU1
ODYsMzUgKzQyMzEsNiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewot
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0g
WyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVy
UmVjdCkgewotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpKSB7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9y
ZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIo
KTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0
LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIElu
dFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9Owot
Ci0gICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7Ci0gICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVu
dHMuYXQoaSk7Ci0gICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVj
dEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5y
ZXNpemVyKTsKLSAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMo
aGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVz
dExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50
ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExh
eWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiBy
ZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0
VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBI
aXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQp
CiB7CkBAIC02MDc2LDcgKzQ2OTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCByZWN0ID0g
bV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0
aW9uKCkpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZWN0Lm1vdmVCeSgt
bV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaWYgKHJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAg
IHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dD
bGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBh
Y2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYzNzQsMjEg
KzQ5OTEsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1H
cmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxh
eWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9i
YWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRy
OwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIo
KSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRo
VHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAog
ewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygp
LT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02NDE5LDExICs1MDIxLDYgQEAgYm9vbCBSZW5kZXJM
YXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRC
ZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxh
Zzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxh
eWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9v
bCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExh
eW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5
ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NjY0LDcgKzUy
NjEsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25z
dAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhh
c092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25z
T3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+
aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxs
eU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzQs
NyArNTI3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVk
Q29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVu
dCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZs
b3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8
IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJv
bHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAKQEAgLTY2OTksMzggKzUyOTYsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9u
RW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBo
YXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2Vs
dmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cg
b3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJm
bG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5n
IGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2Vl
cCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAg
Ym9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYm
ICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9s
bGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wg
bmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNW
ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gt
PnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihi
b3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3Zlcmxh
eSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkg
YmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2Ug
bmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAm
JiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJm
bG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3Jv
bGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIg
JiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9s
bCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1h
bEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzUxLDYgKzUzMTYsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkg
aGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBi
aXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRo
IHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCArNTMyOSwxNCBAQCB2
b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0
eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2
aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5p
c0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9
IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAg
aWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRl
ck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgp
OwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRy
OwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0
ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5
IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQK
ICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVw
ZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzNTEs
OCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTog
TmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChh
bmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXpl
clN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVz
Y2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1
LDk4ICs1MzczLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQot
ewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRv
SGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJh
bWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVz
dCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0
VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zp
c2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAot
ICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFp
bnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewot
ICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBh
ZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRP
clJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAg
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlm
IChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZv
ciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAg
ICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50
IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJM
RShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVy
ID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSBy
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVk
UHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJl
ci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9z
Y3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxz
ZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19
Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1f
c2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBh
cmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCog
YWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBh
dXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVy
ZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAg
ICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
bV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNj
cm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwot
ICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFy
ZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAg
IG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVz
aXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVy
OjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVs
bHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkg
OiBudWxscHRyOwpAQCAtNjk4OCw2ICs1NDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
TGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVu
aXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNj
cm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0
aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIo
KTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkp
IHsKQEAgLTcwMDQsNiArNTQ5MCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJz
QWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmls
dGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclNjcm9sbGFi
bGVBcmVhKCkKK3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKKyAgICAg
ICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIGlm
ICghYm94LnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBjbGVh
ckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1
dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgbV9zY3JvbGxhYmxlQXJl
YS0+Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG51bGxwdHIpOworICAgIHVwZGF0ZVNlbGZQYWlu
dGluZ0xheWVyKCk7CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVBbGxTY3JvbGxiYXJS
ZWxhdGVkU3R5bGUoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRp
bmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0
byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUgbW9kZSwKQEAgLTcwMzgsNyArNTU0Nyw3
IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkpCiAg
ICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJM
YXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
KTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRG
cmFtZXMoKSBjb25zdApAQCAtNzA2MCw2ICs1NTY5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNp
bXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xlUGFpbnRGcmVxdWVuY3lUcmFja2luZyB7
IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCkubGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVz
dGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjpz
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0
KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVh
c29uIHJlYXNvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
YTE1ZDUxYmZmZjVjLi44OTlhYWU2MzQ1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChD
KSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTUxLDcg
KzUyLDYgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIK
ICNpbmNsdWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgi
CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFw
OwogY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OwogY2xhc3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTsKIGNsYXNzIFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwogY2xhc3Mg
UmVuZGVyU2Nyb2xsYmFyUGFydDsKQEAgLTE0MywxNyArMTQ0LDIxIEBAIHN0cnVjdCBTY3JvbGxS
ZWN0VG9WaXNpYmxlT3B0aW9ucyB7CiB1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90Owog
CiBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7Ci1j
bGFzcyBSZW5kZXJMYXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBS
ZW5kZXJMYXllciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsK
IHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQgY2xh
c3MgUmVuZGVyTGF5ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tp
bmc7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIAogICAgIGV4cGxpY2l0IFJlbmRlckxh
eWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigp
OwogCisgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhKiBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIC8vIENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBh
bnkpIGhhcyBiZWVuIG51bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAg
LTIyMyw2ICsyMjgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFs
bG93ZWQoYm9vbCBmbGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQog
I2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRlc3Ryb3koKTsKKwogcHJpdmF0ZToKICAg
ICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSku
CiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEsOCArNDE5LDYgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVy
KCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNh
bm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEwNyArNDM5LDI4IEBAIHB1YmxpYzoK
IAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRp
b24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFs
OwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBy
ZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNjcm9s
bFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGlu
ZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAg
IHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJs
ZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9s
bFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9s
bFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZp
bmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3Jv
bGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgs
IFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFu
aW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBv
c2l0aW9uKGludCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9p
ZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFy
cXVlZS4KLSAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChT
Y3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1h
dGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zm
c2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54
KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1w
ZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCgpOwotCiAgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIg
dGhhdCBpcyBzY3JvbGxhYmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJl
bmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3
IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAK
LSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdl
UmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1
bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0
VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBi
b29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNT
Y3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJv
b2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAg
Ly8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hC
YXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Ci0gICAgYm9v
bCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7Ci0gICAgYm9vbCBoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7Ci0gICAgYm9vbCB1c2VEYXJr
QXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBib29sIHJl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9u
ID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVp
cmVzUmVjb25jaWxpYXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkaWRTdGFy
dFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9p
ZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCiAgICAgLy8gUmV0dXJucyB0cnVl
IHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9v
ayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCiAgICAg
Ym9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0
cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMg
bGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdzsgfQorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0
OwogCi0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7
CiAgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNv
bnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVD
b3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwogCi0gICAgdm9pZCBwYWlu
dE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFs
c2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVz
aXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQo
KTsKIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CkBAIC01NTYsOSArNDgzLDYgQEAg
cHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7
CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91
dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5
ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlv
bkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVk
ZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
UGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC02
MzgsNiArNTYyLDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3Rv
ckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmll
cykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBj
b25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0
cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5n
Um9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTksNyArNjI1LDYgQEAgcHVibGljOgogICAg
ICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8
UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJp
dHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVs
bHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xp
cFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5
cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNo
b3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92
ZXJmbG93Q2xpcCkKQEAgLTc4NSwxMSArNzEwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3Rh
dGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBv
c2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5
b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAg
ICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5z
Zm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNm
b3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OSwxNSArNzc5LDgg
QEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAg
IHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZp
bmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25z
dCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29s
IGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9Ci0gICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3I7IH0KKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdDsKIAogICAgIC8vIExh
eWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNv
bW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9w
dGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgogICAg
IC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJv
b2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBj
b25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Owot
Ci0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29s
IHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllcklt
YWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgogCiAg
ICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsK
IAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJl
cXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1
cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAt
OTMxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxp
ZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3Np
dGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbklu
dmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0
IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6
CiAKQEAgLTEwMTEsOSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBh
aW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewog
ICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAg
ICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0x
MDM5LDggKzk0Miw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBj
bGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5
ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5
b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigp
IDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOSBAQCBwcml2YXRlOgogICAgIHZv
aWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwog
CisgICAgdm9pZCB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgdm9pZCBjbGVhckxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0Zv
clBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNv
bnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExh
eWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlv
dXRSZWN0PiYgcm9vdFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFw
aGljc0NvbnRleHQmIG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMTAw
LDY0ICsxMDA0LDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYg
bGF5ZXJCb3VuZHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0
OwogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21l
bnRzJiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiwgSGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0Owot
ICAgIGJvb2wgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNv
bnN0OwogICAgIFJlbmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRz
KFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0
UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsK
IAogICAgIGJvb2wgbGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBM
YXllckxpc3QmLCBjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVT
Y3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJv
b2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5h
bDsKLSAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBm
aW5hbDsKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9s
bENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250
YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3Qg
U2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYp
IGZpbmFsOwotICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5h
bDsKLQotICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29u
c3QgZmluYWw7Ci0gICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAg
IEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91
bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Ny
b2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29u
c3QgZmluYWw7Ci0gICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7
Ci0gICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rpbmco
KSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xs
QW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxF
KElPU19UT1VDSF9FVkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJs
ZUFyZWEuCi0gICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBz
Y3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1
cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29s
IGFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNo
YWluVmlzaWJsZURlc2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNTAsNiBAQCBwcml2
YXRlOgogICAgIC8vIENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXll
ciBjb29yZHMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50
IGFic29sdXRlVG9Db250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9p
ZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0g
ICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwot
Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdp
bmF0aW9uKCk7CiAKICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIp
ICB7IG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1OCw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
biA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9z
aXRlRm9ySW5kaXJlY3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0
aW5nUmVhc29uOyB9CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAg
TGF5b3V0VW5pdCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZs
b3dMZWZ0KCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0K
ICAgICBzdHJ1Y3QgT3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6
b250YWxTY3JvbGxiYXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0x
MjMwLDggKzEwNzAsNiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVj
dHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29u
dHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAg
ICBPcHRpb25TZXQ8Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBj
b25zdCBib29sIG1faXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg2LDYgQEAg
cHJpdmF0ZToKICAgICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJy
ZW50bHkgcmVzaXppbmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5k
IHN0b3AuCiAgICAgYm9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7
CiAKICAgICAvLyBJZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0
IGhhdmUgdG8gd2FsayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFk
IHRvCkBAIC0xMjYwLDE0ICsxMDk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBk
ZXNjZW5kYW50cyAoYW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlv
biA6IDE7ICAvLyBBIHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRl
IGEgcmVwbGljYS4KLSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNp
Z25lZCBtX3JlcGFpbnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1f
dmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250
ZW50IDogMTsKICAgICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAg
ICAgYm9vbCBtX2hhc1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdw
b3J0IDogMTsKICAgICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDggKzEx
MTIsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAx
OyAvLyBJbiB0aGUgei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25D
b250YWluZWREZXNjZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFu
c2Zvcm1lZEFuY2VzdG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9y
IDogMTsKQEAgLTEyODgsMTcgKzExMjEsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24K
ICAgICB1bnNpZ25lZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDog
MjsgLy8gVmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYK
LSAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgot
Ci0gICAgYm9vbCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0g
ICAgYm9vbCBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAg
Ym9vbCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzksMjUg
KzExNjEsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAg
ICBJbnRTaXplIG1fbGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3Np
dGlvbjsKLSAgICBPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb247Ci0KLSAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgot
ICAgIEludFNpemUgbV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJm
bG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+
IG1faEJhcjsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9p
bnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xs
aW5nU2NvcGUsIEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2Jv
eFNjcm9sbGluZ1Njb3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1h
cmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3Bl
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNl
ZCBmb3IgPG1hcnF1ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMg
Zm9yIGFic29sdXRlIHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFs
dWVzLgogICAgIExheW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRV
bml0IG1fc3RhdGljQmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcsMTAgKzExNzUsNiBAQCBwcml2YXRl
OgogICAgIC8vIE1heSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdp
dGggdGhlaXIgb3duIHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4g
bV9yZWZsZWN0aW9uOwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3Jv
bGwgY29ybmVyIGFuZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0
PiBtX3Njcm9sbENvcm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9y
ZXNpemVyOwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRo
YXQgY2F1c2VkIHVzIHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2lu
YXRlZC4KICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXll
cjsKIApAQCAtMTM3OCw2ICsxMTgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJMYXllckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyTGF5ZXJCYWNraW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVx
dWVuY3lUcmFja2VyIG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiArMTI1
NSwzIEBAIHZvaWQgc2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVy
Kik7CiB2b2lkIHNob3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAj
ZW5kaWYKIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXll
cikKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEm
IGFyZWEpIHsgcmV0dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCmluZGV4IDE2Y2FkZTgwNWFhOS4uMDU5N2JlYmI4YzRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgs
OSBAQAogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJh
bWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29t
cG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8u
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMg
VGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292
ZXJhZ2UoY29uc3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3Zl
cmFnZSA9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVz
ZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7
CiAgICAgaWYgKCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0
aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxp
bmc7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxl
QXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRp
bGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlm
IChsYXllci5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGls
ZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gdGlsZUNvdmVyYWdlOwogfQpAQCAtMTIyOCw5ICsxMjMxLDEyIEBAIExheW91dFJlY3QgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVu
ZGVyTGF5ZXIqCiAgICAgfQogCiAgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVDb21w
b3NpdGVkQW5jZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIEFTU0VSVChzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yKTsKKwogICAgICAgICBM
YXlvdXRSZWN0IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29t
cG9zaXRlZEJvdW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9
IHNjcm9sbENvbnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0
KCk7CisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9z
aXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXll
clJlY3QgPSBMYXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5
b3V0U2l6ZShhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNp
emUoc2Nyb2xsT2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApA
QCAtMTM2Nyw3ICsxMzczLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5l
ckJveC5sb2NhdGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAg
ICBtX3Njcm9sbENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNp
emUoc2Nyb2xsQ29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQo
KSkpKTsKIAotICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXll
ci5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25p
bmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVy
KTsKKworICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCk7CiAKICAgICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3Jv
bGxDb250YWluZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC0xMzgxLDcgKzEzOTAs
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVy
TGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZz
ZXRDaGFuZ2VkID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXpl
KG1fb3duaW5nTGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQo
KSk7CisgICAgICAgIEludFNpemUgc2Nyb2xsU2l6ZTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVM
YXllcikKKyAgICAgICAgICAgIHNjcm9sbFNpemUgPSBJbnRTaXplKHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAg
IGlmIChzY3JvbGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFk
ZGluZ0JveE9mZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKQEAgLTE0OTAsMTQgKzE1MDEsMTcgQEAgdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9m
ZnNldChTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVy
LmN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NF
UlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRT
Y3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxp
bmcgaXMgaGFwcGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxh
eWVyIGJvdW5kcyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAg
ICAgICAgIHNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xs
aW5nTGF5ZXJQb3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVl
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBj
b250ZW50cyBvZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhl
ciB0aGFuIGEgcG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9m
U2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rp
b246OlNldCk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlv
blJlY29uY2lsaWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1
aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFT
U0VSVChtX3Njcm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0x
OTA5LDcgKzE5MjMsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdT
dGFja0xheWVyR2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5j
bGlwcGluZ0xheWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwog
CiAgICAgICAgIGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdM
YXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAg
ICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBw
aW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5z
ZXRCb3VuZHNPcmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJS
ZWN0Lm1vdmVCeSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjcsMTYgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6
b250YWxTY3JvbGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJG
b3JTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlm
IChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXll
ci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25z
dAogewotICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIu
dmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5
ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Nj
cm9sbENvcm5lckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDQsMTYgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlm
ICghaXM8UmVuZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29y
bmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xs
Q29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3du
aW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRp
Y2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxT
Y3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9s
bGJhcik7CiB9CiAKQEAgLTIwNjUsMTAgKzIwODksMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnVwZGF0ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3Jv
bGwKICAgICBsYXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JT
Y3JvbGxDb3JuZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVy
Iik7CiAKICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVy
LnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFs
U2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hh
bmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNj
cm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNo
YW5nZWQpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgSG9yaXpvbnRhbFNj
cm9sbGJhcik7CisgICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgVmVydGljYWxTY3JvbGxiYXIp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2
LDcgKzIxMDIsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1f
b3duaW5nTGF5ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXll
ciB8fCAhc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5
OCwxNiArMjEyNSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0
aXZlIHRvIHRoZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVy
Lm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVM
YXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJM
YXllcigqbGF5ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7
Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5
ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIo
KSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRv
KiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlv
blNjcm9sbGJhckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdC
b3hJbnNldCk7Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52
ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAg
ICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTEy
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5S
ZWN0KGNvbnN0IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRl
bnRzTGF5ZXIgJiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAg
ICAgICAgIEZsb2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWlu
dGluZzsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5
ZXItPm9mZnNldEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Ny
b2xsT2Zmc2V0KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxP
ZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRp
cnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVy
KCkgKyB0b0xheW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVu
ZGVyZXIpOwogICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGxheWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcg
KzMxNjEsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3Qg
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09
ICZtX293bmluZ0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMo
Y29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxh
eWVyLmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRl
eHQpCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxl
QXJlYSgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5
ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRl
eHQpCiAgICAgICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBh
aW50aW5nSW5mbywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFp
bnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5
ZXIucGFpbnRMYXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CkBAIC0zNDIwLDE3ICszNDUwLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAg
ICAgICAgICBwYWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAg
ICB9IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Ny
b2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVy
LT5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNl
IGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAg
ICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NM
YXllciA9PSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVj
dCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JS
ZXNpemVyUmVjdCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOwor
CisgICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQu
dHJhbnNsYXRlKC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRy
YW5zZm9ybWVkQ2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xp
cC5tb3ZlQnkoY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5w
YWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFu
c2Zvcm1lZENsaXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4
dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0
cmFuc2Zvcm1lZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIo
Y29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5E
RUJVRwogICAgIHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRl
eCBjZmM0YWIxNTI4ODYuLmE0MmE5NjE0NmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNp
bmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlk
ZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00NjU3LDggKzQ2NTgsMTEgQEAgU2Ny
b2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZv
clZpZXdwb3J0Q29uc3RyYWluZWQKIExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpw
YXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29u
c3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFu
Y2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21l
IGEgcmVmZXJlbmNlLgotICAgIGlmICghYW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExh
eW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAo
IWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnNjcm9sbGFibGVBcmVhKCktPnZpc2libGVTaXplKCkp
KTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0OwogICAgIGlmIChpczxS
ZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDY3OCwxMSArNDY4MiwxNCBAQCB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhTY3JvbGxp
bmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290QmFja2dyb3VuZExheWVy
KCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigpLAogICAgICAgICAgICAgZnJhbWVW
aWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxh
YmxlTGF5ZXIpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwog
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNr
aW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVy
TGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwor
ICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSwgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAg
fQogfQogCkBAIC00NzIwLDggKzQ3MjcsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAg
ICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAg
ICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Ny
b2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9k
ZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0g
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFi
bGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJl
bnROb2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpzY3Jv
bGxhYmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsK
QEAgLTQ4OTYsNyArNDkwNSw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAgICAgaWYgKG5v
ZGVJRCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlEKCkpCiAgICAg
ICAgIHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0dXJuIG1fc2Ny
b2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0dXJuIG1fc2Ny
b2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAK
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRo
QmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykK
QEAgLTUwMzUsMTEgKzUwNDQsMTQgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNv
b3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGEKICAgICBhdXRv
KiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKIAotICAg
IGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIWxheWVyLmhvcml6b250YWxTY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKCk7Ci0gICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyID0gIWxh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVM
YXllcik7CisKKyAgICBib29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFzY3JvbGxhYmxl
TGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYm9vbCBhbGxv
d1ZlcnRpY2FsU2Nyb2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCk7CiAKICAgICBtX2Nocm9tZUNsaWVudC5hZGRPclVwZGF0ZVNjcm9sbGlu
Z0xheWVyKGxheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpLCBiYWNraW5nLT5zY3JvbGxDb250YWlu
ZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGVkQ29udGVudHNMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCksCi0gICAgICAgIGxheWVyLnJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKIH0K
IAogdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZWdpc3RlckFs
bFNjcm9sbGluZ0xheWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggMDUyYTljNzVlNjM1Li5jN2ZjNjZjNzAxM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5jcHAKQEAgLTE3Niw4ICsxNzYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9sZFN0eWxl
ICYmIHNjcm9sbFNuYXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRlKCpvbGRT
dHlsZSwgbmV3U3R5bGUpKSB7CiAgICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIg
PSBsYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9mZnNldHMo
KTsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAg
ICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlckxheWVyLT5lbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNu
YXBPZmZzZXRzKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFNu
YXBTdGF0ZSgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9keSgpIHx8IGlzRG9jdW1lbnRFbGVt
ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSB2aWV3
KCkuZnJhbWVWaWV3KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXcudXBkYXRlU25hcE9mZnNldHMo
KTsKQEAgLTE5NSw4ICsxOTYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICBp
ZiAoc2Nyb2xsU25hcEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7CiAgICAgICAgICAg
ICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5zdHlsZSgpOwogICAg
ICAgICAgICAgaWYgKHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxT
bmFwU3RyaWN0bmVzczo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxh
eWVyKCktPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJv
eC0+bGF5ZXIoKS0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNj
cm9sbFNuYXBTdGF0ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0Jv
ZHkoKSB8fCBzY3JvbGxTbmFwQm94LT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVT
Y3JvbGxpbmdDb29yZGluYXRvclNjcm9sbFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NWYz
ZWFhMGNjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTAsMCArMSwxODQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRl
cm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRo
ZSB0ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24g
MS4xLCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIp
IG9yIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5k
IGF0IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiks
IGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQor
ICogYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxs
b3cgdXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRl
cm1zIG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwp
IGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRp
bmd0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBh
bmQKKyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBh
cyB0aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9u
cyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVyKQorICAgIDogbV9zY3JvbGxE
aW1lbnNpb25zRGlydHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQor
ICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAg
ICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAgICwgbV9sYXllcihs
YXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50
KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9s
bFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpZiAoYXV0
byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xs
YWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJl
c2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9s
bFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5yZW5kZXJlcigpLmVs
ZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICht
X2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Ny
b2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQor
ICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQ
b3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0
aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Ny
b2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0Lgor
ICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0
b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1l
bnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVu
dEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9T
X1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VU
cmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlm
ICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChh
dXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9s
bEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5
ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFu
aW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRl
U2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xs
YmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisvLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVy
KG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7
CisgICAgaWYgKCFwb3NpdGlvbikgeworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
biA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
U2V0ID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBw
b3NpdGlvbi52YWx1ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gdHJ1
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pKTsKKyAgICBtX3Bv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7Cisg
ICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAg
IHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0
ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0
aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlv
bihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRp
b24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
LCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0
ZWRTY3JvbGw6OlllcykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAg
ICBlbHNlCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihw
b3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3Ry
YWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQor
ICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCBtX2xheWVyIDw8ICIgcmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOworCisgICAgaWYgKGF1dG8q
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xs
UG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cisj
ZW5kaWYKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNj
cm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAgaWYg
KGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJ
bk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmlt
YXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1w
aW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0
aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2aW91
c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxU
eXBlKHNjcm9sbFR5cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUo
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBl
LCBjbGFtcGluZykpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFt
cGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMo
U2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1cnJlbnRT
Y3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNl
dCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5n
KQoreworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsK
KyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNl
dCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/
IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFu
aW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Cisg
ICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAg
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZz
ZXQpOworCisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQ
b3NpdGlvbiYgcG9zaXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRl
ckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAi
IChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6
OlVzZXIpIDw8ICIpIik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0
aW9uOworICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUg
KGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KQorICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRo
aXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBp
dCByZW1vdmVkLgorICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSBy
b3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQg
bmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAg
ICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlm
IChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAg
ICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xs
UG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0
IC09IGNhcmV0V2lkdGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZz
ZXQpOworICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
bmV3T2Zmc2V0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xs
UG9zaXRpb24gPT0gbmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkg
PT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJ
WE1FOiBOb3RoaW5nIGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hh
bmdlZCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBU
aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFp
biB0aHJlYWQgd2hlbiBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xs
UG9zaXRpb25SZWNvbmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRz
Q29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVy
ZXIudmlldygpOworCisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxh
eWVycyAoaWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBi
eSBhIHNjcm9sbCkuCisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywg
YmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcg
YW5jZXN0b3IuCisgICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0lu
UmVuZGVyVHJlZUxheW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUg
b2YgbGF5b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlz
aGVkLgorICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsK
KworICAgICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25z
KCk7CisKKyAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAg
ICAgICAvLyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0
aGUgc3RhY2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBv
c2l0aW9ucy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9m
IHVwLXRvLWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2Fz
ZSB3ZSdyZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21w
b3NpdGluZyBsYXllcnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMu
CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAg
ICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24g
b2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1v
cmRlciksCisgICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBm
cm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWlu
dFBhcmVudCA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAgICAg
IHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5
VHJhdmVyc2FsKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0
aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSBy
ZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVn
aW9uLgorICAgICAgICByZW5kZXJlci5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBl
bmRlbnRSZWdpb25zKCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVu
ZGVyZXIuZnJhbWUoKSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIuZnJh
bWUoKTsKKyAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVu
ZGVyZXIuY29udGFpbmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRz
IHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigp
LnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBh
aW50ID0gcmVuZGVyZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlci5yZXBhaW50
TGF5b3V0UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIuY2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZh
a2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJl
cGFpbnRDb250YWluZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBh
aW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZl
bnQpOworICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50
U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWly
ZXNSZXBhaW50ID0gdHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewor
ICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAg
ICAgICBtX2xheWVyLnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlU
cmF2ZXJzYWwoKTsKKyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gbV9sYXllci5iYWNraW5nKCkt
Pm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1c3Qg
c2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWlyZXNS
ZXBhaW50KQorICAgICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBh
bmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9
IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5k
aW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxv
dygpKQorICAgICAgICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwor
CisgICAgdmlldy5mcmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZy
YW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5ZXIpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3Jv
bGwoKQoreworICAgIGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRp
bmdMYXllcnMoKSkgeworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJh
bnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAg
ICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9t
IHRoZXJlLgorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBt
X2xheWVyLnN0YWNraW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsK
KyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAg
ICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBu
aWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5
IHNjcm9sbGluZy4KKyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAg
ICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29t
cG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVy
Qm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgp
IGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxX
aWR0aDsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0
ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWlnaHQ7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKCkKK3sKKyAgICBp
ZiAoIW1fbWFycXVlZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHdvdWxkIGxp
a2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxk
cy4KKyAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICBt
X21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIG1fdXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNIVE1M
TWFycXVlZSgpICYmIHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVl
ZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21h
cnF1ZWUpCisgICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+
KCZtX2xheWVyKTsKKyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAg
ICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICgh
aXM8UmVuZGVyQm94PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3JvbGxzT3ZlcmZsb3coKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZp
c2liaWxpdHk6OlZpc2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNldHRpbmdzKCkuYXN5bmNPdmVy
Zmxvd1Njcm9sbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9V
Q0gpCisgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVy
ZXIuc3R5bGUoKS51c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIuc2V0dGlu
Z3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAgc2Ny
b2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxpbmdO
b2RlSUQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNj
cm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCisgICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJ
RCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIu
cGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwg
c2Nyb2xsaW5nTm9kZUlEKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQpOworfQorCitJ
bnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVy
bmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNp
b24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Ny
b2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJh
ckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2Ug
PSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52
aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgo
MCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1h
eCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQo
KSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLnNldHRpbmdzKCkucnVi
YmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVz
ZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVB
cmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hh
YmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisg
ICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYg
KHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNp
emUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0
KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWln
aHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNo
LnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUu
d2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAt
IChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJu
IHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICBy
ZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3
KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0
KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
LmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcmVjdCk7Cit9
CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWlu
aW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRS
ZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFJl
Y3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJl
dHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9s
bGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwor
ICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJl
clRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50
KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgIHBv
aW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUoKSBj
b25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBp
ZiAoIWJveCkKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXpl
KHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhl
aWdodCgpKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVu
dHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3Jv
bGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNpemUgY29udGVudHNT
aXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWlu
KGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKworICAgIGlm
ICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXpl
LnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCku
aGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJs
ZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJl
YXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihy
ZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLnNl
dFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAgcmVuZGVyZXIuc2V0
TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCku
ZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0
YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRT
dGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQo
KS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlv
biB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBk
YXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hy
b21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVyOjpPdmVyZmxvd0Nv
bnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0byYgcmVuZGVyQm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQg
aW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9u
aW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGlu
Z1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1f
aEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3Zl
cmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAg
IHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Cisg
ICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNO
b25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7
CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSBy
ZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9s
bGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZl
Tm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNl
bnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7
CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJMYXllcjo6T3ZlcmZs
b3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRv
IGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJS
ZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJS
ZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXpl
LndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3Jv
bGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0
byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYg
KHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNl
dFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAg
ICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJl
c3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3Ju
ZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29y
bmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwor
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0
b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsK
KyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0
LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJl
c2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBj
b3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRTaXplIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7
CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
KSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxSZWN0
ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
QVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUg
dHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICghYm94LT5wYXJlbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICBz
Y3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAg
ICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxi
YXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVj
dDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgYm94LT5y
ZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkp
IHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAg
ICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitzdGF0aWMgYm9v
bCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJl
dHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2
ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxP
YmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIu
ZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVu
dC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3Qt
Pm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJl
dHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Ny
b2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxS
ZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAg
ICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFk
ZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbGF5
ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAgICAgICBzY3JvbGxB
bmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBhZ2UoKS53aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcihT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFy
PiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJh
ciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVT
Y3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXIt
PnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
KyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNj
cm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1
YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6
IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2Ugewor
ICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9s
bGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0
ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0
eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9
PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFz
U2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFz
dGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJC
YW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5
QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVh
OjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9
IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0
aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAg
fQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIg
c2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9w
cG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJh
ci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHls
ZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAg
IHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4
dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Cisg
ICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygp
CisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kg
PT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZC
YXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5j
eSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJl
bGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQ
YXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBt
X3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigpLnN0eWxlKCkucmVz
aXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9v
dCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJlc2l6ZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVyQm94KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92
ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1f
aEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKwor
ICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1l
UmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAg
bV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25zdAoreworICAgIFJl
bmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJm
bG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOworfQor
CitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tKCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5y
ZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwor
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAgIFJlbmRlckJveCog
Ym94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChi
b3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShv
dmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sK
KyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJv
eCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3Jv
bGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpOwor
ICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZs
b3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQo
b3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRP
dmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVU
b3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkp
OworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywg
LXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hv
cml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxv
d1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVy
biBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGllbnRX
aWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
YXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50
YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92
ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxv
dyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6
U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9t
YXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0
aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9y
aWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHls
ZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3Zl
cmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRv
SWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJm
bG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlzdCBi
b3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBu
b3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Ri
b3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxv
dyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGljYWxP
dmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92ZXJm
bG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3Ig
ZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBp
ZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgSG9y
aXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9u
dGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihy
ZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0
RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBh
dXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3Qg
YWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdl
ZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9v
bCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJh
cldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0
aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQg
fHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNI
b3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAo
Ym94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAg
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAg
IG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlci5y
ZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0g
T3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxv
dzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAg
ICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAg
IGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAgICAgICAgICAgICAg
ICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsKKyAg
ICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlci5p
c0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCkt
PmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJCb3goKSk7CisgICAg
fQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgor
ICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChi
b3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBh
Z2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9CisgICAgaWYgKG1fdkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhl
aWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGll
bnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xp
ZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYWJs
ZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91
dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9s
bE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1
cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMg
c3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRpZgorCisgICAgaWYg
KCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1
cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5l
ZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4
IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25n
LiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5n
IHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRv
IGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlz
IGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3
aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8x
NTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBl
ZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQorCisg
ICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKG1fbGF5ZXIu
aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2Vv
bWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmln
dXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRh
dGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IElu
dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9s
cygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRo
ZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7
CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmhh
c092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZs
b3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJh
cnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQg
dGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhp
cyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisg
ICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5
ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRv
IGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUg
bGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJz
IHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlCisgICAg
Ly8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRv
IGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRp
bmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRv
IHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KKyAg
ICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8ICht
X3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgICAg
IGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJm
bG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gbV9sYXllci5lbmNs
b3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAg
ICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVyKCk7CisKKyAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhp
cyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJh
cnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5
U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBh
aW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5
LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQg
c29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJp
bmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8g
Y29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cg
dGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBh
aW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYg
KG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZCYXIt
PnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3Ju
ZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxs
IHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Ny
b2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworCisg
ICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhl
IHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRP
ZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJl
Y3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygp
KSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5l
ciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRv
IHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkp
CisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRl
eHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQ
bGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAg
RmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKKyAgICAgICAgcmVz
aXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAgICAgICBjb3JuZXJS
ZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJl
c2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxh
dGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOworICAgICAg
ICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7CisgICAgICAgIGNv
cm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICB9CisKKyAg
ICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAg
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29y
bmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVj
dC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhl
aWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7Cisg
ICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVz
aXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47Cisg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVj
dChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUs
IGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVj
dCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBj
b25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpID09IFJl
c2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3Rz
LnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBp
ZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAg
ICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4
dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7
CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5l
KSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3
aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAg
ICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAg
ICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBs
YXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNp
emUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5o
ZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1
aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFy
Z2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50
UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9s
YXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9s
UmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
cmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYg
KHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Nj
cm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAo
bV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAg
ICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBt
X2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJl
Y3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sK
KyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0Fj
dGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZvY3VzQ29udHJvbGxl
cigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25J
blZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5n
V2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKK30KKworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5
b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihtX2xheWVyLmVuY2xv
c2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3go
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLmVuY2xv
c2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3Jv
bGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0
KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1f
bGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvKiBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92
ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVj
dCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJl
bmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllcjo6
TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNsb3NpbmdJbnRSZWN0
KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJv
b3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFJlbmRl
ckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAg
ICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhp
dFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAg
ICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvIGJvcmRl
ckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5i
b3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYg
ZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7CisgICAgICAgIGlm
IChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAg
ICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZ
Q29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0
dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJv
bUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXpl
clJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90
dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5t
YXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRz
Lm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5z
aXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBmb3IgKGludCBpID0g
bGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3Qg
TGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAg
YXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVk
SW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOworICAgICAgICBp
ZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYm
IHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBv
aW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhp
dFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclNjcm9sbENvcm5l
cigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092
ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNv
bmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlm
ICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUg
dGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisg
ICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAg
IHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxv
d1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7
CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3
YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0g
Ym94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxT
Y3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092
ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAg
IHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAg
ICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAg
IC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdh
eXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRv
IGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUp
LgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93
WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7
CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUg
JiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZ
ICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsK
KworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9s
bGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZyYW1lVmlldyYgZnJh
bWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2li
bGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisgICAgaWYgKEhU
TUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1l
bnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYm
IG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAgICBib29sIGlz
U2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKKyAgICBib29s
IGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisg
ICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xs
YWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFs
c2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVk
T3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGlu
Zywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91
cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgp
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVy
RWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7
CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJl
bmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5l
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghY29y
bmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQo
KSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3Vs
ZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQ
YXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHls
ZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92
ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJT
Y3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xs
Q29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5k
ZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyLmhhc092ZXJm
bG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1
ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKwor
ICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCks
IFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxk
IGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQo
JnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAg
ICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFy
ZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCkKK3sK
KyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlm
IChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKK30KKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpo
YW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sK
KyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxp
bmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRv
Y3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1Rv
dWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVu
ZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCisvLyBGSVhN
RTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXllci5iYWNraW5nKCkt
Pmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Ny
b2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9u
IG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZv
eC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNv
bnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVn
aW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQor
ICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICog
c3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2Ug
aWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19j
YXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0
ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGlj
IGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEp
Cit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgp
KSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYg
c291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IG1f
bGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9z
aXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91
c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBv
ZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRpYyBJbnRQ
b2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRp
b24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAgICAgIGxh
c3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgZWxzZQor
ICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOwor
CisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2lu
dDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3Jv
bGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24K
KyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkg
PD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNldEhlaWdo
dCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0
YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciBiZWhhdmlvciwgY29uc3QgTGF5
b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KQor
eworICAgIEFTU0VSVChtX2xheWVyLmFsbG93c0N1cnJlbnRTY3JvbGwoKSk7CisKKyAgICBSZW5k
ZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAg
ICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQs
IFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VBbmltYXRl
ZFNjcm9sbGluZyA9ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5h
dXRvc2Nyb2xsSW5Qcm9ncmVzcygpCisgICAgICAgICAgICAmJiBlbGVtZW50ICYmIHVzZVNtb290
aFNjcm9sbGluZyhiZWhhdmlvciwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiB1c2VBbmltYXRl
ZFNjcm9sbGluZyA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87Cisg
ICAgfTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3Jv
bGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFs
UmVjdCkubG9jYXRpb24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91
bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgYmVoYXZpb3IpOworICAgICAgICBz
ZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9m
ZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQs
IGFuaW1hdGVkKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xh
bXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKKworICAgICAgICBhdXRvIGxvY2Fs
RXhwb3NlUmVjdFNjcm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0OworICAgICAgICBsb2NhbEV4cG9z
ZVJlY3RTY3JvbGxlZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJl
Y3QobG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3go
KSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRl
bHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNa
ZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAg
aWYgKHJlbmRlcmVyLnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAh
cmVuZGVyZXIucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBp
ZiAocmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkg
eworICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkg
KyBkZWx0YTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAg
ICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOwor
CisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhl
IG5leHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJl
bWFpbmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOwor
ICAgICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlci5w
YXJlbnQoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBm
cmFtZXMuCisgICAgICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0g
bV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xs
YWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxC
eVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51
cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQg
Y2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8v
IGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50
IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAg
ICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKwor
ICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3
ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PworICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXll
ci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRT
Y3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9y
bXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0
cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIu
cmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBp
bmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1F
OiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBp
biBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFp
bmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/Cisg
ICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwg
UmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVy
biBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwg
TWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0
cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMC4uYjMzMGU0MzlhOWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtMCwwICsxLDI5NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgor
ICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1
bmRlciB0aGUgdGVybXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBW
ZXJzaW9uIDEuMSwgZm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhl
ICJNUEwiKSBvciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4w
LCBmb3VuZCBhdCBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUg
IkdQTCIpLCBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQ
TCBhcmUKKyAqIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNo
IHRvIGFsbG93IHVzZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVy
IHRoZSB0ZXJtcyBvZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0
aGUgR1BMKSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAq
IGRlbGV0aW5ndGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBu
b3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhl
IEdQTCwgYXMgdGhlIGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHBy
b3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0
aGlzIGZpbGUgdW5kZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNj
cm9sbGFibGVBcmVhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTWFy
cXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBmaW5hbCA6IHB1YmxpYyBT
Y3JvbGxhYmxlQXJlYSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYpOworICAg
IHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIFJlbmRlckxheWVy
JiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1
ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworCisg
ICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25h
bDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNj
cm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3Qg
SW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBj
YW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShj
b25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxs
cHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4
LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBB
bmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQ
b3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9
IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1h
cnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQo
U2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9m
ZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCku
eCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFt
cGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkg
Y29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBo
b3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQor
ICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVx
dWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24n
dCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4K
KyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1
cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1
aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsK
KyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wg
aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29u
dHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBi
b29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsK
KworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJs
YXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Cisg
ICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNj
cm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3Qg
PSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisK
KyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlz
IHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2
b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29u
KSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNv
bnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAg
ICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92
QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVT
bmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRT
dGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAg
dm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXll
ciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhp
Y3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1c2Vz
QXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1Jl
bmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOwor
ICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVy
VmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNv
bnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJ
bnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBv
aW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7
CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOworCisg
ICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJ
bmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50UG9p
bnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1c3Bl
bmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5h
bDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZvcmNl
VXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0
IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9sbFNu
YXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRv
ck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKKyAgICBTdHJpbmcgZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNv
bnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAg
SW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAg
Ym9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFt
cGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9y
OyB9CisgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KKworICAgIGJvb2wgY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3Zl
cmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5l
cigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9s
bGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOwor
CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3Zl
cmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5
ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Owor
CisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5k
KCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9p
ZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBo
YXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZs
b3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisK
KyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRl
biBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRv
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3Jv
bGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQ
b3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29u
c3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0
ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKwor
cHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcgb24geDg2XzY0ICg0IGJ5dGVzKSwgYWZ0
ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7
CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3RvciA6IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgorICAgIGJvb2wgbV9oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9y
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOworICAgIGJvb2wgbV9jb250
YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA6
IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAg
IGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Njcm9sbEhlaWdodDsKKworICAgIFJlbmRl
ckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Cisg
ICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBG
b3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJh
cjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAg
IC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXpl
ci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVl
Pi4KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQzNmUuLjUyMjAyNTliZWVjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDksNiArNDks
NyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg4Miw3ICs4ODMsMTEgQEAgU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QK
ICAgICBpZiAoIWxheWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9s
bGFibGVMYXllciA9IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAog
Ym9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5
Miw3ICs4OTcsMTAgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKIAogYm9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3Np
bmdMYXllcigpLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdM
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworCisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVB
cmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHAKaW5kZXggNzZlMjNlNGQwOTk2Li43YjRlNzZkYzU3YTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAg
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBt
X2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVy
RmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpOworICAgIGxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShm
YWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpA
QCAtMTcxLDExICsxNzIsMTQgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpzdGFydCgpCiAgICAgaWYg
KG1fdGltZXIuaXNBY3RpdmUoKSB8fCBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVl
ZUluY3JlbWVudCgpLmlzWmVybygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3Jv
bGxhYmxlTGF5ZXIpOworCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KG1fc3RhcnQsIDApLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFy
dCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwog
ICAgICAgICBtX3N0b3BwZWQgPSBmYWxzZTsKQEAgLTI0MywxMyArMjQ3LDE2IEBAIHZvaWQgUmVu
ZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCku
dmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJU
KHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAgICAgICBtX3Jlc2V0
ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5
ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTI3Miw3ICsyNzksNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQo
KQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAgICBpbnQgY2xpZW50
U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCkt
PmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRWYWx1ZUZvckxlbmd0
aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVudCgpLCBjbGllbnRT
aXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gbV9sYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKTsKKyAg
ICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgp
KTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVtZW50ID8gaW5jcmVt
ZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAgICAgICAgICAgIG5l
d1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkgKzI5Niw5IEBAIHZv
aWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAogICAgIGlmIChpc0hv
cml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7Cisg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7CiAgICAgZWxz
ZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRl
eCAxN2ZjMzNkNDFlMDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9wdGlvbmFsPEZsb2F0UmVj
dD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0
IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKFRleHRTdHJlYW0mIHN0
cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJlYW0gPDwgIihCKWxvY2sv
KEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0
aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVy
YXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkg
bGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ss
IChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2
ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgaGFzTGF5
ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0eWxlLCAoKylEaXJ0
eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBAIC0xMTE1LDEwICsxMTE1
LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYg
c3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAgICAgICAgIHN0cmVhbSA8
PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAg
ICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAg
ICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigp
LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJTIjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVsc2UKKyAgICAgICAgc3Ry
ZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAgICAgICAgIHN0cmVhbSA8
PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYjkxNTky
MmIyMWU5Li4wMTEzODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2Fj
aGVkSW1hZ2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1l
bnQ7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3Rz
IHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRo
ZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNv
bnN0cnVjdG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2NWMuLjI1N2FmYmUxOTA0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlLCBTY3Jv
bGxDbGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBj
b25zdCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0gICAgUmVuZGVyVGV4
dENvbnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVy
ZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVy
LT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgYXV0byog
Ym94TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIo
KS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5
ZXJTY3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
UmVuZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
ciwgc3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAK
IGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExv
Z2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwg
ZmxvYXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxh
eWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAg
ICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24s
IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGxh
eWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOworICAgIGF1dG8q
IGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXll
clNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCku
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5n
TW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAyMGZlODIuLjU5MjBk
NThmMjBiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNp
bmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlu
ZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJM
aXN0TWFya2VyLmgiCkBAIC02MDAsMjAgKzYwMSwyNCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVy
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJl
YwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7
Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0gICAgICAgIGlmIChs
YXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8
PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3go
KSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBsYXll
ci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGxh
eWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3Vu
ZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gbGF5ZXIuc2Nyb2xs
SGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGxheWVyLnNj
cm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAg
ICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94
KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAg
ICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5k
VG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0
ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgfQogI2lmIFBM
QVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2Nr
VGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBT
Y3JvbGxiYXJUaGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVN
YWMqPigmc2Nyb2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0
RGlyZWN0aW9uUlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgICAg
ICB0cyA8PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAg
ICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVy
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhl
bWVNYWMmIG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9s
bGJhclRoZW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJlY3Rp
b25SVEwoKnNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGlyZWN0aW9uIjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBiMTAzM2RhMDc5MzAuLmZmNDIyMjA3MzIxOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3Vy
aXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMzMiw4
ICszMzMsMTAgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVy
KCktPmNhblJlc2l6ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZv
LmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludElu
Zm8ucmVjdCk7CisgICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpIHsK
KyAgICAgICAgQVNTRVJUKGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICBsYXll
cigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwg
cm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7Cisg
ICAgfQogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBp
c092ZXJsYXBwZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWQ2Mzdm
ZjQ0Zjk2Li5mZTVjZTQwNTk2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTE1OCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0xODMzLDcgKzE4MzQsOCBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVu
dCwgZG91YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFy
ZWEoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3Ig
fTsKIAotICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NF
UlQoYm94LmxheWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5z
Y3JvbGxhYmxlQXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpA
QCAtMjg1NCw4ICsyODU2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJu
YWxzOjpzY3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBp
ZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhID0gJmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWROb2RlVHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA1YzQ5
OTNiYWUwMjguLjJlZTZiZTNjN2ZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2IEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBS
ZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPdmVyaGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwg
c2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwg
dG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJs
ZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBz
Y3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdT
IHRlc3RpbmcuCisKKyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRN
TEVsZW1lbnQgc2Nyb2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3Jv
bGxZT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6
c2Nyb2xsWU9mZnNldDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dl
YkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6
XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3aXRoSW5z
ZXQ6XSk6CisKIDIwMjAtMTEtMjEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIGFuIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyBmb3Igd2hlZWwgZXZl
bnQgZ2VzdHVyZXMgYmVjb21pbmcgbm9uLWJsb2NraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOC4uY2JjNTY3ZTNiZTU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9K
U0V4ZWNTdGF0ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dB
S1dpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2Vu
ZGlmCkBAIC03Nyw3ICs3OCwxNCBAQCAtIChpbnQpc2Nyb2xsWE9mZnNldAogICAgIGlmICghaXM8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dD
bGlwKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6
OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAg
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5
ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFi
bGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxPZmZzZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC05MSw3
ICs5OSwxNCBAQCAtIChpbnQpc2Nyb2xsWU9mZnNldAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVu
ZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIg
PSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS55KCk7CiB9CiAKIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9m
ZnNldDooaW50KXkKQEAgLTExMSwxMSArMTI2LDE0IEBAIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNl
dDooaW50KXggc2Nyb2xsWU9mZnNldDooaW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6KEJPT0wpYWRq
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotICAgIGxheWVyLT5z
Y3JvbGxUb09mZnNldChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKHRydWUpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6
U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdl
YkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIGlmIChhZGp1c3RGb3JJT1ND
YXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhm
YWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKIH0KIAogLSAodm9pZClhYnNvbHV0ZVBvc2l0aW9uOihpbnQgKil4
IDooaW50ICopeSA6KGludCAqKXcgOihpbnQgKiloCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzZmVhMTYwODM5MmYuLjEyZDE1OWVjOGZmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NSw2ICs5
NSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
clZpZXcuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAgQEAgLSAodm9p
ZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICNlbHNlCiAgICAg
ICAgIGF1dG8qIGxheWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
OwogICAgICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7
CiAgICAgICAgICAgICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUo
V2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJD
b3JlOjpTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVu
dDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRv
RWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZ
ZXMgfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xs
aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgICAgICAgICBf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAg
ICAgIH0KQEAgLTc1OCw5ICs3NjAsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2li
bGU6KERPTVJhbmdlICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAgICAgaWYgKHN0
YXJ0Tm9kZSAmJiBzdGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0byogbGF5ZXIg
PSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChs
YXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5l
bnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3Np
bmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdl
YkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CiAKICAgICAgICAgICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAg
ICAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRl
eCA2MjM2YTExYmYyOTYuLjU4ZGRlMDVkNzA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTExLTI2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemlt
bWVybWFubkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91
dCBvZiBSZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBPdmVyaGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92
ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJM
YXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJl
LXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3Vw
cG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBm
b3IgRVdTIHRlc3RpbmcuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZp
ZXc6Omdlc3R1cmUpOgorCiAyMDIwLTExLTE5ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1
amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtUZXh0dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJl
TWFwcGVyIGZyb20gVGV4dHVyZU1hcHBlckxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCmluZGV4IGY3N2MyNjJlMDk0Zi4uMTUyNDk4YWIzMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1
cE1lbnVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5k
ZXJWaWV3Lmg+CkBAIC0yMDQ4LDggKzIwNDksMTEgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQ
QVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJl
Y3RseSBoaXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAg
ICAgIGNvcmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAg
ICAgICAgICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2lj
YWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBpZiAoIXNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xs
ZWRBcmVhKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFj
a1B0cigpICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNr
UHRyKCkpKSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVy
ZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="431938"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414974</attachid>
            <date>2020-11-28 00:28:43 -0800</date>
            <delta_ts>2020-12-11 15:32:53 -0800</delta_ts>
            <desc>Patch, v16 (squashed for testing)</desc>
            <filename>patch-v16.diff</filename>
            <type>text/plain</type>
            <size>306202</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYTA2NjkxMDEzMjUuLmFjZDgwZTEyZThjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM2MCBAQAorMjAyMC0xMS0yOCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1h
bm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2Yg
UmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxs
IHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIs
IHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2Fi
bGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQg
c2Nyb2xsaW5nL292ZXJmbG93LgorCisgICAgICAgIFdJUCBwYXRjaCwgc3F1YXNoZWQgZm9yIEVX
UyB0ZXN0aW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8g
Y29uc3QpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNldFNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2Ny
b2xsVG9wKToKKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAqIGh0
bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXJxdWVl
RWxlbWVudDo6cmVuZGVyTWFycXVlZSBjb25zdCk6CisgICAgICAgICogaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjplbGVt
ZW50RGlkQmx1cik6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3gpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjplbmNsb3Np
bmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBh
aW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24pOgorICAgICAgICAqIHBhZ2UvaW9zL0Zy
YW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRp
b25DaGFuZ2VkRm9yTm9kZSk6CisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUFyZWFGb3JCb3gpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlv
biBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lk
dGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwV2hlZWxFdmVudE1v
bml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRTY3JvbGxMZWZ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9sbExheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpwYW5TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlj
a3lQb3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludExheWVyQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aGl0VGVzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRp
bmdCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omlz
VXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjphcHBseVBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNldCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9u
VXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXRXaXRoQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzY3JvbGxUbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3Jv
bGxpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVD
b250ZW50UmVjdEludGVybmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpvdmVyaGFuZ0Ftb3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6aXNBY3RpdmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjb250ZW50c1Np
emUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlYWNo
YWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRTdGFy
dFNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGlkRW5k
U2Nyb2xsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkaWRVcGRh
dGVTY3JvbGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omxhc3RL
bm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
b3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFyKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRlc3Ryb3lTY3JvbGxi
YXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVy
ZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Ny
b2xsQW5pbWF0b3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
Omhhc092ZXJmbG93Q29udHJvbHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6Omhhc0hvcml6b250YWxPdmVyZmxvdyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVy
Zmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1S
ZXNpemVySW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50UmVzaXplcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0
VGVzdE92ZXJmbG93Q29udHJvbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNjcm9sbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgIChpc1R5cGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJl
Y3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
ZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNj
cm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xs
YmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpy
ZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVl
ZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpw
YWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBh
aW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxh
dGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05vZGVGb3JTY3JvbGxpbmdS
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xsYWJs
ZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5
V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Nyb2xsaW5nTGF5ZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25T
Y3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVn
aXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNl
clNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNl
dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09m
ZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxXaWR0aCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50
UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJlY3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3Jv
bGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBk
YXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0
ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jp
em9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVuZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3Jv
bGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJmbG93Q29udHJvbHMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93TGVmdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFs
T3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Zl
cnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJl
c2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5k
bGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9mZnNldHMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVz
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpw
YWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5
UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJl
YVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0
ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3Rl
ZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxB
bmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg6IEFkZGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5j
ZXN0b3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVl
ZTo6dGltZXJGaXJlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0IGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6cGFpbnQpOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11
bGF0aW5nV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIwLTEx
LTI3ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkMgRGlzcGxheV0gSW1wbGVtZW50IGJhc2ljIG92ZXJmbG93OmhpZGRlbiBjbGlwcGluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UKaW5kZXggMzc4OWFhMzgzOTQwLi43NTExNDE4NGUxYTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQpAQCAtMTQ2Miw2ICsxNDYyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAogICAgIHJlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCiAg
ICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5kZXJpbmcvUmVuZGVyTWVk
aWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBlZDcx
YzZkNzM0OWIuLmExZjJkMzM3YTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIyMTgsNiArMjIxOCw3
IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmlsdGVycy5jcHAKIHJlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorcmVuZGVyaW5nL1JlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3RhdGUuY3BwCiByZW5kZXJp
bmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDNjNzBlMTFiMzZmNC4uOGM4NTNiODIwOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDczLDYgKzQwNzMsNyBAQAog
CQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODM3MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODM5MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg3QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0ODNCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNTNGQjg0MjEzQjdBNjQwMEM0
MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODgwMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmpl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0
ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg4NzA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZU1hYy5oICov
OyB9OwogCQlCQ0VBNDg4QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODRCMDk3RDkzMDIw
MDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC02MDE1LDYgKzYwMTYsOCBAQAogCQkwRjRDREVBQTIzRDkxQThB
MDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUzRkI4MTIxM0IxQkI4MDBD
NDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjgz
MjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTNG
Qjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjg5MjEzQjc2ODQwMEM0
MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTGF5ZXJG
aWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNGQjhCMjEzQjc2ODQw
MEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVu
ZGVyTGF5ZXJGaWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1NERD
RTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI5NTg5LDYgKzI5NTkyLDggQEAKIAkJCQkwRjUzRkI4OTIxM0I3Njg0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJM0MyNDRGRTVBMzc1QUM2
MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICovLAogCQkJCTNDMjQ0RkU0
QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggKi8sCisJCQkJMEY1
M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICov
LAorCQkJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0
YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0MgLyogUmVuZGVyTGluZUJv
eExpc3QuY3BwICovLApAQCAtMzQwNTYsNiArMzQwNjEsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRF
OUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVs
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcw
QkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsu
aCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggN2YyYmRhOGJlMTNjLi5k
MTY4YjNiZmUwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtODMsNiArODMsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJv
eC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTAzLDcgKzM5MDQsNyBAQCBT
Y3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFy
ZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRBbmRIYXNT
Y3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBi
b3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LmxheWVyKCkgPyBib3gubGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkxNiw3ICszOTE3
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25zdCBJbnRQ
b2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBpcyBw
b2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwgb3ZlcmZs
b3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBib3gubGF5
ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChwb2ludCk7
CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGQ2MWM3
ZjY5NTQxMi4uZWQxOTViYjAzYzQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC05Miw2ICs5
Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIK
QEAgLTEzMzQsOCArMTMzNSw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3
TGVmdCkKICAgICAgICAgaW50IGNsYW1wZWRMZWZ0ID0gY2xhbXBUb0ludGVnZXIobmV3TGVmdCAq
IHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIEFuaW1hdGVkU2Ny
b2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0
aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CiAgICAgICAg
IHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KGNsYW1wZWRMZWZ0LCBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQotICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5k
ZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwog
ICAgIH0KIH0KIApAQCAtMTM1OCw4ICsxMzU5LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxU
b3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihu
ZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBBbmlt
YXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6
QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwog
ICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRUb3AsIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/
IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1
ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1l
U2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CmluZGV4IDliNjdkMjk3ZTE5MS4uODRkZTk4YzhiYWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
CkBAIC0yMzkxLDkgKzIzOTIsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0
aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3QgU2Nyb2wKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0gc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkgewogICAgICAg
ICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAgICAgICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAg
ICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFi
bGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAgICAgbGF5ZXItPnNjcm9s
bFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFsTW9kZSwgYWxpZ25tZW50
LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6OlllcyB9KTsKLSAg
ICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlQXBwZWFyYW5j
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubm90aWZ5UmV2
ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50LT5mcmFtZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAppbmRleCAwYWRmN2QxNjRl
MmUuLjJmOGNiNjliZTM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFy
cXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVt
ZW50LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVl
LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3Niwx
MCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUoKSBj
b25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2JqZWN0
KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5k
ZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICgh
c2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5tYXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2RhZDVh
OWYuLmMwMmE4ZDc2YzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRU
eXBlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI1Myw5ICsyNTQsMTEgQEAgdm9pZCBUZXh0Rmll
bGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlubmVyTGF5ZXIpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGF1dG8qIGlubmVyTGF5ZXJTY3JvbGxhYmxlID0gaW5uZXJMYXll
ci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgYm9vbCBpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lPigqcmVuZGVy
ZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyLT5zY3Jv
bGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3JvbGxUb09mZnNldChzY3JvbGxPZmZz
ZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlv
biA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsV2lkdGgoKSwgMCk7CisgICAgaW5u
ZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICNpZiBF
TkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1Z2dlc3Rpb25zKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNjVlYjIwOWQ0ZDM3Li41YjFjYmMzY2EzZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTgwLDYgKzgwLDcgQEAKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM0MSw3ICszNDIsNyBAQCBz
dGF0aWMgYm9vbCBoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2Rl
KiBzdGFydE5vZGUsIGNvbnN0IFdoZQogCiAgICAgUmVuZGVyQm94KiBjdXJyZW50RW5jbG9zaW5n
Qm94ID0gJmluaXRpYWxFbmNsb3NpbmdCb3g7CiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdC
b3gpIHsKLSAgICAgICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3Np
bmdCb3gtPmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJveExheWVyID0gY3VycmVudEVu
Y2xvc2luZ0JveC0+bGF5ZXIoKSA/IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCktPnNjcm9s
bGFibGVBcmVhKCkgOiBudWxscHRyKSB7CiAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQg
PSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0Zm9ybUV2ZW50KCk7CiAgICAgICAgICAgICBib29s
IHNjcm9sbGluZ1dhc0hhbmRsZWQ7CiAgICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewpA
QCAtMTU2Miw3ICsxNTYzLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gKICAgICAgICAgICAg
IGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5k
ZXJlcikubGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1Bv
aW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBz
b3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0
aEVhc3RSZXNpemVDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xOTEy
LDkgKzE5MTMsOSBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKLSAgICAgICAgICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXI7CisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6Oklu
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAgICAgICAgICBpZiAo
IWVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgp
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMzA1
OGQ5MWRlNjVhLi44NWU1N2U5OGMxMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAg
LTgxLDYgKzgxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdS
b290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Ny
b2xsYmFyUGFydC5oIgpAQCAtMjU5NSw3ICsyNTk2LDggQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAgIGlmICghbGF5b3V0Q29udGV4dCgp
LmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMoKSkgewog
ICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IHRoaXMtPnJlbmRlclZpZXcoKSkg
ewogICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0gICAgICAgICAgICByZW5k
ZXJWaWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwo
KTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJWaWV3LT5s
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zMjEwLDYgKzMyMTIsMTAgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbFRv
QW5jaG9yKCkKIAogICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiIGFu
Y2hvciBub2RlIHJlY3QgIiA8PCByZWN0KTsKIAorICAgIGF1dG8qIGVuY2xvc2luZ0xheWVyID0g
YW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICBpZiAoZW5jbG9z
aW5nTGF5ZXIgJiYgIWVuY2xvc2luZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICBl
bmNsb3NpbmdMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gU2Ny
b2xsIG5lc3RlZCBsYXllcnMgYW5kIGZyYW1lcyB0byByZXZlYWwgdGhlIGFuY2hvci4KICAgICAv
LyBBbGlnbiB0byB0aGUgdG9wIGFuZCB0byB0aGUgY2xvc2VzdCBzaWRlICh0aGlzIG1hdGNoZXMg
b3RoZXIgYnJvd3NlcnMpLgogICAgIGlmIChhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5zdHlsZSgp
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC0zODYyLDcgKzM4NjgsMTEgQEAgU2Nyb2xs
YWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAg
IGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVy
LT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYs
IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBpZiAoIWVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwogfQogCiBJbnRS
ZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKQEAg
LTQzMjYsOCArNDMzNiwxMSBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50cyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdAogICAgICAgICByZW5k
ZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJvb3RMYXllci0+cGFpbnQoY29udGV4
dCwgZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIsIHsg
fSwgc2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
OjpBbnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55
T3JpZ2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3k6OkFjY2Vzc2li
bGVPcmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwotICAgIGlmIChyb290TGF5ZXItPmNv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCi0g
ICAgICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkaXJ0eVJl
Y3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVSb290TGF5ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgaWYg
KHNjcm9sbGFibGVSb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBzY3JvbGxhYmxlUm9vdExheWVyLT5w
YWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9y
LCByZW5kZXJlcik7CisgICAgfQogCiAgICAgZGlkUGFpbnRDb250ZW50cyhjb250ZXh0LCBkaXJ0
eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZp
Z2F0aW9uLmNwcAppbmRleCAzOGZiNDk3MWQyYTMuLjgwOWJjMTkxMzQ3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzk0LDcgKzM5NSw4IEBA
IGJvb2wgc2Nyb2xsSW5EaXJlY3Rpb24oTm9kZSogY29udGFpbmVyLCBGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAg
ICBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxCeVJlY3Vy
c2l2ZWx5KEludFNpemUoZHgsIGR5KSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBjb250YWluZXItPnJlbmRlckJveCgpLT5lbmNsb3NpbmdMYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KEludFNpemUoZHgsIGR5KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQppbmRleCAzMmQzMmU1OWIyNDIuLjhhNGNhN2JjZDA0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTU3LDYgKzU3LDcgQEAKICNpbXBv
cnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgogI2ltcG9ydCAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2lt
cG9ydCAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgpAQCAtODE5LDE0ICs4MjAsMTUgQEAgdm9p
ZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFz
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRv
d25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0
byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXll
cigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50U2Ny
b2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/
IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxheWVy
LnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIuc2V0
Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxUeXBl
ID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNl
ciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXllci5kaWRF
bmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPworICAgIHNj
cm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlz
IGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Np
b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGFm
ZDc2ZDI1NmVkMC4uMDA3OTk3ZTJiMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9ybVdoZWVs
RXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgorI2lt
cG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVyTGlzdEJv
eC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0LmgiCkBA
IC03ODQsNyArNzg1LDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFG
b3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJveCkpCiAg
ICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAgIHJldHVy
biBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiBTY3Jv
bGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IGM4ZDgxZWYyNDg2Ni4uOTVmMDE3NGM3ODk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTU5LDYgKzU5LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdE1hcmtlci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC0xMTEzLDgg
KzExMTQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIC8vIHotaW5kZXguIFdlIHBhaW50
IGFmdGVyIHdlIHBhaW50ZWQgdGhlIGJhY2tncm91bmQvYm9yZGVyLCBzbyB0aGF0IHRoZSBzY3Jv
bGxiYXJzIHdpbGwKICAgICAvLyBzaXQgYWJvdmUgdGhlIGJhY2tncm91bmQvYm9yZGVyLgogICAg
IGlmICgocGhhc2UgPT0gUGFpbnRQaGFzZTo6QmxvY2tCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFBh
aW50UGhhc2U6OkNoaWxkQmxvY2tCYWNrZ3JvdW5kKSAmJiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpCi0gICAgICAgICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgqdGhpcykgJiYgIXBhaW50
SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQotICAgICAgICBsYXllcigpLT5wYWludE92
ZXJmbG93Q29udHJvbHMocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOworICAgICAg
ICAmJiBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGUgJiYgcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0aGluUm9vdCgq
dGhpcykgJiYgIXBhaW50SW5mby5wYWludFJvb3RCYWNrZ3JvdW5kT25seSgpKQorICAgICAgICBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpLT5wYWludE92ZXJmbG93Q29udHJvbHMocGFpbnRJbmZv
LmNvbnRleHQoKSwgcm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBzbmFwcGVk
SW50UmVjdChwYWludEluZm8ucmVjdCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpwYWludENv
bnRlbnRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCkBAIC0yMDA3LDcgKzIwMDgsMTIgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3Zl
cmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG8KICAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gbGF5ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9p
bnQobG9jYXRpb25JbkNvbnRhaW5lciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkp
KTsKKyAgICBBU1NFUlQobGF5ZXIoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMocmVzdWx0LCByb3VuZGVkSW50UG9pbnQobG9jYXRpb25JbkNvbnRhaW5l
ciAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsKIH0KIAogTm9kZSogUmVuZGVy
QmxvY2s6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QKQEAgLTI1MDMsMTAgKzI1MDksMjMgQEAgaW50
IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUs
IGJvb2wgZmlyc3RMaW5lLCBMaW4KICAgICAgICAgLy8gKHRoZSBjb250ZW50IGluc2lkZSB0aGVt
IG1vdmVzKS4gIFRoaXMgbWF0Y2hlcyBXaW5JRSBhcyB3ZWxsLCB3aGljaCBqdXN0IGJvdHRvbS1h
bGlnbnMgdGhlbS4KICAgICAgICAgLy8gV2UgYWxzbyBnaXZlIHVwIG9uIGZpbmRpbmcgYSBiYXNl
bGluZSBpZiB3ZSBoYXZlIGEgdmVydGljYWwgc2Nyb2xsYmFyLCBvciBpZiB3ZSBhcmUgc2Nyb2xs
ZWQKICAgICAgICAgLy8gdmVydGljYWxseSAoZS5nLiwgYW4gb3ZlcmZsb3c6aGlkZGVuIGJsb2Nr
IHRoYXQgaGFzIGhhZCBzY3JvbGxUb3AgbW92ZWQpLgotICAgICAgICBib29sIGlnbm9yZUJhc2Vs
aW5lID0gKGxheWVyKCkgJiYgKGxheWVyKCktPm1hcnF1ZWUoKSB8fCAoZGlyZWN0aW9uID09IEhv
cml6b250YWxMaW5lID8gKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCkueSgpICE9IDApCi0gICAgICAgICAgICA6IChsYXllcigpLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCkgfHwgbGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpICE9IDApKSkpIHx8
IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSk7Ci0gICAgICAgIAotICAgICAg
ICBPcHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUgPyBPcHRpb25hbDxp
bnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7CisgICAgICAgIGF1dG8gaWdu
b3JlQmFzZWxpbmUgPSBbdGhpcywgZGlyZWN0aW9uXSgpIC0+IGJvb2wgeworICAgICAgICAgICAg
aWYgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgICAgICBp
ZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBIb3Jpem9udGFs
TGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcigpIHx8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAg
ICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICB9OworCisgICAgICAg
IE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNlbGluZSgpID8gT3B0aW9uYWw8
aW50PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24pOwogICAgICAgICAKICAgICAg
ICAgaWYgKGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkpIHsKICAgICAgICAgICAgIC8vIEhpc3Rv
cmljYWxseSwgd2UgZGlkIHRoaXMgY2hlY2sgZm9yIGFsbCBiYXNlbGluZXMuIEJ1dCB3ZSBjYW4n
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAppbmRleCAz
ZGI3YTg2YTYxNTEuLjcyYzQ2ZWU2MGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTM0OSw3ICszNDksOCBAQCB2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNh
bFdpZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUo
KSkgewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFycXVlZSB3aXRoIGlubGluZSBjaGlsZHJl
biBoYXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAgaWYgKGxheWVyKCkgJiYgbGF5ZXIoKS0+
bWFycXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCisgICAgICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxl
TGF5ZXItPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKS0+aXNIb3Jpem9u
dGFsKCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSAwOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCAzMDdmOWIyYzdmMmYuLjZhMTc4NjBh
NzRkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTYzLDYgKzYz
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCkBAIC0zMTksMTAgKzMyMCwxMiBAQCB2b2lkIFJlbmRlckJveDo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAg
IC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZlIGEgZGVmaW5lZCBzY3Jv
bGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBpbnRvIHRoZQogICAgIC8v
IG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkg
JiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IG5l
d1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQ
b3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgIGZsb2F0IHpvb21T
Y2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5lZmZlY3Rp
dmVab29tKCk7Ci0gICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7
Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbik7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlv
biA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0
IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9sZFN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBzY3JvbGxQb3NpdGlvbi5zY2FsZSh6b29tU2Nh
bGVGYWN0b3IpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8g
T3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdHJpZ2dlcmluZyBsYXlv
dXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBj
b25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCku
eCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0NsaXAo
KSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigp
LngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxQb3Np
dGlvbigpLnkoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJldHVybiAoaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSA/IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9z
aXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVzZXRMb2dpY2FsSGVpZ2h0
QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTkwLDMxICs1OTUsMzggQEAgc3RhdGljIHZvaWQg
c2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIpCiAgICAgUGFnZSYgcGFn
ZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlmICghcGFnZS5pc01vbml0b3JpbmdX
aGVlbEV2ZW50cygpKQogICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIuc2Nyb2xsQW5pbWF0b3Io
KS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7
CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGF1dG8mIHNjcm9sbEFuaW1hdG9yID0g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmltYXRvcigpOworICAgIHNjcm9sbEFuaW1hdG9yLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKIH0K
IAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQsIFNjcm9sbFR5cGUg
c2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1h
dGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAg
IHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7
Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWFBvc2l0aW9u
KG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAg
aWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigp
LT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRl
ZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9s
bFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVyKCkpCiAgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcigqbGF5ZXIoKSk7Ci0g
ICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1w
aW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5k
ZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODI2LDEyICs4MzgsMTggQEAgYm9v
bCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpIGNvbnN0CiAKIGlu
dCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25zdAogewotICAgIHJldHVy
biBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT52ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVM
YXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9s
bGJhclNpemUoKSA/IHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIDog
MDsKIH0KIAogaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gbGF5ZXIo
KS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBp
bmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IHNjcm9sbGFibGVMYXllci0+aG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aW50cmluc2lj
U2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzOSwxMyArODU3LDE2IEBAIGludCBS
ZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgpIGNvbnN0CiAgICAgaWYg
KCFoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxw
dHI7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkp
IHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzVmVydGljYWxTY3JvbGxi
YXIoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsYWJsZUxheWVyLCBzY3JvbGxhYmxl
TGF5ZXIpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5oYXNWZXJ0aWNhbFNjcm9s
bGJhcigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICB9
CiAKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgKHN0eWxlKCkub3ZlcmZs
b3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3ZlcmxheVNjcm9sbGJhcnMoKSkp
IHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFi
bGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc0hvcml6b250YWxT
Y3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7
CiAgICAgfQogCkBAIC04NTQsOCArODc1LDggQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Ny
b2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJCb3g6OnNjcm9sbExheWVy
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQpCiB7Ci0gICAgUmVuZGVy
TGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5ZXIgJiYgYm94TGF5ZXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkgeworICAgIGF1dG8q
IGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyKCkgPyBsYXllcigpLT5lbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94
TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpIHsKICAgICAgICAgaWYgKHN0b3BFbGVtZW50KQogICAgICAgICAgICAgKnN0b3BFbGVtZW50
ID0gZWxlbWVudCgpOwogCkBAIC04ODcsMTIgKzkwOCwxMyBAQCBib29sIFJlbmRlckJveDo6bG9n
aWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdAogICAgIAogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsKICAgICBpZiAobCkgewor
ICAgICAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsLT5lbnN1cmVMYXllclNjcm9sbGFi
bGVBcmVhKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8vIE9uIE1hYyBvbmx5IHdl
IHJlc2V0IHRoZSBpbmxpbmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4gZG9pbmcgYSBkb2N1bWVu
dCBzY3JvbGwgKGUuZy4sIGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAgICBpZiAoZ3JhbnVsYXJp
dHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9sbGVkID0gbC0+c2Nyb2xs
KGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJhY2t3YXJkLCBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkp
LCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIHNjcm9sbGVkID0g
Ym94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5l
RGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIp
OwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0
aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgICAgIGlmIChib3hM
YXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAgIHNjcm9sbGVkID0gdHJ1
ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAtOTIxLDYgKzk0MywyMyBA
QCBib29sIFJlbmRlckJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0
CiAgICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpOwogfQogCiti
b29sIFJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7
CisgICAgaWYgKGlzUmVuZGVyVmlldygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChzY3JvbGxzT3ZlcmZsb3coKSB8fCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNWZXJ0
aWNhbE92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lIHx8IHN0eWxlKCkuaGFzVmlld3BvcnRDb25zdHJhaW5l
ZFBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzSFRNTE1hcnF1
ZWUoKSAmJiBzdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9u
ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEZJ
WE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2FuIGJlIHByb2dyYW1t
YXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4gdGhhdCBjYXNlLgog
Ym9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25zdAogewpA
QCAtOTk3LDggKzEwMzYsOCBAQCBSZW5kZXJCb3gqIFJlbmRlckJveDo6ZmluZEF1dG9zY3JvbGxh
YmxlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAKIHZvaWQgUmVuZGVyQm94OjpwYW5TY3JvbGwo
Y29uc3QgSW50UG9pbnQmIHNvdXJjZSkKIHsKLSAgICBpZiAobGF5ZXIoKSkKLSAgICAgICAgbGF5
ZXIoKS0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKIH0K
IAogYm9vbCBSZW5kZXJCb3g6OmNhblVzZU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKQEAgLTEw
MjcsNyArMTA2NiwxMSBAQCBTY3JvbGxQb3NpdGlvbiBSZW5kZXJCb3g6OnNjcm9sbFBvc2l0aW9u
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIHsgMCwgMCB9OwogCiAgICAgQVNTRVJUKGhhc0xheWVy
KCkpOwotICAgIHJldHVybiBsYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiB7IDAsIDAgfTsKKworICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCk7CiB9CiAKIExheW91dFNpemUgUmVuZGVyQm94
OjpjYWNoZWRTaXplRm9yT3ZlcmZsb3dDbGlwKCkgY29uc3QKQEAgLTE1NzUsOSArMTYxOCwxMCBA
QCBib29sIFJlbmRlckJveDo6Y29tcHV0ZUJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZgogICAgIGlmICghZ2V0QmFja2dyb3VuZFBhaW50ZWRF
eHRlbnQocGFpbnRPZmZzZXQsIGJhY2tncm91bmRSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
KSB7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGluZ01heVJldmVhbEJhY2tn
cm91bmQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAgICAgcmV0dXJuIGZv
cmVncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChiYWNrZ3JvdW5kUmVjdCwgYmFja2dyb3Vu
ZE9ic2N1cmF0aW9uVGVzdE1heERlcHRoKTsKIH0KIApAQCAtMTg5NCwxMCArMTkzOCwxMCBAQCBM
YXlvdXRSZWN0IFJlbmRlckJveDo6b3ZlcmZsb3dDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYg
bG9jYXRpb24sIFJlbmRlckZyYWdtZQogICAgIGNsaXBSZWN0LnNldFNpemUoY2xpcFJlY3Quc2l6
ZSgpIC0gTGF5b3V0U2l6ZShib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpLCBib3JkZXJUb3Ao
KSArIGJvcmRlckJvdHRvbSgpKSk7CiAKICAgICAvLyBTdWJ0cmFjdCBvdXQgc2Nyb2xsYmFycyBp
ZiB3ZSBoYXZlIHRoZW0uCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
KSB7CiAgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkpCi0gICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgocmVsZXZhbmN5KSwgMCk7Ci0gICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KGxheWVyKCkt
PnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KSwgbGF5ZXIoKS0+aG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUoc2Ny
b2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOworICAg
ICAgICBjbGlwUmVjdC5jb250cmFjdChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgocmVsZXZhbmN5KSwgc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KHJlbGV2YW5jeSkpOwogICAgIH0KIAogICAgIHJldHVybiBjbGlwUmVjdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAppbmRleCAzY2Q4MGJjZDA3MmQuLmRmMGVhMWMwNzE0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTYsNiArNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRleCgpIHx8IGhhc1J1
bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKKyAgICBib29sIHJlcXVpcmVz
TGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICBib29sIGJhY2tncm91bmRJc0tu
b3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0IGZp
bmFsOwogICAgIAogICAgIC8vIFJldHVybnMgZmFsc2UgZm9yIHRoZSBib2R5IHJlbmRlcmVyIGlm
IGl0cyBiYWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCBiOTgyN2M4
YTE0ZDIuLmJhNWRjZmE0MDM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtNDg5LDggKzQ5MCwx
MCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25z
dHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBGbG9hdFBvaW50IGNvbnRhaW5l
ckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0gY29udGFpbmVyUmVjdFJlbGF0
aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAgICAgICAgICAgIEZsb2F0U2l6
ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0Jv
eC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVy
VG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAo
JmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIGNv
bnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBw
aW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgY29udGFpbmVyUmVjdFJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWluZXJMb2NhdGlvblJlbGF0aXZl
VG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0cmFpbnRzLnNldENvbnRhaW5p
bmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBA
IC01MDcsOCArNTEwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlj
a3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgaWYgKGVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Ny
b2xsaW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxl
ZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBl
bmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBh
ZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFp
bmluZ0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5n
QW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHN0
aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IHNjcm9sbGFibGVFbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICAvLyBGSVhNRTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8IGlzIG5vdCB0cmFuc2Zvcm1l
ZC4KICAgICBzdGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5lY3N0b3Iuc2V0TG9jYXRpb24o
c3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTQ3LDExICs1
NTIsMTQgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0
Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZsb2F0UmVjdCBjb25zdHJhaW5p
bmdSZWN0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0NvbnRhaW5lclF1YWQoRmxvYXRS
ZWN0KGNsaXBSZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsKIAotICAgICAgICBGbG9hdFBv
aW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBp
bmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
ICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50
KCkgKyBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAK
ICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAgICAgICAgaWYgKGVuY2xvc2lu
Z0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgc2Nyb2xsYmFy
T2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJX
aWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdD
bGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBwaW5nQm94LnNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSAmJiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xp
cHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IHNjcm9sbGFibGVFbmNs
b3NpbmdDbGlwcGluZ0xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdSZWN0LnNldExvY2F0aW9uKEZs
b2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9mZnNldCwgc2Nyb2xsT2Zmc2V0
LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVjdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDUyNDNlYTFjMWIwNC4uMDU4ZmQ4OTU0YmU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE5IEFkb2JlLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBTLkwuCiAgKgogICogUG9ydGlvbnMg
YXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlv
bi4KICAqCkBAIC05Nyw2ICs5OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJGaWx0ZXJzLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCkBAIC0zMDQsNDAgKzMwNiwyNiBAQCBSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXll
ck1vZGVsT2JqZWN0KQogICAgICwgbV9ub3JtYWxGbG93TGlzdERpcnR5KHRydWUpCiAgICAgLCBt
X2hhZE5lZ2F0aXZlWk9yZGVyTGlzdChmYWxzZSkKICAgICAsIG1faW5SZXNpemVNb2RlKGZhbHNl
KQotICAgICwgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkodHJ1ZSkKICAgICAsIG1faGFzU2VsZlBh
aW50aW5nTGF5ZXJEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnREaXJ0eShmYWxzZSkKICAgICAsIG1fdXNlZFRyYW5zcGFyZW5jeShmYWxzZSkK
ICAgICAsIG1fcGFpbnRpbmdJbnNpZGVSZWZsZWN0aW9uKGZhbHNlKQotICAgICwgbV9pbk92ZXJm
bG93UmVsYXlvdXQoZmFsc2UpCiAgICAgLCBtX3JlcGFpbnRTdGF0dXMoTmVlZHNOb3JtYWxSZXBh
aW50KQogICAgICwgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5KHRydWUpCiAgICAgLCBtX2hh
c1Zpc2libGVDb250ZW50KGZhbHNlKQogICAgICwgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0Rp
cnR5KGZhbHNlKQogICAgICwgbV9oYXNWaXNpYmxlRGVzY2VuZGFudChmYWxzZSkKLSAgICAsIG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQogICAgICwgbV9pc0ZpeGVkSW50ZXJzZWN0
aW5nVmlld3BvcnQoZmFsc2UpCiAgICAgLCBtX2JlaGF2ZXNBc0ZpeGVkKGZhbHNlKQogICAgICwg
bV8zRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0YXR1c0RpcnR5KHRydWUpCiAgICAgLCBtX2hhczNE
VHJhbnNmb3JtZWREZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGluZ0Rlc2Nl
bmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50
cyhmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGZhbHNlKQot
ICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNlKQogICAgICwgbV9o
YXNUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9oYXMzRFRyYW5zZm9ybWVkQW5j
ZXN0b3IoZmFsc2UpCiAgICAgLCBtX2luc2lkZVNWR0ZvcmVpZ25PYmplY3QoZmFsc2UpCiAgICAg
LCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEluZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb246Ok5vbmUpKQogICAgICwgbV92aWV3cG9ydENvbnN0cmFpbmVk
Tm90Q29tcG9zaXRlZFJlYXNvbihOb05vdENvbXBvc2l0ZWRSZWFzb24pCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICAsIG1fcmVnaXN0
ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAg
LCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwg
bV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpCi0gICAgLCBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhmYWxzZSkKLSAgICAsIG1fdXBkYXRpbmdNYXJx
dWVlUG9zaXRpb24oZmFsc2UpCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAsIG1fbGF5ZXJMaXN0
TXV0YXRpb25BbGxvd2VkKHRydWUpCiAjZW5kaWYKQEAgLTM2MSwxNiArMzQ5LDYgQEAgUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdCkKICAgICAgICAgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5ID0gZmFsc2U7
CiAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSByZW5kZXJlcigpLnN0eWxlKCkudmlzaWJp
bGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgfQotCi0gICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkgewotICAgICAgICAvLyBXZSBzYXZlIGFu
ZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVl
cyBhcmUgcmVjYWxjdWxhdGVkLgotICAgICAgICBpZiAocmVuZGVyQm94KCkpIHsKLSAgICAgICAg
ICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24o
KTsKLSAgICAgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKLSAgICAgICAg
ICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9z
aXRpb24oSW50UG9pbnQoKSk7Ci0gICAgfQogfQogCiBSZW5kZXJMYXllcjo6flJlbmRlckxheWVy
KCkKQEAgLTM3OCwyOSArMzU2LDEwIEBAIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQogICAg
IGlmIChpblJlc2l6ZU1vZGUoKSkKICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnJlc2l6ZUxheWVyRGVzdHJveWVkKCk7CiAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNT
Y3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0KLSAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEpCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFi
bGVBcmVhKHRoaXMpOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgdW5yZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50
LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0KLSAgICBk
ZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIGRlc3Ryb3lTY3JvbGxi
YXIoVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcmVuZGVyZXIoKS5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOwot
CiAgICAgaWYgKG1fcmVmbGVjdGlvbikKICAgICAgICAgcmVtb3ZlUmVmbGVjdGlvbigpOwogCi0g
ICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICBjbGVhclJlc2l6ZXIoKTsKLQorICAgIGNsZWFy
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGNsZWFyTGF5ZXJGaWx0ZXJzKCk7CiAKICAgICBp
ZiAocGFpbnRzSW50b1Byb3ZpZGVkQmFja2luZygpKSB7CkBAIC05NDksNyArOTA4LDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVs
YXlvdXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0PFVwZGF0ZUxheWVy
UG9zaXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigmZmxhZ3Mp
OwotICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+YXBwbHlQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAg
ICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0aGlzLCBwYXJlbnQoKSk7
CkBAIC05NTcsNyArOTE3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVh
ciBvdXIgY2FjaGVkIGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygp
OwogCi0gICAgaWYgKGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkgewogICAg
ICAgICBMYXlvdXRTaXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAoZ2VvbWV0cnlNYXAp
CiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9GbG9hdFNpemUoZ2Vv
bWV0cnlNYXAtPmFic29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAtOTY2LDcgKzkyNiw3
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5
TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgICAgICAgICAvLyBhcyBjYW5Vc2VPZmZz
ZXRGcm9tQW5jZXN0b3IgbWF5IGJlIHRydWUgZm9yIGFuIGFuY2VzdG9yIGxheWVyLgogICAgICAg
ICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdCgpKTsKICAgICAg
ICAgfQotICAgICAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zm
c2V0RnJvbVJvb3QpKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cG9zaXRpb25PdmVyZmxv
d0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CiAgICAgfQogCiAgICAg
dXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CkBAIC0xMDEzLDcgKzk3Myw4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBn
ZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yID0gZmxh
Z3MuY29udGFpbnMoU2VlblRyYW5zZm9ybWVkTGF5ZXIpOwogICAgIG1faGFzM0RUcmFuc2Zvcm1l
ZEFuY2VzdG9yID0gZmxhZ3MuY29udGFpbnMoU2VlbjNEVHJhbnNmb3JtZWRMYXllcik7CiAgICAg
bV9iZWhhdmVzQXNGaXhlZCA9IGZsYWdzLmNvbnRhaW5zKFNlZW5GaXhlZExheWVyKTsKLSAgICBz
ZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxhZ3MuY29udGFpbnMoU2VlbkNvbXBv
c2l0ZWRTY3JvbGxpbmdMYXllcikpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLT5zZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmxh
Z3MuY29udGFpbnMoU2VlbkNvbXBvc2l0ZWRTY3JvbGxpbmdMYXllcikpOwogCiAgICAgLy8gVXBk
YXRlIHRoZSByZWZsZWN0aW9uJ3MgcG9zaXRpb24gYW5kIHNpemUuCiAgICAgaWYgKG1fcmVmbGVj
dGlvbikKQEAgLTEwNDMsMTMgKzEwMDQsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAg
ICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAog
ICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBt
YXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBG
SVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3Jr
IHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQ
b3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJlbmRl
cmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9v
bCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNW
aWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI5LDI3ICsxMDg1LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6
Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVj
dHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5s
YXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBn
ZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAg
Z2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5v
dCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBp
bml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNT
ZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQogdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9t
ZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
U2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5l
ZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTIwMiwxMiAr
MTEzNyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0LCB0
aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0
aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlmICht
X21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwot
ICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9s
bGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQdXNo
QW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0
b3IocGFyZW50KCkpOwpAQCAtMTY5OCw4ICsxNjI5LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZs
YWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRlcmVy
KCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3Np
bmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsK
ICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVu
Y2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBv
c2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAg
ICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3Np
dGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3Zl
cmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Ny
b2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgp
ICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKICAg
ICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3Np
dGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5l
KCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDksOCArMTY0MiwxMCBA
QCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVM
YXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVu
dC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29w
ZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9IGVs
c2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVu
dExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAg
ICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0gcGFyZW50TGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91
dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAg
ICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVu
dHNTY3JvbGxpbmdTY29wZSgpOwpAQCAtMTg0Miw5ICsxNzc3LDkgQEAgUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAgICBhdXRv
KiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50
KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVy
RWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMTg1NSwxNSArMTc5MCwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJldHVybiBv
d25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJMYXllciog
UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3Vu
ZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRvKiBhbmNl
c3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQorICAg
IGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRl
cigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFtZUJvdW5k
YXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QK
QEAgLTE4NzcsNyArMTgxMiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgaWYgKGlu
Y2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJl
ZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXll
cio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBj
cm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVy
OyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNy
b3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJs
ZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAgfQpAQCAt
MTg4NSw1MCArMTgyMCw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5h
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRl
Rml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJl
bmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBl
eGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZv
clBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0
dGluZ3MoKS5mb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRl
c3RpbmcoKTsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdUcmFuc2Zv
cm1lZEFuY2VzdG9yKCkgY29uc3QKIHsKICAgICBSZW5kZXJMYXllciogY3VyciA9IHBhcmVudCgp
OwpAQCAtMjQ1NCwxOSArMjM0NSw2IEBAIExheW91dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZy
b21BbmNlc3Rvcihjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllciwgQ29sCiAgICAgcmV0
dXJuIHRvTGF5b3V0U2l6ZShjb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3RvckxheWVyLCBMYXlv
dXRQb2ludCgpLCBhZGp1c3RGb3JDb2x1bW5zKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIGJvb2wgaXNWaXNpYmxlID0g
cmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwot
ICAgIGlmIChyZW5kZXJlcigpLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGluZ0VuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAh
aXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotICAgIHJldHVybiBpc1Zpc2libGUg
JiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyKCkuc3R5bGUoKS51c2VUb3VjaE92ZXJm
bG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJh
dGVkT3ZlcmZsb3dTY3JvbGwoKSk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiBib29sIFJlbmRlckxheWVyOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKIHsKQEAg
LTI0OTYsMjg5ICsyMzc0LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNI
X0VWRU5UUykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRl
IGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxp
bmdMYXllcigpOwotfQotCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3Zl
IG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9y
TGF5ZXIoKnRoaXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRh
KGludCBiZWdpbm5pbmdEZWx0YSkKLXsKLSAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVz
IEZpcmVmb3gncy4KLSAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNl
L3Rvb2xraXQvY29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KLSAgICBjb25zdCBpbnQg
c3BlZWRSZWR1Y2VyID0gMTI7Ci0KLSAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0Rl
bHRhIC8gc3BlZWRSZWR1Y2VyOwotICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKLSAgICAgICAg
YWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKLSAgICBlbHNlIGlmIChhZGp1
c3RlZERlbHRhIDwgLTEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+
KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEp
KSkgKyAxOwotCi0gICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
SW50U2l6ZSBhZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQotewotICAg
IHJldHVybiBJbnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVz
dGVkU2Nyb2xsRGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkKLXsKLSAgICBJ
bnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKLSAgICAKLSAgICAvLyBXZSBuZWVk
IHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91dCBvZiB0aGUg
d2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhlIHBvc2l0aW9u
IGlzIGluY29oZXJlbnQKLSAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3VzZVBvc2l0aW9u
OwotICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFzdEtub3duTW91
c2VQb3NpdGlvbi55KCkgPCAwKQotICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gcHJl
dmlvdXNNb3VzZVBvc2l0aW9uOwotICAgIGVsc2UKLSAgICAgICAgcHJldmlvdXNNb3VzZVBvc2l0
aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKLQotICAgIEludFNpemUgZGVsdGEgPSBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7Ci0KLSAgICBpZiAoYWJzKGRlbHRhLndp
ZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0aGUgY2VudGVy
IHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCi0gICAgICAgIGRlbHRhLnNldFdpZHRoKDAp
OwotICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xs
UmFkaXVzKQotICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7Ci0KLSAgICBzY3JvbGxCeVJlY3Vy
c2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKLX0KLQotLy8gRklYTUU6IHVuaWZ5
IHdpdGggdGhlIHNjcm9sbFJlY3RUb1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJM
YXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJs
ZUFyZWEqKiBzY3JvbGxlZEFyZWEpCi17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBib29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwotICAg
IGlmIChyZW5kZXJlcigpLnBhcmVudCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAg
PSAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQot
ICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5l
Q2xhbXApIHsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldCgpICsgZGVsdGE7Ci0gICAgICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7
Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0g
dGhpczsKLQotICAgICAgICAvLyBJZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2Ug
YXNrIHRoZSBuZXh0IGxheWVyIHVwIHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50
U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZz
ZXQoKTsKLSAgICAgICAgaWYgKCFyZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVu
ZGVyZXIoKS5wYXJlbnQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Ny
b2xsYWJsZSBmcmFtZXMuCi0gICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFy
ZWEpOwotCi0gICAgICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBk
YXRlQXV0b3Njcm9sbFJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICAvLyBJZiB3ZSBhcmUgaGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNh
biBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAgICAvLyBo
YXZlIGFuIG92ZXJmbG93IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBu
b2RlIHRoYXQgY2FuIGJlIHNjcm9sbGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAg
ICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwot
Ci0gICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRv
IHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihP
cHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBwbHlQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZzZXQoc2Ny
b2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVlKCkp
KTsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgp
KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24oaW50
IHksIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Ny
b2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmlt
YXRlZCkKLXsKLSAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6OlllcykKLSAgICAg
ICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihw
b3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9s
bFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUs
IGNsYW1waW5nKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Ny
b2xsT2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9s
bFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlzIDw8
ICIgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAgaWYg
KGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBpZiAoY3VycmVudFNjcm9sbEJl
aGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6OkluTm9uTmF0aXZlQW5pbWF0
aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNlbEFuaW1hdGlvbnMoKTsKLQotICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xs
T2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNl
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1
cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7
Ci0KLSAgICBpZiAoIXJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShzY3JvbGxQb3NpdGlvbkZy
b21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIHNjcm9sbFR5cGUsIGNsYW1waW5nKSkKLSAg
ICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNsYW1wZWRTY3JvbGxPZmZzZXQs
IGNsYW1waW5nKTsKLSAgICBzZXRTY3JvbGxCZWhhdmlvclN0YXR1cyhTY3JvbGxCZWhhdmlvclN0
YXR1czo6Tm90SW5BbmltYXRpb24pOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlv
dXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXRXaXRo
QW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxU
eXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3Jv
bGxUeXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KG9mZnNldCkgOiBv
ZmZzZXQ7Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0
b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCAhPSB0aGlz
LT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOwotCi0gICAgc2V0Q3VycmVudFNjcm9sbFR5
cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8o
Y29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIExPR19X
SVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXI6OnNjcm9sbFRvICIg
PDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2Vy
IHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8
ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAg
IGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhl
IGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVy
ZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBp
cyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVk
LgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50
KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0
ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKLSAgICAgICAgICAgIGlu
dCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAgICAgICAgIGlmIChzY3JvbGxY
T2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAgICAgICAgICAgICAgIHNjcm9s
bFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNl
dCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24u
eCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0
V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOwotICAg
ICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0
KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAgIGlmIChtX3Njcm9sbFBvc2l0
aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAvLyBGSVhNRTog
Tm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQg
cG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICAgICAgLy8gVGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhy
ZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVy
U2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fc2Ny
b2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5k
ZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGls
ZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0
ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXll
cnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0
aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCku
aXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlk
ZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBm
aW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xs
KCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0
aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewotICAg
ICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIg
b24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCi0gICAgICAgICAgICAv
LyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2Fs
ayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAgICAgICAgICAvLyBpbiB0aGlz
IGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUg
Y29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxl
dGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAg
ICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlvbiBvZiBh
IGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6LW9yZGVy
KSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxrIGZyb20g
dGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBhaW50UGFy
ZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50
LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3Jv
bGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgotICAgICAg
ICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lv
bnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChyZW5kZXJlcigpLmZy
YW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyKCkuZnJhbWUoKTsK
LSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIo
KS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVlZHMgdG8g
YmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBh
aW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyKCkucmVw
YWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyKCkuY2xpcHBlZE92ZXJm
bG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0KLSAgICBGbG9hdFF1YWQgcXVh
ZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7Ci0gICAg
aWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQg
PSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VN
b3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92
ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLQotICAgIGJvb2wg
cmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAg
ICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgp
OwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCktPm5lZWRzUmVwYWludE9uQ29t
cG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJl
cGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNSZXBhaW50KQotICAgICAgICBy
ZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9y
UmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRl
ZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVt
ZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9sbEV2ZW50
VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAg
dmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLQotICAgIHZpZXcuZnJh
bWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5y
ZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBmcmFt
ZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBmcmFtZUVs
ZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsKICAgICAvLyBJZiBzY3JvbGxiYXJz
IGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KQEAgLTI4MjMs
NyArMjQxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3Qg
TGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAKICAgICBMYXlvdXRSZWN0IG5l
d1JlY3QgPSBhYnNvbHV0ZVJlY3Q7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLSAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwor
ICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKIAogICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3Jv
bGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IpCiAg
ICAgewpAQCAtMjgzMyw2ICsyNDI4LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9
OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8g
RG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0
ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3
aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBp
biBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAt
Mjg0MywyNCArMjQ0MCwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBi
b3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxl
IGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+
Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAg
IC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwg
dGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAg
ICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28g
dGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0
aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQo
LXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VS
ZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRz
KDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAg
ICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xs
UGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlv
dXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhw
b3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0
KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9s
ZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgYXV0byBhbmltYXRl
ZCA9IHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBvcHRpb25zLmJlaGF2
aW9yKTsKLSAgICAgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3Jv
bGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNl
dDsKLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJl
bmNlKTsKLSAgICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zv
cm1zKS5ib3VuZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQg
PSBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKG9wdGlvbnMuYmVoYXZpb3Is
IHJldmVhbFJlY3QsIGxvY2FsRXhwb3NlUmVjdCkpCisgICAgICAgICAgICBuZXdSZWN0ID0gcmVz
dWx0LnZhbHVlKCk7CiAgICAgfSBlbHNlIGlmICghcGFyZW50TGF5ZXIpIHsKICAgICAgICAgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQgPSByZW5kZXJlcigpLmRvY3VtZW50KCku
b3duZXJFbGVtZW50KCk7CiAKQEAgLTI4NzQsNyArMjQ2NCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29s
IGluc2lkCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBhc3NlcnRpb24gZmlyZXMgd2UgbmVl
ZCB0byBwcm90ZWN0IHRoZSBvd25lckVsZW1lbnQgZnJvbSBiZWluZyBkZXN0cm95ZWQuCiAgICAg
ICAgICAgICAgICAgU2NyaXB0RGlzYWxsb3dlZFNjb3BlOjpJbk1haW5UaHJlYWQgc2NyaXB0RGlz
YWxsb3dlZFNjb3BlOwogCi0gICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZy
YW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7
CisgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCB2aWV3UmVjdCA9IGZyYW1lVmlldy52aXNpYmxl
Q29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3Qp
OwogCiAgICAgICAgICAgICAgICAgYXV0byogZWxlbWVudCA9IG93bmVyRWxlbWVudC0+Y29udGVu
dERvY3VtZW50KCkgPyBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKSA6IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiByZW5kZXJlciA9
IGVsZW1lbnQgPyBlbGVtZW50LT5yZW5kZXJCb3goKSA6IG51bGxwdHI7CkBAIC0yOTUxLDIzICsy
NTQxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlv
dXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgcGFyZW50TGF5ZXItPnNj
cm9sbFJlY3RUb1Zpc2libGUobmV3UmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMpOwogfQogCi12
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKLXsK
LSAgICBpZiAoY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7Ci0g
ICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWlu
IGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAotICAgICAgICAvLyByZXBvc2l0
aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCi0gICAgICAg
IGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9IHN0YWNraW5nQ29udGV4dCgp
LT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKLSAgICAgICAgICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKQotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVD
b21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9s
bCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBw
b3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxpbmcuCi0gICAgICAgICAgICAgICAgY29t
cG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJh
cmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgICAgIGNvbXBvc2l0b3IoKS51cGRhdGVDb21w
b3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogTGF5b3V0
UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbnN0IExheW91dFJlY3QmIHZpc2li
bGVSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBleHBvc2VSZWN0LCBib29sIGluc2lkZUZpeGVkLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGln
blkpIGNvbnN0CiB7CiAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKQEAgLTMxMTQsNyArMjY4Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJl
c2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0U2l6ZSYgb2xk
T2ZmCiAgICAgZWxlbWVudC0+c2V0TWluaW11bVNpemVGb3JSZXNpemluZyhtaW5pbXVtU2l6ZSk7
CiAgICAgCiAgICAgTGF5b3V0U2l6ZSBhZGp1c3RlZE9sZE9mZnNldCA9IExheW91dFNpemUob2xk
T2Zmc2V0LndpZHRoKCkgLyB6b29tRmFjdG9yLCBvbGRPZmZzZXQuaGVpZ2h0KCkgLyB6b29tRmFj
dG9yKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgp
KSB7CisgICAgaWYgKHJlbmRlcmVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkpIHsKICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKC1uZXdPZmZzZXQud2lkdGgo
KSk7CiAgICAgICAgIGFkanVzdGVkT2xkT2Zmc2V0LnNldFdpZHRoKC1hZGp1c3RlZE9sZE9mZnNl
dC53aWR0aCgpKTsKICAgICB9CkBAIC0zMTQzLDEwNzQgKzI3MTYsMTUyIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnJlc2l6ZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCwgY29uc3QgTGF5b3V0
U2l6ZSYgb2xkT2ZmCiAgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkg
LyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAgfQogICAgICAgICBM
YXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdC
b3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgp
KTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwotICAgICAg
ICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0
LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7Ci0KLSAg
ICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhl
IHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBp
biB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXI6OnNjcm9sbGlu
Z05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNj
cm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6
OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAg
IGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgewotICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+aGFuZGxl
V2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnZp
c2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25z
dAotewotICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7Ci0gICAgaWYgKHNob3dzT3ZlcmZsb3dD
b250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKLSAg
ICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKLSAgICAKLSAgICBh
dXRvIHZpc2libGVTaXplID0gdGhpcy0+dmlzaWJsZVNpemUoKTsKLSAgICByZXR1cm4geyBzY3Jv
bGxQb3NpdGlvbigpLCB7IHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxi
YXJTcGFjZS53aWR0aCgpKSwgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3Jv
bGxiYXJTcGFjZS5oZWlnaHQoKSkgfSB9OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvdmVy
aGFuZ0Ftb3VudCgpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlm
ICghcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVn
aW9uc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIEludFNpemUg
c3RyZXRjaDsKLQotICAgIC8vIEZJWE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNldCgpLCBvciBq
dXN0IG1vdmUgdGhpcyB0byBTY3JvbGxhYmxlQXJlYS4KLSAgICBTY3JvbGxPZmZzZXQgc2Nyb2xs
T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkpOwotICAg
IGF1dG8gcmVhY2hhYmxlU2l6ZSA9IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCk7Ci0gICAg
aWYgKHNjcm9sbE9mZnNldC55KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3Jv
bGxPZmZzZXQueSgpKTsKLSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdodCgpICYmIHNj
cm9sbE9mZnNldC55KCkgPiByZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgp
KQotICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0gKHJlYWNoYWJs
ZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIGlmIChzY3JvbGxPZmZz
ZXQueCgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpKTsK
LSAgICBlbHNlIGlmIChyZWFjaGFibGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+
IHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKQotICAgICAgICBzdHJldGNo
LnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpKTsKLQotICAgIHJldHVybiBzdHJldGNoOwotI2Vsc2UKLSAgICByZXR1cm4g
SW50U2l6ZSgpOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gcGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Ci19
Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAotewotICAg
IHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXI7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KHJlbmRlcmVyKCkuaXNCb3goKSk7Ci0gICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNF
bXB0eSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHNjcm9sbGJhclJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVj
dDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotCi0gICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0Nv
bnRhaW5pbmdWaWV3KCZyZW5kZXJlcigpLCByZWN0KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXll
cjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAotewotICAgIEludFJl
Y3QgcmVjdCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRSZWN0KTsKLSAgICByZWN0Lm1v
dmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVjdDsKLX0KLQot
SW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBv
aW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7Ci0gICAg
cG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdW
aWV3KCZyZW5kZXJlcigpLCBwb2ludCk7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBw
b2ludCA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7Ci0gICAgcG9pbnQubW92
ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiBwb2ludDsKLX0KLQot
SW50U2l6ZSBSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUoKSBjb25zdAotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybiBJbnRT
aXplKCk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZShyb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgo
KSksIHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSkpOwotfQotCi1JbnRTaXplIFJlbmRl
ckxheWVyOjpjb250ZW50c1NpemUoKSBjb25zdAotewotICAgIHJldHVybiBJbnRTaXplKHNjcm9s
bFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6cmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEludFNpemUgY29udGVudHNT
aXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWlu
KGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKLQotICAgIGlm
ICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAgICAgICAgY29udGVudHNTaXpl
LnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCku
aGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBjb250ZW50c1NpemU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVh
c29uIHJlYXNvbikKLXsKLSAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVD
aGFuZ2VkKHJlYXNvbik7Ci0KLSAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VS
ZWFzb246OlNjcm9sbGJhcnNDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIo
KSkuc2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOwotICAgICAgICByZW5kZXJl
cigpLnNldE5lZWRzTGF5b3V0KCk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlckxheWVyOjpzaG91
bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Ci19
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkU3RhcnRT
Y3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93
U2Nyb2xsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCgpCi17Ci0gICAg
cGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xsKCk7Ci19Ci0gICAg
Ci12b2lkIFJlbmRlckxheWVyOjpkaWRVcGRhdGVTY3JvbGwoKQotewotICAgIC8vIFNlbmQgdGhp
cyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGwsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAg
c2VsZWN0aW9uIHVwZGF0ZWQuCi0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91
dChDaHJvbWVDbGllbnQ6OlNjcm9sbCk7Ci19Ci0jZW5kaWYKLQotSW50UG9pbnQgUmVuZGVyTGF5
ZXI6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3
KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxp
bmdXaGVlbEV2ZW50KCk7Ci19Ci0KLVJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBS
ZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKLSAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUg
dGhlIGJvcmRlciBib3guCi0gICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xs
YmFyKCkpOwotCi0gICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8g
bV9oQmFyLT5oZWlnaHQoKSA6IDA7Ci0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0g
bV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKLQotICAgIGF1dG8gaXNOb25PdmVybGF5U2Ny
b2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKLSAgICB9Owot
Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJs
YXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGlj
YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICBi
b29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Ci0gICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci0gICAgYm9vbCBzY3JvbGxiYXJz
QXZvaWRDb3JuZXIgPSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVO
b25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxi
YXIpKTsKLQotICAgIEludFNpemUgY29ybmVyU2l6ZTsKLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKSB7Ci0gICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0
aGUgY29ybmVyIGlzIHNxdWFyZS4KLSAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgewotICAg
ICAgICAgICAgdmVydGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgg
OiBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LAotICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodCA/IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVz
dWx0OwotCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxv
d0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhi
YXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOwotICAgICAgICBpZiAo
c2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Ci0gICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNj
cm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhi
YXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDApOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0Owot
ICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3Jv
bGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVk
Z2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOwotCi0gICAgICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0
KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwotCi0gICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9s
bGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNp
emUgY29ybmVyU2l6ZSkgewotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhl
TGVmdCkgewotICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250
cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJu
IEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAt
IGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1h
eFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKLSAgICB9OwotCi0gICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNv
cm5lclJlY3QoY29ybmVyU2l6ZSk7Ci0KLSAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKLSAgICAgICAg
aWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0g
cmVzdWx0LnNjcm9sbENvcm5lcjsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHNj
cm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNr
bmVzcygpOwotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xs
YmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJP
ZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Ci17Ci0gICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92
QmFyLmdldCgpKQotICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV9oQmFyLmdldCgpKQot
ICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRp
b24oKSk7Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHsgfTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJm
bG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0g
bV92QmFyLmdldCgpKSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpv
bnRhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
YXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotICAgIC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGlu
dG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmVwYWludC4KLSAgICBpZiAoIWJveC0+
cGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAg
ICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFs
U2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotCi0gICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNj
cm9sbFJlY3Q7Ci0gICAgcmVuZGVyQm94KCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVj
dCk7Ci0gICAgcmVuZGVyZXIoKS5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENv
cm5lcigpKSB7Ci0gICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAg
IG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotICAgIGlmIChtX3Jlc2l6
ZXIpCi0gICAgICAgIG1fcmVzaXplci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLX0KLQotc3Rh
dGljIGJvb2wgc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsK
LSAgICByZXR1cm4gc2Nyb2xsYmFyICYmIHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Ci19
Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Ny
b2xsYmFyKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZl
cnRpY2FsU2Nyb2xsYmFyKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQotewot
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7Ci0gICAgICAg
IGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jv
b3QoKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290
TW9kZTo6VXNlckFnZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0
KCktPnJlbmRlcmVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVy
OwotfQotCi1SZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllcjo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdp
ZGdldDsKLSAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSkpOwotICAg
IGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkp
OwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFjdHVh
bFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHlsZSgp
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwotICAgIGlmIChoYXNDdXN0b21T
Y3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVD
dXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+KGFj
dHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOwotICAgIGVsc2UgewotICAgICAgICB3aWRnZXQgPSBT
Y3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNjcm9s
bGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKLSAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdpZGdl
dC5nZXQoKSwgb3JpZW50YXRpb24pOwotICAgICAgICBpZiAocGFnZSgpLmlzTW9uaXRvcmluZ1do
ZWVsRXZlbnRzKCkpCi0gICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRU
ZXN0TW9uaXRvcihwYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwotICAgIH0KLSAgICBy
ZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKLSAgICByZXR1
cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmRlc3Ry
b3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVm
UHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7Ci0gICAgaWYgKCFzY3JvbGxiYXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghc2Nyb2xsYmFyLT5pc0N1c3RvbVNjcm9sbGJhcigpKQotICAgICAg
ICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJhci5nZXQoKSwgb3JpZW50YXRpb24pOwotCi0g
ICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgc2Nyb2xsYmFyID0gbnVsbHB0
cjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKLXsKLSAg
ICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnNjcm9sbHNPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpv
bnRhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFy
KSB7Ci0gICAgICAgIG1faEJhciA9IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkg
ZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5y
dWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFz
dGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKLSNlbmRp
ZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNh
biBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5lZWQgdG8g
dXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBpZiAobV9oQmFyKQot
ICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAg
IG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQotewotICAgIGlmIChoYXNTY3JvbGxi
YXIgPT0gaGFzVmVydGljYWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGlj
YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xs
RWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/
IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAg
ICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5
KTsKLSNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGlj
YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xs
YWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9u
ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUg
YmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gIFdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KLSAgICBpZiAobV9o
QmFyKQotICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGFibGVBcmVhKiBSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAotewotICAgIGlmIChhdXRv
KiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxhYmxlTGF5ZXI7Ci0KLSAgICByZXR1cm4gJnJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlQm94KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQW5jZXN0b3IoKQotewotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMp
OyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCpu
ZXh0TGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7Ci0gICAgICAgIGlmIChuZXh0
TGF5ZXItPmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnVz
ZURhcmtBcHBlYXJhbmNlKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlU25hcE9mZnNldHMoKQotewotICAgIC8vIEZJWE1FOiBFeHRl
bmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1lbnRzLgotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+
KGVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIWVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckJveCogYm94ID0gZW5jbG9zaW5nRWxlbWVu
dCgpLT5yZW5kZXJCb3goKTsKLSAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJlY3QoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAotewotICAg
IGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1h
dG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYKLQotYm9vbCBSZW5kZXJM
YXllcjo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIERlcHJl
Y2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkgY29uc3QKLXsKLSAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuYWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVidWcsICJSZW5kZXJM
YXllcjogIiArIG1lc3NhZ2UpOwotfQotCi1TdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVy
LmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhl
aWdodCgpKTsKLQotICAgIGlmICh0cmFuc2Zvcm0oKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiBoYXMgdHJhbnNmb3JtIl9zKTsKLQotICAgIGlmIChoYXNGaWx0ZXIoKSkKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCYWNrZHJvcEZpbHRl
cigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwot
Ci0gICAgaWYgKGhhc0JsZW5kTW9kZSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBi
bGVuZCBtb2RlIl9zKTsKLQotICAgIGlmIChpc29sYXRlc0JsZW5kaW5nKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaXNvbGF0ZXMgYmxlbmRpbmciX3MpOwotCi0gICAgaWYgKGlzQ29tcG9z
aXRlZCgpKSB7Ci0gICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3Ry
ZWFtIGludGVncmF0aW9uLgotICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKLSAgICAgICAgc3Ry
ZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0u
cmVsZWFzZSgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQot
Ci1pbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV92QmFyCi0gICAg
ICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV92QmFyLT5pc092
ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOwotfQotCi1pbnQgUmVu
ZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVS
ZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAotewotICAgIGlmICghbV9oQmFyCi0gICAgICAgIHx8
ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQotICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlT
Y3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8
ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2lu
dCkgY29uc3QKLXsKLSAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkucmVzaXplcjsKLSAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCkgOiBy
ZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgIHJldHVybiBsb2NhbFBvaW50IC0gcmVz
aXplQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8
fCByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zm
c2V0RnJvbVJvb3QpCi17Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXpl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmVuZGVyQm94KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAg
IGlmIChtX3ZCYXIpIHsKLSAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZz
ZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICByZWN0
cy5ob3Jpem9udGFsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX2hC
YXItPnNldEZyYW1lUmVjdChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJl
Y3QocmVjdHMuc2Nyb2xsQ29ybmVyKTsKLQotICAgIGlmIChtX3Jlc2l6ZXIpCi0gICAgICAgIG1f
cmVzaXplci0+c2V0RnJhbWVSZWN0KHJlY3RzLnJlc2l6ZXIpOwotfQotCi1pbnQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJM
YXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS53aWR0aCgpOwotfQotCi1pbnQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgp
KTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29s
dXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUuaGVpZ2h0KCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93VG9wKCkgY29uc3QKLXsKLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Ci19Ci0KLUxheW91dFVuaXQg
UmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1
dGVTY3JvbGxEaW1lbnNpb25zKCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIEFTU0VSVChib3gpOwotCi0gICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSBmYWxz
ZTsKLQotICAgIG1fc2Nyb2xsU2l6ZS5zZXRXaWR0aChyb3VuZFRvSW50KG92ZXJmbG93UmlnaHQo
KSAtIG92ZXJmbG93TGVmdCgpKSk7Ci0gICAgbV9zY3JvbGxTaXplLnNldEhlaWdodChyb3VuZFRv
SW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKSk7Ci0KLSAgICBpbnQgc2Nyb2xs
YWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRl
ckxlZnQoKSk7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxl
ZnQoKSkKLSAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCk7Ci0gICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3Zl
cmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwotICAgIHNldFNjcm9sbE9yaWdpbihJbnRQ
b2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOwot
ICAgIAotICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCkKLXsKLSAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8
fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIHJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dY
KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIHJlbmRlckJv
eCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc0hvcml6
b250YWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94
KCktPmNsaWVudFdpZHRoKCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
LQotICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQocmVuZGVyQm94KCktPmNs
aWVudEhlaWdodCgpKTsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0g
ICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jp
em9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsK
LSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikg
JiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0
c0xpa2VBdXRvOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQot
ewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6
SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZ
KCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92
ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxi
YXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwot
ICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFj
dHNMaWtlQXV0bzsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIEFTU0VS
VChib3gpOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5
IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBi
b29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygp
OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZs
b3coKTsKLQotICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdl
IGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KLSAgICBpZiAobV9oQmFyICYmIHN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0g
ICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUo
KSwgVmVydGljYWxTY3JvbGxiYXIpKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVy
dGljYWxPdmVyZmxvdyk7Ci0KLSAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBt
YXkgbmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92
ZWQuCi0gICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hv
cml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGJvb2wgYXV0b1ZlcnRpY2Fs
U2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2
aW9yKCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7
Ci0KLSAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNh
bFNjcm9sbEJhckNoYW5nZWQpIHsKLSAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICAgICAgaWYgKGJveC0+aGFzVmVydGlj
YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgICAgICB1cGRhdGVTZWxmUGFp
bnRpbmdMYXllcigpOwotCi0gICAgICAgIHJlbmRlcmVyKCkucmVwYWludCgpOwotCi0gICAgICAg
IGlmIChyZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwg
cmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Ci0gICAgICAgICAgICAgICAgbV9p
bk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyKCkuc2V0
TmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVy
QmxvY2s+KHJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBi
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFu
Z2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKLSAgICAgICAgICAgICAgICAgICAg
YmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmVyKCkubGF5b3V0KCk7Ci0gICAgICAgICAgICAgICAgbV9pbk92
ZXJmbG93UmVsYXlvdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlcigpLnBhcmVudCgpOwot
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVy
KCkuaXNCb3goKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJl
bnQpLT5jbGVhckNhY2hlZE1haW5TaXplRm9yQ2hpbGQoKnJlbmRlckJveCgpKTsKLSAgICB9Ci0K
LSAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCi0gICAg
aWYgKG1faEJhcikgewotICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+
Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0
ZXAoY2xpZW50V2lkdGgpOwotICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX2hCYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsU2l6ZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgaWYgKG1f
dkJhcikgewotICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVu
dEhlaWdodCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChj
bGllbnRIZWlnaHQpOwotICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwotICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24o
Y2xpZW50SGVpZ2h0LCBtX3Njcm9sbFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQotLy8gVGhpcyBpcyBjYWxsZWQg
ZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVwZGF0ZUxheWVyUG9zaXRpb25zKS4KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOwotICAgIFNjcm9sbE9mZnNldCBvcmln
aW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotCi0gICAgY29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKLSAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwotCi0jaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUg
YWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAotICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzKCk7Ci0jZW5kaWYKLQotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVl
KCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9ncmVz
cygpKSB7Ci0gICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52YWxp
ZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCi0gICAgICAgIC8vIHRvIHB1
bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVwIHRv
IHRoZSBtaW4pLgotICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNs
YW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVzdCBt
b2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBvaW50
cy4KLSAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hlcmUg
dGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUgcmln
aHQgZWRnZQotICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVyZmxv
d2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3JlIGRl
dGFpbHMuCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
LSNlbmRpZgotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQo
KSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwotCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCgpOwotCi0gICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9m
ZnNldCgpKQotICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQo
c2Nyb2xsT2Zmc2V0KCkpKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICBz
ZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0TmVlZHNDb21w
b3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsKKyAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VI
ZWlnaHQgLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZm
ZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CiAgICAgfQogCi0gICAgaWYg
KGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0
Q29tcG9zaXRpbmdVcGRhdGUoKTsKKyAgICBkb2N1bWVudC51cGRhdGVMYXlvdXQoKTsKIAotICAg
IHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgIC8vIEZJWE1FIChSYWRhciA0MTE4NTY0KTog
V2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2FyeSB0byBrZWVw
IHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLWJvb2wgUmVuZGVyTGF5
ZXI6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVj
dCkgY29uc3QKK1JlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKIHsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAotICAgIGlm
IChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwor
ICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Cisg
ICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3Zl
cmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5w
YWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKIAotICAgIGlmIChyZWN0cy52ZXJ0
aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVl
OworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZl
UmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAK
LSAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworICAgIGF1
dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9t
TGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3Ju
ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngo
KSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJT
aXplIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJT
aXplIH07CisgICAgfTsKIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAg
ICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Ny
b2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7
IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgIH0KIAotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIFJlbmRlckxheWVy
OjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAorU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8v
IE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAg
cmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBo
ZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNp
emUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KKyAgICBpZiAodHJhbnNmb3JtKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRy
YW5zZm9ybSJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKLXsK
LSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgotICAgIGlm
ICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChoYXNGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgZmlsdGVyIl9zKTsK
IAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMg
YmFja2Ryb3AgZmlsdGVyIl9zKTsKIAotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBp
biBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwg
cGFpbnQKLSAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBu
b3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxs
IGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRo
ZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRl
ZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVl
IHRvIHJ1biwKLSAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4g
dGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25k
IHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCBy
aWdodC4KLSAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpIHsKLSAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFp
bnRPZmZzZXQ7Ci0KLSAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNv
bmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYg
KChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYg
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFt
Z2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJv
bHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5k
IG1vZGUiX3MpOwogCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBlbmNsb3Np
bmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFpbnRpbmdSb290KQotICAgICAg
ICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKTsKKyAgICBpZiAo
aXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJs
ZW5kaW5nIl9zKTsKIAotICAgICAgICBwYWludGluZ1Jvb3QtPnNldENvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycyh0cnVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChpc0NvbXBvc2l0
ZWQoKSkgeworICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVh
bSBpbnRlZ3JhdGlvbi4KKyAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07CisgICAgICAgIHN0cmVh
bSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJl
bGVhc2UoKSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9p
ZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5n
T3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0g
ICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwotCi0gICAgLy8gTW92ZSB0aGUg
c2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBhbmQgcmVz
aXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdpZGdldHMg
Y2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hlbiB5b3Ug
c2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0aW9uZWQg
ZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUoYWRqdXN0
ZWRQYWludE9mZnNldCkpOwotCi0gICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0aGUgc2Nyb2xs
YmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgotICAgIGlmIChtX2hCYXIg
JiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBtX2hCYXItPnBhaW50
KGNvbnRleHQsIGRhbWFnZVJlY3QpOwotICAgIGlmIChtX3ZCYXIgJiYgIWxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0
KTsKLQotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBh
IHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8v
IGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXpl
ciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBw
YWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Cisg
ICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYg
cGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCitJbnRTaXplIFJlbmRlckxh
eWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBj
b25zdAogewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBh
YnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMo
ZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb250ZXh0LmludmFsaWRh
dGluZ0NvbnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKLSAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQs
IGFic1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ug
d2UgbmVlZAotICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KLSAgICBpZiAoIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkpCi0gICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50
U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworICAgIGF1dG8gcmVzaXplclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29ybmVyID0g
cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBy
ZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIo
KTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCitpbnQgUmVuZGVyTGF5ZXI6
OnNjcm9sbFdpZHRoKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lcklt
YWdlOwotICAgIEZsb2F0U2l6ZSBjb3JuZXJSZXNpemVyU2l6ZTsKLSAgICBpZiAocmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgewotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsK
LSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOwotICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAg
ICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVm
KCkpOwotICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7
Ci0gICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsK
LSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9s
bGFibGVBcmVhLT5zY3JvbGxXaWR0aCgpOwogCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXpl
clNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3Qu
aGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQu
c2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1h
Z2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRl
eHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVz
aXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1h
eFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCBy
ZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5k
cmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIFJlbmRlckJveCog
Ym94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVy
Zmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9J
bnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwogfQogCi12b2lkIFJl
bmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCitp
bnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91dFJl
Y3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1v
dmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRh
bWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRp
bmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1f
cmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1Jl
Y3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXplcklt
YWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkK
KyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEhlaWdodCgpOwogCi0gICAg
Ly8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhl
cmUgYXJlIGFueSBzY3JvbGxiYXJzIHByZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNs
dWRlIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFo
YXNPdmVybGF5U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBH
cmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNv
bnRleHQuY2xpcChyZXNpemVyQWJzUmVjdCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29y
bmVyID0gcmVzaXplckFic1JlY3Q7Ci0gICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91
dFNpemUobGFyZ2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkg
KyAxX2x1KSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4g
eyAyMTcsIDIxNywgMjE3IH0pOwotICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygx
LjBmKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwotICAgICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5l
cikpOwotICAgIH0KKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VS
VChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dS
ZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhZKCkgLSBvdmVy
Zmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29u
dHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdAordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
U2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKIHsKLSAgICBpZiAoIWNhblJlc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVz
aXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVh
KCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KQorYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXpl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEtPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CiAKLSAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwotICAgIGlmIChy
ZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7Ci0gICAgICAgIGlm
IChyZWN0cy5yZXNpemVyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVz
dCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBhc3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQu
Ci0gICAgaWYgKG1fdkJhciAmJiBtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5n
KCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2Fs
UG9pbnQpKSB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KK2Jvb2wgUmVuZGVy
TGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJsYXlTY3Jv
bGxiYXJzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG1faEJhciAmJiBtX2hC
YXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3Io
KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3Jv
bGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
SW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIWNh
blJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwgT3B0aW9u
U2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBh
aW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1cml0eU9y
aWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2ZW50UmVn
aW9uQ29udGV4dCkKQEAgLTQyMjgsMTcgKzI4NzksNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWlu
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3Qs
CiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCi12b2lk
IFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKLXsKLSAg
ICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50
UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFp
bnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXll
ckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRv
UmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBw
YWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBjb25z
dCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxlKQogewog
ICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCk7CkBAIC00MjYxLDcgKzI5MDEsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpj
bGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRpdGlvbiBm
b3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVyZmxvdyBv
YmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc28gd2Ug
Y2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHJ1bGUg
PT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxheWVyOyBs
YXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3Iu
Y29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkg
JiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBib29sIHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpD
b21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGF5
ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJlbmRlcmVyKCkuc3R5
bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNvbnRhaW5pbmdCbG9j
a0NoYWluKCpsYXllcikpIHsKQEAgLTQ3NjYsOCArMzQwNywxMCBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXll
clBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1
cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Ny
b2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRz
KGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAg
ICAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgaWYgKGlzUGFpbnRpbmdP
dmVybGF5U2Nyb2xsYmFycyAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxiYXJzKCkpCisg
ICAgICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJh
Z21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2Fs
bGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlSZWN0IHdhcyByZXNl
dCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MjM3LDExICszODgwLDEzIEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZs
b3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVu
dHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxv
Y2FsUGFpbnRpbmdJbmZvKQogeworICAgIEFTU0VSVChtX3Njcm9sbGFibGVBcmVhKTsKKwogICAg
IGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgewogICAgICAgICBp
ZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwg
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMo
Y29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3Vu
ZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5z
dWJwaXhlbE9mZnNldCkpLAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludE92ZXJmbG93
Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQu
bGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50
aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAogICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJh
Z21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAgICAgICAgIHJlc3RvcmVDbGlw
KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CiAg
ICAgfQpAQCAtNTI4MCw3ICszOTI1LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgogICAgICAg
ICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsK
ICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxheW91dFZpZXdwb3J0
UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0
KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJ
T1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNl
Y3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9s
bGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAgICAgfQogCiAgICAg
UmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIG51bGxwdHIsIHJl
cXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UpOwpAQCAt
NTUxMSw3ICs0MTU2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIo
UmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgb2Zmc2V0
RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludDsK
LSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZy
YWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAgIGlmIChjYW5SZXNp
emUoKSAmJiBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhpdFRlc3RSZXNp
emVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2lu
dCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9j
YWxQb2ludCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTU1ODYsMzUgKzQyMzEs
NiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0
aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlmIChsYXll
ckZyYWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
Ym9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IElu
dFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgewotICAg
ICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5t
aW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAg
ICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9m
ZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0s
IHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUgb2Zmc2V0
RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXpl
clJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVu
dEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXpl
clJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAgZm9yIChp
bnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
IGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Ci0g
ICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQo
c25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKLSAg
ICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0
aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJv
dW5kZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQ
b2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0
aW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRy
YW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJM
YXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBAIC02MDc2
LDcgKzQ2OTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBz
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZWN0Lm1vdmVCeSgtbV9zY3JvbGxhYmxl
QXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJlY3QuaW50ZXJz
ZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlv
dXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9y
LgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYzNzQsMjEgKzQ5OTEsNiBAQCBi
b29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAgICAgcmV0dXJuIG1f
YmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1HcmFwaGljc0xheWVy
KiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9i
YWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFw
aGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkg
OiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNmb3JtKE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogewogICAgIGJvb2wg
cGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygpLT5wYWludHNJbnRv
V2luZG93KCk7CkBAIC02NDE5LDExICs1MDIxLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxk
QXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgT3AK
ICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxhZzo6UGFpbnRpbmdD
b21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsc092ZXJm
bG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9vbCBSZW5kZXJMYXll
cjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxv
Y2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFz
U2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NjY0LDcgKzUyNjEsNyBAQCBib29s
IFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdAogICAgIGlmICgh
aGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29u
dHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5k
KCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dD
b250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBh
aW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzQsNyArNTI3MSw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVl
c3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5k
ZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygp
KSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChtX3Njcm9sbGFi
bGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAg
ICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2OTks
MzggKzUyOTYsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRl
ZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBoYXNOb25FbXB0eUNo
aWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewot
ICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0g
Ym94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+
c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQg
aW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21h
dGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hv
cml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpv
bnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0
eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNh
bFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9s
bGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZl
cnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCks
IFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVk
c0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRz
VmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpz
Y3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQu
Ci0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1l
bmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6
b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92
ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAg
IG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0
aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAg
bV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQot
CiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNo
b3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzUxLDYgKzUzMTYsOCBAQCB2b2lkIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNp
YmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxv
Z2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0Lgog
ICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc2MiwxOCArNTMyOSwxNCBAQCB2b2lkIFJlbmRlckxh
eWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0
byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hh
bmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVl
KCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhh
dmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1
ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRo
aXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxz
ZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotCi0gICAgdXBk
YXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1h
cnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMg
Y2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0byBy
ZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAg
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODgsMTMgKzUzNTEsOCBAQCB2b2lkIFJl
bmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRl
Y3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJz
YSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAg
ICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAg
IHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0
ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVu
ZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODE1LDk4ICs1MzczLDYg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAgIEZyYW1l
VmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBi
b29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygp
OwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1l
KCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+
cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwot
Ci0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRl
c3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFTU0VSVCht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxl
QXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAo
IW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3Zl
ZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBm
cmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFi
bGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJh
dGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBh
Y2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgot
ICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVt
b3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVy
U3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJG
b3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
eyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkg
OiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3Ju
ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIp
IHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwotICAgICAg
ICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQot
ICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAg
bV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBt
X3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVy
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRy
KTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVy
ZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIg
PSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2Fj
aGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0
eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBjbGVhclJl
c2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7
Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+
KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBG
SVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAg
ICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+
aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5
bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6
ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNp
emVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQog
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAg
IHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpA
QCAtNjk4OCw2ICs1NDU0LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJz
KCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgYm9v
bCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNs
ZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVy
c0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsKQEAgLTcwMDQs
NiArNTQ5MCwyOSBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNo
YW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygp
OwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCkKK3sK
KyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpIHsKKyAgICAgICAgY2xlYXJMYXll
clNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBi
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOworICAgIGlmICghYm94LnJlcXVp
cmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBjbGVhckxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKKworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y3JlYXRlT3JE
ZXN0cm95TWFycXVlZSgpOworICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlclN0eWxlQ2hhbmdlKG51bGxwdHIpOworICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7
CisKKyAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUo
KTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgp
CiB7CiAgICAgLy8gUmVuZGVyTGF5ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0byByZW5kZXIgdGhl
IGZpbHRlcnMgaW4gc29mdHdhcmUgbW9kZSwKQEAgLTcwMzgsNyArNTU0Nyw3IEBAIHN0YXRpYyBS
ZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRlckxheWVyJiBsYXll
cikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkpCiAgICAgICAgIHJldHVy
biBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7
CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9v
bCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25z
dApAQCAtNzA2MCw2ICs1NTY5LDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNpbXVsYXRlRnJlcXVl
bnRQYWludCgpCiAgICAgU2luZ2xlUGFpbnRGcmVxdWVuY3lUcmFja2luZyB7IG1fcGFpbnRGcmVx
dWVuY3lUcmFja2VyLCBwYWdlKCkubGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFtcCgpIH07CiB9
CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJl
YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKICNp
ZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgUmVuZGVyTGF5ZXI6OkV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHJlYXNvbikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggYTE1ZDUxYmZmZjVj
Li44OTlhYWU2MzQ1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAg
SWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNj
YXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTUxLDcgKzUyLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJT
Y3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVu
ZGVyTGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwogY2xhc3MgUmVu
ZGVyTGF5ZXJGaWx0ZXJzOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIGNsYXNz
IFJlbmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwogY2xhc3MgUmVuZGVyU2Nyb2xs
YmFyUGFydDsKQEAgLTE0MywxNyArMTQ0LDIxIEBAIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxl
T3B0aW9ucyB7CiB1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OwogCiBERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7Ci1jbGFzcyBSZW5kZXJM
YXllciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciA6
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIHB1YmxpYzoKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5
ZXJGaWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiAgICAgZnJp
ZW5kIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTsKIAogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJlbmRlckxh
eWVyTW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisgICAgV0VC
Q09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBlbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IC8vIENhbGxlZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVu
IG51bGxlZCBvdXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyMjgs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBm
bGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGRlc3Ryb3koKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBm
bGFncyBwcm9wYWdhdGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBj
bGFzcyBDb21wb3NpdGluZyB7CkBAIC00MTEsOCArNDE5LDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwogCi0gICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFy
cXVlZS5nZXQoKTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dp
bmRvdygpIGNvbnN0OwpAQCAtNDMzLDEwNyArNDM5LDI4IEBAIHB1YmxpYzoKIAogICAgIExheW91
dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgp
KTsgfQogCi0gICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNp
emUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3Rh
bENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29u
c3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxG
cm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZv
ciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xs
QnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3Jv
bGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xs
ID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5
LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBB
bmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
ID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3Jv
bGw6Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2
b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQo
eCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7
IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAg
ICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlv
bj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwot
CiAgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3Jv
bGxhYmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBs
YXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xs
YWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lkIGF2
YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5h
bDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGlu
YXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJz
b2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0
aW9ucyYpOwogCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhh
c1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9s
bGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJv
b2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVu
dGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24p
OwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9y
aXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRh
bFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2Fs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJs
ZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhv
cml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0K
LSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxp
bmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRh
dGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBib29sIHJlcXVpcmVzU2Nyb2xs
UG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBt
X3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxp
YXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZp
bmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRVcGRhdGVT
Y3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxh
eWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVy
IHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCiAgICAgYm9vbCBjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhl
cmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJl
IHVwLXRvLWRhdGUpLgotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorICAg
IGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0OwogCi0gICAgaW50
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNv
bnN0OwogCi0gICAgYm9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAgICAgYm9vbCBp
c1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJv
b2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3Qg
SW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29u
dHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZv
aWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJl
Y3QpOwotCiAgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAotICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAogICAg
IGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CkBAIC01NTYsOSArNDgzLDYgQEAgcHVibGljOgogICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUs
IGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJE
b2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xvc2lu
Z1BhZ2luYXRpb25DaGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lvbk1v
ZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0ZWRQ
YWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC02MzgsNiArNTYyLDgg
QEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9u
KFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xh
eWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7Cisg
ICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdDsKIAogICAg
IC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0cyBmb3IgdGhpcyBs
YXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50
aW5nKCkgY29uc3Q7CkBAIC02OTksNyArNjI1LDYgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJP
YmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8UGFpbnRMYXllckZs
YWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVsbHB0cik7CiAgICAg
Ym9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAg
IGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsK
IAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xpcFJlY3RzQ29udGV4
dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5cGUgaW5DbGlwUmVj
dHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNob3VsZFJlc3BlY3RP
dmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkK
QEAgLTc4NSwxMSArNzEwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGljSW5saW5lUG9z
aXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBvc2l0aW9uID0gcG9z
aXRpb247IH0KICAgICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5b3V0VW5pdCBwb3Np
dGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogCi0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAg
dm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBoYXNU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpOyB9CiAg
ICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBi
YWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OSwxNSArNzc5LDggQEAgcHVibGljOgog
ICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJC
YWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdy
YXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAg
ICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0g
ICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wg
dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhc0NvbXBvc2l0
ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yOyB9Ci0gICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KKyAg
ICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisgICAgYm9vbCBoYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25zdDsKIAogICAgIC8vIExheWVycyB3aXRoIHRo
ZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3Rv
ciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9s
bGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xs
aW5nU2NvcGU7IH0KQEAgLTg4NiwxMSArNzk5LDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVy
eSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3Vu
ZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAg
IGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBj
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhG
aWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVy
cygpIGNvbnN0OwogCkBAIC05MTksOCArODI3LDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wg
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgp
OwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZy
ZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMxLDcgKzgzNyw3
IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29u
IHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsK
ICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJl
YXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAg
IFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTEs
OSArOTE3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIo
KTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91
dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVj
a0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNG
dWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDM5LDggKzk0Miw2
IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVu
ZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
ID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9p
bnQoKTsgfQpAQCAtMTA1NCw2ICs5NTUsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5
ZXJGaWx0ZXJzKCk7CiAgICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCB1
cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJs
ZUFyZWEoKTsKKwogICAgIFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dCYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdy
YXBoaWNzQ29udGV4dCogc2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25D
b250ZXh0LCBMYXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNv
bnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290LCBPcHRpb25hbDxMYXlvdXRSZWN0PiYgcm9v
dFJlbGF0aXZlQm91bmRzKTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQm
IG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMTAwLDY0ICsxMDA0LDEz
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wg
aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
SGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJl
bmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVz
dFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wg
bGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhh
c1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25z
dDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJM
YXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2li
bGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwot
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAg
IFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIElu
dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVk
ZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0g
ICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFu
ZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5h
bDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
dGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAg
dm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZz
ZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJl
bnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURl
c2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTcsMTQgKzEwNTAsNiBAQCBwcml2YXRlOgogICAgIC8v
IENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRh
a2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9D
b250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92
ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRh
dGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBk
cmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVj
dCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAK
ICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29t
cG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMywxMSArMTA1OCw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRp
bmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJl
Y3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9
CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBv
dmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3Qg
T3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0xMjMwLDggKzEwNzAs
NiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNl
Y3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8
Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1f
aXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0OCw3ICsxMDg2LDYgQEAgcHJpdmF0ZToKICAg
ICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXpp
bmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAg
Ym9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJ
ZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2Fs
ayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjYw
LDE0ICsxMDk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAo
YW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBB
IHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4K
LSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFp
bnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRl
bnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAg
ICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hh
c1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAg
ICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDggKzExMTIsNiBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgOiAxOyAvLyBJbiB0aGUg
ei1vcmRlciB0cmVlLgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNj
ZW5kYW50cyA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6
IDE7IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2Vz
dG9yIDogMTsKICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEy
ODgsMTcgKzExMjEsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvbiA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25l
ZCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3Bv
cnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBt
X3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVy
TGlzdE11dGF0aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzksMjUgKzExNjEsMTEgQEAg
cHJpdmF0ZToKICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1f
bGF5ZXJTaXplOwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBP
cHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAg
ICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUg
bV9zY3JvbGxTaXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZl
IGEgcGFpciBvZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJl
Y3RzQ2FjaGU+IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRP
dmVybGF5U2Nyb2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIElu
dGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Nj
b3BlOwogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRz
PFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1
ZWU+LgotICAgIAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRl
IHBvc2l0aW9uZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExh
eW91dFVuaXQgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGlj
QmxvY2tQb3NpdGlvbjsKQEAgLTEzNjcsMTAgKzExNzUsNiBAQCBwcml2YXRlOgogICAgIC8vIE1h
eSB1bHRpbWF0ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3du
IHBhaW50IG9yZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9u
OwogCi0gICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFu
ZCByZXNpemVyLgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENv
cm5lcjsKLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAg
ICAgLy8gUG9pbnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVz
IHRvIGJlIHBhZ2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBX
ZWFrUHRyPFJlbmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3
OCw2ICsxMTgyLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXll
ckZpbHRlcnM+IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNr
aW5nPiBtX2JhY2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE+IG1fc2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2Vy
IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NTAsNiArMTI1NSwzIEBAIHZvaWQg
c2hvd1BhaW50T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNo
b3dMYXllclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0
dXJuIGFyZWEuaXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmlu
ZGV4IDE2Y2FkZTgwNWFhOS4uMDU5N2JlYmI4YzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2luY2x1
ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNs
dWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
I2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNraW5n
OjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29uc3Qg
UmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRpbGVk
QmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxUaWxl
c0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYgKCF1
c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5oYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJhZ2Ug
fD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7Cisg
ICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6
Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5oYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9
IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgICAg
IGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCisg
ICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JW
ZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNvdmVy
YWdlOwogfQpAQCAtMTIyOCw5ICsxMjMxLDEyIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqCiAg
ICAgfQogCiAgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0
b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VS
VChzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yKTsKKwogICAgICAgICBMYXlvdXRSZWN0IGFu
Y2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJvdW5k
cygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENvbnRh
aW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNj
cm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9y
LT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBMYXlv
dXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShhbmNl
c3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xsT2Zm
c2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2Nyw3ICsx
MzczLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlv
bigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9sbENv
bnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xsQ29u
dGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAotICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgICAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAgICAg
ICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWluZXJM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC0xMzgxLDcgKzEzOTAsOSBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBv
c2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkID0g
b2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zmc2V0
RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5nTGF5
ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAgICAg
IEludFNpemUgc2Nyb2xsU2l6ZTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAgICAg
ICAgICAgIHNjcm9sbFNpemUgPSBJbnRTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgo
KSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxT
aXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9mZnNl
dENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAKQEAgLTE0OTAsMTQgKzE1MDEsMTcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxPZmZz
ZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRTY3Jv
bGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJs
ZUxheWVyKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCkg
PT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFwcGVu
aW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5kcyBv
cmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAgIHNldExv
Y2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3Np
dGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50cyBvZmZz
ZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFuIGEgcG9z
aXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250
ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCk7Ci0g
ICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Njcm9s
bGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5MjMs
OSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVyR2Vv
bWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVy
LT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAgIGlm
IChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3JvbGxP
ZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVudHJ5
LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIgPyBl
bnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikK
KyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9m
ZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNPcmln
aW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVCeSgt
c2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjcsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNv
bnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxi
YXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
bV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJC
YWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJl
dHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3Jv
bGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxh
eWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tp
bmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVuZGVy
Qm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxl
TGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9IHNj
cm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNp
emVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIudmVy
dGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFy
ID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIo
KTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNh
bFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIgPyB2
ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigp
OwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9CiAK
QEAgLTIwNjUsMTAgKzIwODksMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBsYXll
cnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3JuZXIs
IG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAgICBp
ZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNjcm9s
bGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAg
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVy
RGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkg
eworICAgICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAg
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7Cisg
ICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJE
aWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICB9
CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDIsOCBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhi
b29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5ZXIu
aGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllciB8fCAhc2Nyb2xs
YWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJ
WE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiArMjEyNSwx
NSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5
ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBi
b3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIs
IHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAgIGxh
eWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkg
JiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdz
Q29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXIt
PnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9IGxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJhckxh
eWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0g
ICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9s
bGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVyLT5z
ZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpICYmICFs
YXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxheWVy
ID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTEyLDEwIEBAIHZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0IExh
eW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIgJiYg
bV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEZsb2F0
UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAgICAg
ICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZy
b21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCkp
IC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmlu
Z0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3Zl
KC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91
dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwogICAg
ICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVy
RGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjEsOCBAQCB2
b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXll
ciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmluZ0xh
eWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwgcGFp
bnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAg
ICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAgICAgICAg
ICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
cGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5
U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXll
cldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBAIC0zNDIw
LDE3ICszNDUwLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBwYWlu
dERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2UgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAg
ICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCksIGNv
bnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGlj
c0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWludFNj
cm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5
UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Ny
b2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICAg
ICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLCBj
b250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXll
ckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5n
TGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgp
OworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFi
bGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIGF1
dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
c2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1j
b3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVkQ2xp
cCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoY29y
bmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENsaXAp
KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9pbnQo
KSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNjcm9s
bENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENs
aXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50
UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIHJl
bmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBjZmM0YWIxNTI4
ODYuLmE0MmE5NjE0NmU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC00NjU3LDggKzQ2NTgsMTEgQEAgU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclZpZXdwb3J0Q29u
c3RyYWluZWQKIExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYXJlbnRSZWxhdGl2
ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgUmVuZGVyTGF5
ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IGFuY2VzdG9yTGF5ZXIg
bmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91bGQgYmVjb21lIGEgcmVmZXJlbmNl
LgotICAgIGlmICghYW5jZXN0b3JMYXllcikKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9
LCBMYXlvdXRTaXplKGxheWVyLnZpc2libGVTaXplKCkpKTsKKyAgICBpZiAoIWFuY2VzdG9yTGF5
ZXIpIHsKKyAgICAgICAgaWYgKCFsYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlv
dXRTaXplKGxheWVyLnNjcm9sbGFibGVBcmVhKCktPnZpc2libGVTaXplKCkpKTsKKyAgICB9CiAK
ICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0OwogICAgIGlmIChpczxSZW5kZXJCb3g+KGxh
eWVyLnJlbmRlcmVyKCkpKQpAQCAtNDY3OCwxMSArNDY4MiwxNCBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhTY3JvbGxpbmdOb2RlSUQgbm9k
ZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290QmFja2dyb3VuZExheWVyKCksIGNsaXBMYXll
cigpLCByb290Q29udGVudHNMYXllcigpLAogICAgICAgICAgICAgZnJhbWVWaWV3LmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZpZXcubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOwor
CiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFja2luZygpOwogICAgICAgICBzY3Jv
bGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJRCwgeyBiYWNraW5nLmdyYXBoaWNz
TGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xsQ29udGFpbmVyTGF5ZXIoKSwgYmFj
a2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAgICAgICAgIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOworICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgc2Nyb2xsYWJs
ZUxheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfQogfQogCkBAIC00
NzIwLDggKzQ3MjcsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAgICAgICAgaWYgKGNo
YW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAgICAgICAgICAgdXBk
YXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Nyb2xsaW5nQ29vcmRp
bmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdz
OjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0gICAgICAgICAgICBz
Y3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0
cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9k
ZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxp
bmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpzY3JvbGxhYmxlTGF5ZXIp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAgLTQ4OTYsNyAr
NDkwNSw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFi
bGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAgICAgaWYgKG5vZGVJRCA9PSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlEKCkpCiAgICAgICAgIHJldHVybiAm
bV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRv
TGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRv
TGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFja2luZyhSZW5k
ZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykKQEAgLTUwMzUsMTEg
KzUwNDQsMTQgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjp1
cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGEKICAgICBhdXRvKiBiYWNraW5nID0g
bGF5ZXIuYmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5nKTsKIAotICAgIGJvb2wgYWxsb3dI
b3Jpem9udGFsU2Nyb2xsYmFyID0gIWxheWVyLmhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0
eWxlKCk7Ci0gICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyID0gIWxheWVyLnZlcnRpY2Fs
U2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAg
ICBib29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFzY3JvbGxhYmxlTGF5ZXItPmhvcml6
b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Ny
b2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KCk7CiAKICAgICBtX2Nocm9tZUNsaWVudC5hZGRPclVwZGF0ZVNjcm9sbGluZ0xheWVyKGxheWVy
LnJlbmRlcmVyKCkuZWxlbWVudCgpLCBiYWNraW5nLT5zY3JvbGxDb250YWluZXJMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGVkQ29udGVudHNMYXllcigpLT5wbGF0Zm9y
bUxheWVyKCksCi0gICAgICAgIGxheWVyLnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCksIGFs
bG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSwgYWxsb3dIb3Jp
em9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKIH0KIAogdm9pZCBMZWdh
Y3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpyZWdpc3RlckFsbFNjcm9sbGluZ0xh
eWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdC5jcHAKaW5kZXggMDUyYTljNzVlNjM1Li5jN2ZjNjZjNzAxM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAg
LTE3Niw4ICsxNzYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBuZXdTdHlsZSA9IHN0eWxlKCk7CiAgICAgaWYgKG9sZFN0eWxlICYmIHNjcm9sbFNu
YXBDb250YWluZXJSZXF1aXJlc1VwZGF0ZUZvclN0eWxlVXBkYXRlKCpvbGRTdHlsZSwgbmV3U3R5
bGUpKSB7CiAgICAgICAgIGlmIChSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBsYXllcigpKSB7
Ci0gICAgICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAg
ICAgIHJlbmRlckxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlckxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzQm9keSgpIHx8IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSkgewogICAgICAgICAgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSB2aWV3KCkuZnJhbWVWaWV3
KCk7CiAgICAgICAgICAgICBmcmFtZVZpZXcudXBkYXRlU25hcE9mZnNldHMoKTsKQEAgLTE5NSw4
ICsxOTYsOSBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdAogICAgICAgICBpZiAoc2Nyb2xsU25h
cEJveCAmJiBzY3JvbGxTbmFwQm94LT5sYXllcigpKSB7CiAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUgPSBzY3JvbGxTbmFwQm94LT5zdHlsZSgpOwogICAgICAgICAgICAgaWYg
KHN0eWxlLnNjcm9sbFNuYXBUeXBlKCkuc3RyaWN0bmVzcyAhPSBTY3JvbGxTbmFwU3RyaWN0bmVz
czo6Tm9uZSkgewotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0
ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gc2Nyb2xsU25hcEJveC0+bGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJl
YSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU25hcE9mZnNldHMo
KTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChzY3JvbGxTbmFwQm94LT5pc0JvZHkoKSB8fCBzY3Jv
bGxTbmFwQm94LT5pc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbFNuYXBCb3gtPnZpZXcoKS5mcmFtZVZpZXcoKS51cGRhdGVTY3JvbGxpbmdDb29y
ZGluYXRvclNjcm9sbFNuYXBQcm9wZXJ0aWVzKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NWYzZWFhMGNjZDQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5jcHAKQEAgLTAsMCArMSwxODQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0
aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworICog
b2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBmb3VuZCBh
dAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0dHA6Ly93
d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdoaWNoIGNh
c2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBwbGljYWJs
ZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlv
dXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIG9uZSBv
ZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBub3QgdG8g
YWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUgcHJvdmlz
aW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAqIG90aGVy
IHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUgY2FzZSBt
YXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSBy
ZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBhbnkg
b2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVyKQorICAgIDogbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkodHJ1ZSkKKyAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQorICAgICwgbV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCisgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fcG9zdExh
eW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAgICwgbV9sYXllcihsYXllcikKK3sKK30K
KworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEo
KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VS
VChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1v
dmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQor
ICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlm
CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAg
IGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsK
KworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJv
eVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAg
ICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRo
aXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkK
K3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAg
ICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xheWVyLnJlbmRl
ckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xs
T2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAg
ICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24o
KTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAg
c2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7Cisg
ICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50
KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwor
fQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3Vj
aEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQg
dGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVu
dCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9
IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVy
bjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJl
bmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJv
dW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICov
IHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092
ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewor
ICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Mo
c2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisg
ICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhp
c3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlz
UnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09u
TWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRo
cmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgaWYgKCFw
b3NpdGlvbikgeworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBv
c2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7
CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbi52YWx1
ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9z
aXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBv
c2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6Olll
cykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Q
b3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNj
cm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVu
KEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCBtX2xheWVyIDw8ICIgcmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAgaWYgKGN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFu
aW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisK
KyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNj
cm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxP
ZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUg
PSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5
cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykp
CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zm
c2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHBy
ZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1
dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJy
ZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxP
ZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xs
T2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Nj
cm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAg
IGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvICIgPDwg
cG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNj
cm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIp
Iik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlm
ICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRp
bWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxv
dzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQor
ICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0
cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgor
ICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJv
eC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBz
Y3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zm
c2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhP
ZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8
PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgp
IC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lk
dGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAg
ICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIudmlldygpOwor
CisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVl
ZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCku
CisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBu
ZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCisg
ICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxh
eW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3
ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgorICAgICAg
ICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKworICAgICAgICB2
aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CisKKyAgICAg
ICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAvLyBBdm9p
ZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdl
J3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBk
YXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUg
UmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGls
bCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXll
cnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCisgICAgICAgICAg
ICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgICAgIG1fbGF5
ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAg
ICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3Np
dGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAg
ICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFj
a2luZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IG1f
bGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50
LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3Jv
bGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAg
ICByZW5kZXJlci5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25z
KCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIuZnJhbWUo
KSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIuZnJhbWUoKTsKKyAgICBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIuY29udGFp
bmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFs
aWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVj
dE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVy
ZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlci5yZXBhaW50TGF5b3V0UmVjdHMo
KS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWlu
ZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZy
YW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0g
dHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBtX2xh
eWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVy
LnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsK
KyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gbV9sYXllci5iYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAg
ICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVj
dEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJl
bGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVs
ZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZl
bnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5m
cmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigp
LnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAg
IGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkg
eworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29u
dGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVw
b3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBtX2xheWVyLnN0YWNr
aW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXIu
Y29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlw
ZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkg
ZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4K
KyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRV
cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICAgICAgbV9s
YXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRh
dGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxXaWR0aDsKK30KKwor
aW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fbWFycXVl
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNl
dEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KKyAgICBib29s
IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
KyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNIVE1MTWFycXVlZSgpICYm
IHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpO
b25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAg
ICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KCZtX2xheWVyKTsK
KyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYg
KG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3JvbGxzT3ZlcmZsb3coKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29sIGlz
VmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0
dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIuc3R5bGUoKS51
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIuc2V0dGluZ3MoKS5hbHdheXNV
c2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xs
UG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5h
dGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQpCit7CisgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisg
ICAgaWYgKHVzZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9k
ZUlEKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5k
bGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQpOworfQorCitJbnRSZWN0IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVD
b250ZW50UmVjdEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7
CisgICAgaWYgKHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9
PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJ
bnRydXNpb24oKTsKKworICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgp
OworICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNp
emUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxl
U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNp
emUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAorewor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0Zv
clN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgp
OworCisgICAgSW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Ny
b2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNj
cm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24oKSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250
ZW50c1NpemUoKTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0
Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNp
emUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkg
LSB2aXNpYmxlSGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNl
dC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisg
ICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNj
cm9sbE9mZnNldC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBz
Y3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkp
CisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVT
aXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7Cisj
ZWxzZQorICAgIHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9s
bENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVj
dCA9IHNjcm9sbGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxi
YXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
UmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3Qg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRS
ZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIEludFJlY3QgcmVjdCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJl
Y3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0Owor
fQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50Owor
ICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBv
aW50ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNp
emUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Cit9
CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXplKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7
Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNpemUgY29udGVudHNTaXplID0gdGhpcy0+
Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZs
b3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6
ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKworICAgIGlmICghaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldEhlaWdodChz
dGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVpZ2h0KCkpKTsK
KworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VS
ZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6
ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xs
YmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpCisg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLnNldFNob3VsZEZvcmNl
UmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAgcmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQo
KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3Vz
cGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCku
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkK
K3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFydE92ZXJmbG93
U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Ny
b2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVy
Zmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVw
ZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNj
cm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBt
X2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpT
Y3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAor
eworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBi
b3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNu
YXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigp
KTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJh
ci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJh
ciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJh
ciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAgIHJldHVybiBzY3Jv
bGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7CisgICAgfTsKKworICAg
IGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Ny
b2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Ny
b2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgYm9vbCBw
bGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9sbGJhcnNBdm9pZENv
cm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJs
YXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhv
cml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwor
CisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
IHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3Ju
ZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7CisgICAgICAgICAg
ICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgK
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVj
dHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0LnNoaWZ0WUVk
Z2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQpOworICAgICAg
ICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVk
Z2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndpZHRoKCksIDAp
OworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxiYXIgPSBiYXJS
ZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0g
b3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBsYWNlVmVydGlj
YWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdpZHRoKHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXJSZWN0LnNo
aWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworCisg
ICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBiYXJSZWN0LmNv
bnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3VsdC52ZXJ0aWNh
bFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJSZWN0ID0gWyZd
KEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJh
ck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAg
cmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21MZWZ0Q29ybmVy
LnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAgICB9OworCisg
ICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNjcm9sbENvcm5l
ciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAg
ICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJlc3VsdC5yZXNp
emVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBh
dXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnNjcm9sbGJh
clRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsg
c2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29u
c3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7CisgICAgICAgIGlm
IChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewor
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CisgICAgICAg
ICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAg
ICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7
CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUg
aXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICghYm94LT5wYXJlbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisg
ICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICBzY3JvbGxSZWN0Lm1v
dmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICBlbHNlCisgICAg
ICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gt
PmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgYm94LT5yZXBhaW50UmVjdGFu
Z2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKKyAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJl
cGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNp
emVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitzdGF0aWMgYm9vbCBzY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVybiBzY3JvbGxi
YXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJh
cigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRl
cmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7
CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+Y29udGFpbmlu
Z1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBT
aGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBzaGFkb3dS
b290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
JnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit7Cisg
ICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVmUHRyPFNjcm9s
bGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcikp
OworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRl
cmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94Pihh
Y3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5
bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBpZiAoaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3Jl
YXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94
PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0
ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNjcm9sbGJhcih3
aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlz
TW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0
b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgq
d2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFy
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsK
KyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzY3JvbGxi
YXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Ny
b2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxi
YXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9o
QmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxv
dygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVS
ZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0
aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0
cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIn
cyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgp
OworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7
CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Cisj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Ny
b2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3Vi
U2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDog
U2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8g
RGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNv
cm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9s
bGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFu
Z2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsK
K30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhj
bHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExheWVyID0gbV9s
YXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6
WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgIGlmIChu
ZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAgIHx8
IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sK
KyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAg
ICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJ
Z25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUlu
SGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1faEJhci0+
aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZs
b3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9z
Y3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVz
aXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9u
T3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBp
ZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJlc2l6ZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVyQm94KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlmICht
X3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9t
Um9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIHJlY3RzLmhvcml6b250
YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1faEJhci0+c2V0RnJh
bWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX3Nj
cm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5z
Y3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5z
ZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94
ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gt
PmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOworfQorCitMYXlvdXRVbml0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKK3sKKyAg
ICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFko
KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0xl
ZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsK
KyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
KyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBv
dmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXll
ci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sKKyAgICBSZW5kZXJC
b3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxXaWR0aCA9IHJv
dW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpOworICAgIG1fc2Nyb2xs
SGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisK
KyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0
KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOworICAgIHNldFNj
cm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNjcm9sbGFibGVU
b3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxh
YmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6b250YWxPdmVy
ZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xh
eWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxXaWR0
aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJl
dHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xp
ZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sKKyAg
ICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6
b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwor
ICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxv
dzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAm
JiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3Rz
TGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJh
cihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7
CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpI
b3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1ko
KTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3Zl
cmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJh
cikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Cisg
ICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0
c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNj
cm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJl
bmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFu
ZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9IHRoaXMtPmhh
c0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdyA9IHRo
aXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92ZXJmbG93IHJlcXVpcmVz
IGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAobV9oQmFyICYm
IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9s
bGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cp
OworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHls
ZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNW
ZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9y
IG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVt
b3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFz
SG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNj
cm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9vbCBhdXRvVmVydGlj
YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVo
YXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93
KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRp
Y2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Ny
b2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAoYm94LT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAgIG1fbGF5ZXIudXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlci5yZXBhaW50KCk7CisK
KyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1
dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewor
ICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAgICAgICAgICAg
IG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5z
ZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrJiBi
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CisgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdl
ZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAgICAgICAgIGJs
b2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBtX2luT3ZlcmZs
b3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
UmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHBh
cmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlci5pc0JveCgpKQorICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVk
TWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgfQorCisgICAgLy8g
U2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIGlmIChtX2hC
YXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdp
ZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVu
dFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9CisgICAgaWYgKG1fdkJhcikgeworICAgICAg
ICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKTsKKyAg
ICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRIZWlnaHQpOwor
ICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwg
cGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBt
X3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZv
cmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0g
bV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9sbE9mZnNldCBvcmln
aW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CisKKyNp
ZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZz
ZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdl
cy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0
CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRpZgorCisgICAgaWYgKCFib3gtPmlzSFRN
TE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJ
blByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBh
biBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKKyAgICAgICAg
Ly8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRo
ZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zm
c2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQg
YWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50
cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1
ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9u
IHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50
IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9y
IG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNl
dCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBzZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQorCisgICAgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJ
bnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVk
KCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0
ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAg
ICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKKworICAg
IHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2Fs
UmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVj
dCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBp
ZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJz
IGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7CisgICAgLy8gRG9u
J3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmhhc092ZXJmbG93Q2xp
cCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4g
YSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBh
aW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9y
bWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAgLy8gd2lsbCBi
ZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVy
ZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQu
IFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0
byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRo
ZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlCisgICAgLy8gc2Vjb25kIHBh
c3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdo
dC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQg
cGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KKyAgICAgICAgaWYgKCht
X2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
SW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgICAgIGxvY2FsRGFtZ2VS
ZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJ
bnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gbV9sYXllci5lbmNsb3NpbmdDb21wb3Np
dGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAgICAgICAgICAgcGFp
bnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVyKCk7CisKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBjaGVjayBpcyBy
ZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCisg
ICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0g
cGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorICAgICAgICBh
ZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisg
ICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxs
eSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCisg
ICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90
YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8gY29udGFpbnMgZml4
ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRv
SW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBz
dXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCisg
ICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
IG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKG1fdkJhciAmJiAh
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRl
eHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0
ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRoZSB3YXkgdXAg
dG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNv
bnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworCisgICAgLy8gUGFpbnQg
b3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3Ju
ZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFn
ZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zm
c2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJlY3QgYWJzUmVjdCA9
IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Cisg
ICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAg
IHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50
b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBpZiB3ZSBoYXZl
IG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRvIHNlZSB3aGF0IGlz
IGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIFNj
cm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFic1JlY3Qp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6
ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6
ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxvYXRTaXplIGNv
cm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiBy
ZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRB
cmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplLnNj
YWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJ
bWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJj
ZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3Ju
ZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJT
aXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGNvbnRleHQu
c2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVyUmVjdC54KCkg
KyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55KCkgKyByZXNp
emVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7CisgICAgICAgIGlmIChy
ZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVD
b3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXplclNpemUpKTsK
KyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRSZWN0
IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChyZXNpemVyQ29y
bmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNvcm5lclJlc2l6
ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBj
b250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJlc2l6ZXI7Cisg
ICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJB
YnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVJl
c2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcmVzaXpl
cikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZz
ZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRyYXdQ
bGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisKKyAgICAvLyBE
cmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBh
cmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUg
dGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBpZiAoIWhhc092
ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAgICAgY29udGV4
dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIg
PSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6
ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFf
bHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIx
NywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYp
OworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7
CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVy
Zmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2Fs
UG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNp
emUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuc3R5
bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJlY3RzLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBh
bmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92QmFyICYmIG1f
dkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3Vs
ZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLmhvcml6b250
YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAgICByZXR1cm4g
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZvY3VzQ29udHJvbGxlcigpLmlzQWN0aXZl
KCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVy
KCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKK30KKworI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBP
ZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVt
ZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQo
KSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQo
KS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgq
dGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9
IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
LT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxi
YXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVj
dCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllcjo6TGF5ZXJQYWludGlu
Z0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNsb3NpbmdJbnRSZWN0KGRhbWFnZVJlY3Qp
LCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3QpOworICAgIG1f
bGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFJlbmRlckxheWVyOjpQYWlu
dExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlv
biwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAgICBpZiAobGF5ZXJG
cmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBy
ZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBz
bmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0
KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGF1
dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3Vu
ZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7CisgICAgICAgIGlmIChzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgICAgIEludFNpemUg
b2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSBy
ZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3Qg
eyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQg
LSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgp
IH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBi
b3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5l
cigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29y
bmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6
ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVu
dHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVu
dCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgYXV0byByZXNpemVy
UmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFn
bWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOworICAgICAgICBpZiAoZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0
SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7Cisg
ICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlv
bi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkg
PyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxs
cHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNr
aW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDog
bnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tp
bmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0
cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZl
YWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQuCisgICAg
UmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJh
cnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKKyAgICBP
dmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisKKyAgICAvLyBU
byBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwg
d2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBw
cmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVy
Zmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRv
bWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsK
KyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgp
ICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxi
YXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3Jv
bGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0
aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8vIFdpdGggbm9u
LW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBi
dXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFs
dWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgorICAgIGlmICht
X2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxl
LT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxv
dzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAo
bV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUt
Pm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93
OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICgh
bV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0
KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGlj
YWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVu
ZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3Qg
PSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisgICAgaWYgKEhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1lbnQoKSkKKyAgICAg
ICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5k
ZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAgICBib29sIGlzU2Nyb2xsYWJsZSA9
IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKKyAgICBib29sIGFkZGVkT3JSZW1v
dmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0g
ZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKGlzU2Ny
b2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Cisg
ICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhp
cyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7CisgICAgfQor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7
CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNo
IGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2Ug
YmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBh
IHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVO
VVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7CisgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0
dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byBj
b3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRV
bmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFs
UmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghY29ybmVyKSB7CisgICAg
ICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
Y29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxk
IG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQoJnJlbmRl
cmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0g
ZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIo
KQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nj
cm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVs
bHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNpemVy
U3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8g
YWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXpl
ciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVz
aXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKnJl
c2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQg
b2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsK
KyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBpZiAoIW1fcmVz
aXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIp
OworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCkKK3sKKyAgICBpZiAobV9o
QmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisg
ICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKK30KKworI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2
ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3
ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxl
ZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFy
ZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuYWRk
VG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyOworICAg
IGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1l
bnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBt
X3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQor
I2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCisvLyBGSVhNRTogdGhpcyBpcyBv
bmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXllci5iYWNraW5nKCktPmhhc1Njcm9sbGlu
Z0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50
IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmly
ZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9v
bGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0IGludCBzcGVl
ZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEg
LyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYgKGFkanVzdGVk
RGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRq
dXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSAr
IDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlubGluZSBJbnRT
aXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0
dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRT
Y3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQp
Cit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVy
ZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRpb24oKTsKKwor
ICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24g
aXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93
LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91
c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8
fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAgICAgIGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgZWxzZQorICAgICAgICBwcmV2
aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOworCisgICAgSW50U2l6
ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsKKworICAgIGlm
IChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8v
IGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KKyAgICAgICAgZGVs
dGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKworICAg
IHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOworfQorCitP
cHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3Jv
bGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciBiZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2
ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KQoreworICAgIEFTU0VS
VChtX2xheWVyLmFsbG93c0N1cnJlbnRTY3JvbGwoKSk7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9
IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICBhdXRvIHNob3Vs
ZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2
aW9yIGJlaGF2aW9yKQorICAgIHsKKyAgICAgICAgYm9vbCB1c2VBbmltYXRlZFNjcm9sbGluZyA9
ICFtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Q
cm9ncmVzcygpCisgICAgICAgICAgICAmJiBlbGVtZW50ICYmIHVzZVNtb290aFNjcm9sbGluZyhi
ZWhhdmlvciwgZWxlbWVudCk7CisgICAgICAgIHJldHVybiB1c2VBbmltYXRlZFNjcm9sbGluZyA/
IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6Tm87CisgICAgfTsKKworICAg
IFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRp
b24oKSkpOworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpIHx8
IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpO
b3RJbkFuaW1hdGlvbikgeworICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRl
ZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgYmVoYXZpb3IpOworICAgICAgICBzZXRTY3JvbGxQb3Np
dGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsK
KyAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9m
ZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKKworICAgICAgICBhdXRvIGxvY2FsRXhwb3NlUmVjdFNj
cm9sbGVkID0gbG9jYWxFeHBvc2VSZWN0OworICAgICAgICBsb2NhbEV4cG9zZVJlY3RTY3JvbGxl
ZC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKKyAgICAgICAgcmV0dXJuIExheW91dFJl
Y3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBv
c2VSZWN0U2Nyb2xsZWQpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7CisgICAgfQor
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxh
YmxlQXJlYSoqIHNjcm9sbGVkQXJlYSkKK3sKKyAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7CisgICAgaWYgKHJlbmRlcmVy
LnBhcmVudCgpKQorICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIucGFy
ZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7CisKKyAgICBpZiAocmVuZGVyZXIu
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgeworICAgICAgICBT
Y3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBkZWx0YTsKKyAg
ICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgaWYgKHNjcm9s
bGVkQXJlYSkKKyAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOworCisgICAgICAgIC8v
IElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5leHQgbGF5ZXIg
dXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQorICAgICAgICBJbnRTaXplIHJlbWFpbmluZ1Njcm9s
bE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAo
IXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlci5wYXJlbnQoKSkgewor
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCisgICAg
ICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3Nz
RnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5
KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Ny
b2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdl
IGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dy
YW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3Zl
cmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBj
YW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3Jv
bGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Ny
b2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBG
SVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRy
eSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3Vt
ZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKwor
ICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1f
bGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAo
VXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52
aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3Rv
cihtX2xheWVyLnBhcmVudCgpLCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQg
T0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bwor
ICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3Ig
YW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6
OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVk
R2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVs
OjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjMzMGU0
MzlhOWJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICogQWx0ZXJuYXRp
dmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVy
bXMKKyAqIG9mIGVpdGhlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwg
Zm91bmQgYXQKKyAqIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLyAodGhlICJNUEwiKSBvciB0
aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIFZlcnNpb24gMi4wLCBmb3VuZCBhdCBo
dHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqICh0aGUgIkdQTCIpLCBpbiB3
aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBNUEwgb3IgdGhlIEdQTCBhcmUKKyAqIGFw
cGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZSBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHVz
ZSBvZiB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBv
ZiBvbmUgb2YgdGhvc2UgdHdvCisgKiBsaWNlbnNlcyAodGhlIE1QTCBvciB0aGUgR1BMKSBhbmQg
bm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUg
dW5kZXIgdGhlIExHUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAqIGRlbGV0aW5ndGhl
IHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisg
KiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBNUEwgb3IgdGhlIEdQTCwgYXMgdGhl
IGNhc2UgbWF5IGJlLgorICogSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5k
ZXIgYW55IG9mIHRoZSBMR1BMLCB0aGUgTVBMIG9yIHRoZSBHUEwuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVh
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTWFycXVlZTsKKworY2xh
c3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJl
YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYpOworICAgIHZpcnR1YWwgflJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIFJlbmRlckxheWVyJiBsYXllcigpIHsg
cmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7
IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVwZGF0ZU1hcnF1ZWVQb3NpdGlv
bigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworCisgICAgdm9pZCBzdG9y
ZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICB2
b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisK
KyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3Np
dGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgp
OworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAgaW50IHNjcm9sbEhlaWdodCgp
IGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsK
KworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRo
ZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXpl
JiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0Jiwg
U2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxU
b09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9s
bCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQg
eSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwg
QW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworICAgIHZvaWQgc2V0U2Nyb2xs
UG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Ny
b2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCisgICAg
dm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0
KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xs
Q2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkg
eyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorCisg
ICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1
cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisg
ICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsK
KyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAg
Ym9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0
UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNp
bGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
PSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0
aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdo
ZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hl
biB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQg
dG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9
CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dD
b250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RS
ZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9
IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWlu
dFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsK
KworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNj
cm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
ID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3Zl
cnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKwor
ICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsK
KyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwor
CisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9
CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JikgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlKCkgZmluYWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkgZmluYWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygp
IGZpbmFsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRTdGFydFNjcm9sbCgp
IGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRVcGRh
dGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1c2VzQXN5bmNTY3JvbGxp
bmcoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1JlbmRlckxheWVyKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJh
clJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgaW52YWxp
ZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNv
bnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOwor
ICAgIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3Qg
ZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7CisgICAgU2Nyb2xs
aW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOworCisgICAgSW50UmVjdCB2
aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9s
bGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKKyAgICBJbnRT
aXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgbGFzdEtub3du
TW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNIYW5kbGluZ1do
ZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmlt
YXRpb25zKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5n
Qm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKKyAgICBib29s
IGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xs
YmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNz
KCkgY29uc3QgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Io
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKKyAgICBTdHJpbmcgZGVidWdEZXNjcmlwdGlvbigp
IGNvbnN0IGZpbmFsOworCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwor
ICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSByZWFj
aGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCByZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxUeXBlID0g
U2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCkgZmluYWw7CisKKyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CisgICAgdm9p
ZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhi
b29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9
IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZv
aWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRT
dHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0
VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20o
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91
dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93
Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBv
dmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNv
bnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisK
KyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFs
T3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsK
KworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RF
OiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25z
dDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7
CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0
JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Nj
cm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xs
KCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3Jv
bGxCZWhhdmlvciwgY29uc3QgTGF5b3V0UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxFeHBvc2VSZWN0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9v
bCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1f
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nOyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5l
clN0eWxlKCk7CisgICAgdm9pZCB1cGRhdGVSZXNpemVyU3R5bGUoKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBNaW5pbXVtIHBhZGRpbmcgb24geDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxI
ZWlnaHQpCisgICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBt
X2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxl
QXJlYSA6IDE7CisgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7
IC8vIEluIHRoZSBsYXllci1vcmRlciB0cmVlLgorICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93IDogMTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5B
QkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnMgOiAxOworICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6
IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAv
LyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9s
bFdpZHRoOworICAgIGludCBtX3Njcm9sbEhlaWdodDsKKworICAgIFJlbmRlckxheWVyJiBtX2xh
eWVyOworICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9z
aXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdp
dGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNj
cm9sbGJhcj4gbV9oQmFyOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIElu
dFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVy
cyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5k
ZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRy
PFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAppbmRleCA3ZTlmMzgzMmQzNmUuLjUyMjAyNTliZWVjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKQEAgLTg4Miw3ICs4ODMsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIFJl
bmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxh
eWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9
IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogYm9vbCBSZW5kZXJM
aXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKQEAgLTg5Miw3ICs4OTcsMTAg
QEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKIAog
Ym9vbCBSZW5kZXJMaXN0Qm94OjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkKIHsKLSAgICByZXR1cm4gZW5jbG9zaW5nTGF5ZXIoKSAmJiBlbmNsb3NpbmdMYXllcigpLT5o
YXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgaWYgKGF1dG8qIHNj
cm9sbGFibGVMYXllciA9IGVuY2xvc2luZ0xheWVyKCkgPyBlbmNsb3NpbmdMYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworCisgICAgcmV0dXJuIGZh
bHNlOwogfQogCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdC
b3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5j
cHAKaW5kZXggNzZlMjNlNGQwOTk2Li43YjRlNzZkYzU3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAgUmVuZGVyTWFycXVl
ZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBtX2xheWVyKGxheWVy
KQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQpCiB7Ci0g
ICAgbGF5ZXItPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGZhbHNlKTsKKyAg
ICBBU1NFUlQobGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpOworICAgIGxheWVyLT5zY3JvbGxhYmxl
QXJlYSgpLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CiB9CiAK
IFJlbmRlck1hcnF1ZWU6On5SZW5kZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpAQCAtMTcxLDExICsx
NzIsMTQgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpzdGFydCgpCiAgICAgaWYgKG1fdGltZXIuaXNB
Y3RpdmUoKSB8fCBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVudCgp
LmlzWmVybygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIp
OworCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAgICAgICAgIGlmIChp
c0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9s
bE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFt
cGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9P
ZmZzZXQoU2Nyb2xsT2Zmc2V0KG1fc3RhcnQsIDApLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFydCksIFNjcm9sbFR5
cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCgwLCBtX3N0YXJ0
KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwogICAgICAgICBtX3N0
b3BwZWQgPSBmYWxzZTsKQEAgLTI0MywxMyArMjQ3LDE2IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6
dGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCkudmlldygpLm5lZWRz
TGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNjcm9sbGFibGVM
YXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAgICAgICBtX3Jlc2V0ID0gZmFsc2U7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
WE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9Y
T2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2xheWVyLT5zY3Jv
bGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTI3
Miw3ICsyNzksNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQoKQogICAgICAgICBi
b29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAgICBpbnQgY2xpZW50U2l6ZSA9IChpc0hv
cml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudFdpZHRo
KCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpKTsK
ICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRWYWx1ZUZvckxlbmd0aChtX2xheWVyLT5y
ZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVudCgpLCBjbGllbnRTaXplKSk7Ci0gICAg
ICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gbV9sYXllci0+c2Nyb2xsT2Zm
c2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKTsKKyAgICAgICAgaW50IGN1
cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKTsKICAgICAgICAg
bmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVtZW50ID8gaW5jcmVtZW50IDogLWluY3Jl
bWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAgICAgICAgICAgIG5ld1BvcyA9IHN0ZDo6
bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkgKzI5Niw5IEBAIHZvaWQgUmVuZGVyTWFy
cXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAogICAgIGlmIChpc0hvcml6b250YWwoKSkK
LSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7CiAgICAgZWxzZQotICAgICAgICBt
X2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCAxN2ZjMzNkNDFl
MDQuLjExMDUxMTcyM2FlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKQEAgLTEwMDEsNyArMTAwMSw3IEBAIE9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyT2Jq
ZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVjdEluQ29udGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0
aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKFRleHRTdHJlYW0mIHN0cmVhbSkKIHsKICAg
ICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShO
KWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRils
b2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwp
YXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKKyAg
ICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUv
RmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAs
IEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgaGFzTGF5ZXIoUyljcm9sbGFi
bGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwog
ICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQogCkBAIC0xMTE1LDEwICsxMTE1LDE0IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QoVGV4dFN0cmVhbSYgc3RyZWFtLCBib29s
IG1hcmssIGludCBkZXB0aCkKICAgICBlbHNlCiAgICAgICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAg
ICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAgICAgICBzdHJlYW0g
PDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICAgICAgaWYgKGRv
d25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCp0aGlzKS5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgc3RyZWFtIDw8ICJTIjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9IGVsc2UKKyAgICAgICAgc3RyZWFtIDw8ICItLSI7
CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkpCiAgICAgICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYjkxNTkyMmIyMWU5Li4wMTEz
ODQxZTZjMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEw
MCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGll
bnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNz
IHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGlj
YWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAppbmRleCBhMDc1MDgxZjU2NWMuLjI1N2FmYmUxOTA0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlLCBTY3JvbGxDbGEKIAogYm9v
bCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwg
RWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25zdCBJbnRQb2lu
dCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xJbm5l
ckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKKyAgICBh
dXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKICAgICBpZiAo
IXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGly
ZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgYXV0byogYm94TGF5ZXJTY3Jv
bGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+ZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5ZXJTY3JvbGxhYmxl
ICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVuZGVyQmxvY2tG
bG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcEVsZW1l
bnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKIGJvb2wgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVyKiBsYXllciA9
IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIg
JiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGxheWVyID0gaW5uZXJU
ZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOworICAgIGF1dG8qIGJveExheWVyU2Ny
b2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51
bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAyMGZlODIuLjU5MjBkNThmMjBiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDks
NiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgi
CkBAIC02MDAsMjAgKzYwMSwyNCBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0m
IHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIsIGNvbnN0IExheW91dFJlYwogICAgIH0KIAog
ICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIGlm
IChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFgg
IiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxP
ZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBsYXllci5zY3Jv
bGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRv
SW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0
aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IGxheWVyLnNjcm9sbFdp
ZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVy
LnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0g
ICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IGxheWVyLnNjcm9sbEhlaWdodCgp
OworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCku
eCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8
IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgICAgICAgICAgaWYgKGxh
eWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdp
ZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKSkKKyAgICAgICAgICAgICAg
ICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgp
OworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIu
cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhl
aWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAgICAgICAgfQogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9sbGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6
OnRoZW1lKCk7Ci0gICAgICAgIGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBs
YXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJUaGVt
ZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xs
YmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRM
KCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiIHNj
cm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoIXNj
cm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5oYXNWZXJ0aWNh
bFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1hY1Ro
ZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKTsK
KyAgICAgICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJlY3Rpb25SVEwoKnNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGlyZWN0aW9uIjsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogI2VuZGlmCiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcAppbmRleCBiMTAzM2RhMDc5MzAuLmZmNDIyMjA3MzIxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTMzMiw4ICszMzMsMTAgQEAg
dm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJl
Y3Qoc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCgpKSwgc2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkpOwogICAgIH0KIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6
ZSgpKQotICAgICAgICBsYXllcigpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwg
cm91bmRlZEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7Cisg
ICAgaWYgKGhhc0xheWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpIHsKKyAgICAgICAgQVNT
RVJUKGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpOworICAgICAgICBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpLT5wYWludFJlc2l6ZXIocGFpbnRJbmZvLmNvbnRleHQoKSwgcm91bmRlZEludFBv
aW50KGFkanVzdGVkUGFpbnRPZmZzZXQpLCBwYWludEluZm8ucmVjdCk7CisgICAgfQogfQogCiB2
b2lkIFJlbmRlcldpZGdldDo6c2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCBpc092ZXJsYXBwZWQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggYWQ2MzdmZjQ0Zjk2Li5mZTVj
ZTQwNTk2MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2ICsx
NTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCkBAIC0xODMzLDcgKzE4MzQsOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6
OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAg
ICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94LmxheWVy
KCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg1NCw4ICsy
ODU2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxh
YmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVuZGVy
TGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRvd25j
YXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFi
bGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIH0K
ICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVy
cm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA1YzQ5OTNiYWUwMjguLmI5
YzYwNmQyMTJiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDIwLTExLTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2FsaWEuY29t
PgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJMYXllcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAzMDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVyaGF1bCBS
ZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xsaW5nL292
ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGlu
ZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIg
dHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3Zl
cmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3RpbmcuCisK
KyAgICAgICAgKiBET00vRE9NSFRNTC5tbToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Ny
b2xsWE9mZnNldF0pOgorICAgICAgICAoLVtET01IVE1MRWxlbWVudCBzY3JvbGxZT2Zmc2V0XSk6
CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNldFNjcm9sbFhPZmZzZXQ6c2Nyb2xsWU9mZnNl
dDphZGp1c3RGb3JJT1NDYXJldDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6XSk6CisgICAgICAg
ICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3aXRoSW5zZXQ6XSk6CisKIDIw
MjAtMTEtMjEgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGFuIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyBmb3Igd2hlZWwgZXZlbnQgZ2VzdHVyZXMg
YmVjb21pbmcgbm9uLWJsb2NraW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1t
CmluZGV4IDg1ODRjMjMxZmVmOC4uY2JjNTY3ZTNiZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NSFRNTC5tbQpAQCAtNTMsNiArNTMsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNTdGF0ZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dBS1dpbmRvdy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGhyZWFkTWVzc2FnZS5oPgogI2VuZGlmCkBAIC03Nyw3
ICs3OCwxNCBAQCAtIChpbnQpc2Nyb2xsWE9mZnNldAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVu
ZGVyQm94PigqcmVuZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKS5sYXllcigpLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAgYXV0byogbGF5ZXIg
PSBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS54KCk7CiB9CiAKIC0gKGludClzY3JvbGxZT2Zmc2V0CkBAIC05MSw3ICs5OSwxNCBAQCAt
IChpbnQpc2Nyb2xsWU9mZnNldAogICAgIGlmICghaXM8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVu
ZGVyZXIpIHx8ICFyZW5kZXJlci0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5s
YXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxX
ZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+c2Ny
b2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CiB9
CiAKIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Nyb2xsWU9mZnNldDooaW50KXkK
QEAgLTExMSwxMSArMTI2LDE0IEBAIC0gKHZvaWQpc2V0U2Nyb2xsWE9mZnNldDooaW50KXggc2Ny
b2xsWU9mZnNldDooaW50KXkgYWRqdXN0Rm9ySU9TQ2FyZXQ6KEJPT0wpYWRqCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0KQotICAgICAgICBsYXllci0+c2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotICAgIGxheWVyLT5zY3JvbGxUb09mZnNl
dChXZWJDb3JlOjpTY3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9sbFR5cGU6OlByb2dy
YW1tYXRpYywgV2ViQ29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwor
ICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0
KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9s
bENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldCkKLSAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKIH0KIAogLSAodm9pZClhYnNvbHV0ZVBvc2l0aW9uOihpbnQgKil4IDooaW50ICopeSA6
KGludCAqKXcgOihpbnQgKiloCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQppbmRleCAzZmVhMTYwODM5MmYuLjEyZDE1OWVjOGZmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NSw2ICs5NSw3IEBACiAjaW1w
b3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcmVk
RG9jdW1lbnRNYXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9N
UmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2UKICNlbHNlCiAgICAgICAgIGF1dG8qIGxh
eWVyID0gc3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBp
ZiAobGF5ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAg
ICBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5j
bG9zaW5nSW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rp
b25SZXZlYWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0Vk
Z2VJZk5lZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVk
LCBXZWJDb3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAg
ICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsK
KyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nKGZhbHNlKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlv
bigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgIH0KQEAgLTc1
OCw5ICs3NjAsMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdl
ICopcmFuZ2Ugd2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBz
dGFydE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUt
PnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikgewotICAg
ICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsK
KyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNj
cm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVu
ZGVyZXIoKS0+c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJh
bmdlUmVjdCksIGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJl
dmVhbCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3Vs
ZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAK
ICAgICAgICAgICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlm
IChjb3JlRnJhbWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA2MjM2YTExYmYy
OTYuLjY5ZDNkYWFhMzhhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDIwLTExLTI4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBSZW5kZXJM
YXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAz
MDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPdmVy
aGF1bCBSZW5kZXJMYXllcjoKKyAgICAgICAgVGhlIGdvYWwgaXMgdG8gbW92ZSBhbGwgc2Nyb2xs
aW5nL292ZXJmbG93IGhhbmRsaW5nCisgICAgICAgIG91dCBvZiBSZW5kZXJMYXllciwgdG8gc3Ry
ZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0IHJlLXVzYWJsZSBmb3Ig
bGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Igc3VwcG9ydCBzY3JvbGxp
bmcvb3ZlcmZsb3cuCisKKyAgICAgICAgV0lQIHBhdGNoLCBzcXVhc2hlZCBmb3IgRVdTIHRlc3Rp
bmcuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUp
OgorCiAyMDIwLTExLTE5ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29t
PgogCiAgICAgICAgIFtUZXh0dXJlTWFwcGVyXSBSZW1vdmUgbV90ZXh0dXJlTWFwcGVyIGZyb20g
VGV4dHVyZU1hcHBlckxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IGY3
N2MyNjJlMDk0Zi4uMTUyNDk4YWIzMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CkBA
IC0yMDQ4LDggKzIwNDksMTEgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFyYW0s
IExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQgdGhl
IGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNvcmVGcmFt
ZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAgc2Ny
b2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0
YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXNj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCktPnNj
cm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xsZWRBcmVhKTsKKyAg
ICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpICYmIEJl
Z2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkpKSB7CiAg
ICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7Cg==
</data>
<flag name="commit-queue"
          id="432014"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416053</attachid>
            <date>2020-12-11 15:32:53 -0800</date>
            <delta_ts>2020-12-11 15:44:53 -0800</delta_ts>
            <desc>Patch, v17 (squashed for testing)</desc>
            <filename>patch-v17.diff</filename>
            <type>text/plain</type>
            <size>300565</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZWIxODViYWUzYjYuLmUwNjg0NmI1ZGY1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2NyBAQAorMjAyMC0xMi0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1h
bm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2Yg
UmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxs
IHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIs
IHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2Fi
bGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQg
c2Nyb2xsaW5nL292ZXJmbG93LiAKKyAKKyAgICAgICAgU3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5n
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0
VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVu
Y2xvc2luZ0JveCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24p
OgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZSk6CisgICAgICAgICogcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUFy
ZWFGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNv
bXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Ny
b2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9s
bGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNj
cm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJs
ZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYW5TY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNj
dXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9y
U3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
YXNPdmVybGF5U2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBS
ZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdT
dGFja0xheWVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Ny
b2xsQ29ybmVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xs
YWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNj
cm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmFw
cGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xh
bXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y3JlYXRlT3JEZXN0cm95TWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3Jv
bGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2
aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dD
b250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZs
b3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVy
ZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3Zl
cmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVz
aXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxF
dmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNsZWFyU2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVs
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Ny
b2xsRnJvbVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3Vt
ZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01v
Y2tTY3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDogQWRkZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXJxdWVlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp0aW1lckZp
cmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisKIDIwMjAtMTItMTEgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJhY2twYWQgYW5k
IE1vdXNlIHNjcm9sbCBldmVudHMgb24gaVBhZCBvbmx5IGZpcmUgInBvaW50ZXJtb3ZlIiAtLSBu
b3QgIndoZWVsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDA5MGY2NDViOWQ1Li41YzQxOGM3ZGM5
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ4Niw2ICsxNDg2LDcgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBhNDlmMzY4MmEyZjIuLmVmZWIyNTRjMGZiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAg
LTIyMjcsNiArMjIyNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3Rh
dGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDUyMmFjMjMwM2RkYi4uNzQ0ZjQzY2ZmZmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDgx
LDYgKzQwODEsNyBAQAogCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODM3
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRUE0ODM5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg3QTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUE0ODNCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNTNG
Qjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODgwMDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg4NzA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJUaGVtZU1hYy5oICovOyB9OwogCQlCQ0VBNDg4QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
VGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDQzLDYgKzYwNDQsOCBAQAogCQkw
RjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUz
RkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNG
Qjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTNGQjhCMjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjczLDYgKzI5Njc2LDggQEAKIAkJCQkw
RjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJ
M0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICov
LAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0
LmggKi8sCisJCQkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwICovLAorCQkJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8q
IFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0Mg
LyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApAQCAtMzQxNTYsNiArMzQxNjEsNyBAQAogCQkJ
CTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjUzRkI4NDIxM0I3
QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJv
eExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXgg
MDIzMDBkOTg3ODUxLi40NjBlNjVmYjc4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtODMs
NiArODMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTA2
LDcgKzM5MDcsNyBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJl
U2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LmxheWVyKCkgPyBib3gu
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApA
QCAtMzkxOSw3ICszOTIwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3Jv
bGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVz
dCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKKyAgICBib3gubGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxU
b09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCmluZGV4IDljYWEzYzhlNmVmNy4uOGQ3MTFiNjU0ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC05Miw2ICs5Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXIuaCIKQEAgLTEzMzUsOCArMTMzNiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Ny
b2xsTGVmdChpbnQgbmV3TGVmdCkKICAgICAgICAgaW50IGNsYW1wZWRMZWZ0ID0gY2xhbXBUb0lu
dGVnZXIobmV3TGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
ICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJl
aGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9s
bDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KGNsYW1wZWRMZWZ0LCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7
Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQot
ICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0
YXRlKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXIt
PmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hl
ZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTM1OSw4ICsxMzYwLDggQEAgdm9pZCBFbGVt
ZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3AgPSBj
bGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkp
OwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhT
Y3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0
ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRUb3As
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1h
dGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVy
KCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRj
aGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJM
YXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCmluZGV4IDliNjdkMjk3ZTE5MS4uODRkZTk4YzhiYWU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCkBAIC0yMzkxLDkgKzIzOTIsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3Qg
U2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAg
ICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRy
dWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFs
TW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxp
bmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdl
KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xp
ZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50
LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcApp
bmRleCAwYWRmN2QxNjRlMmUuLjJmOGNiNjliZTM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtMTc1LDcgKzE3NiwxMCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJl
bmRlck1hcnF1ZWUoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIo
KS0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRl
ckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApp
bmRleCAyZGU0M2RhZDVhOWYuLmMwMmE4ZDc2YzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI1Myw5ICsyNTQsMTEg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlu
bmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIGlubmVyTGF5ZXJTY3JvbGxh
YmxlID0gaW5uZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lPigqcmVuZGVyZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBp
bm5lckxheWVyLT5zY3JvbGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsV2lkdGgo
KSwgMCk7CisgICAgaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldCk7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1Z2dlc3Rp
b25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzgyZmY3YzVkM2Y2
Li4xNTFlNzVhNTc2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTgw
LDYgKzgwLDcgQEAKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE1
MDEsNyArMTUwMiw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJz
b3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgICAgICBpZiAo
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludElu
UmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAg
ICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBs
YXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhX
ZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0
UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTg1MSw5ICsx
ODUyLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVM
YXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
YWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMjk4MCw3ICsyOTgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5vZGUqIHN0YXJ0Tm9k
ZSwgY28KIAogICAgIFJlbmRlckJveCogY3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5j
bG9zaW5nQm94OwogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlm
IChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7
CisgICAgICAgIGlmIChhdXRvKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVy
KCkgPyBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRl
cmx5aW5nUGxhdGZvcm1FdmVudCgpOwogICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5k
bGVkOwogICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCA4ZGUzZGVlZmQzYTguLjZhNDg4ZjFlM2FmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcApAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTkzLDcgKzI1OTQsOCBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYg
KCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhp
cy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3Jv
bGwoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMyMDgsNiArMzIxMCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6c2Nyb2xsVG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICIgYW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byog
ZW5jbG9zaW5nTGF5ZXIgPSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
OworICAgIGlmIChlbmNsb3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgIGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCk7CisKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0
aGUgYW5jaG9yLgogICAgIC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNp
ZGUgKHRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjAsNyAr
Mzg2NiwxMSBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KGJvb2wqKSBjb25zdApAQCAtNDMyNCw4ICs0MzM0LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExh
eWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2
aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAg
aWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50
UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJz
KGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVSb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0
LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRl
bnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEz
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOTQsNyArMzk1LDggQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIs
IEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0
Mi4uOGE0Y2E3YmNkMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNTcs
NiArNTcsNyBAQAogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCiAj
aW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW1wb3J0ICJS
ZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCkBAIC04MTks
MTQgKzgyMCwxNSBAQCB2b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZv
ck5vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIg
fHwgIXJlbmRlcmVyLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJM
YXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlciku
bGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5
cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBh
dXRvIG9sZFNjcm9sbFR5cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
IAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CisgICAgc2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6
IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdl
b2xvY2F0aW9uUGVybWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KaW5kZXggNzE0MTUzNjViYWJhLi42ZjM4M2RhMDNiZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBv
cnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJl
bmRlckxheWVyLmgiCisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1w
b3J0ICJSZW5kZXJMaXN0Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJS
ZW5kZXJXaWRnZXQuaCIKQEAgLTc5MSw3ICs3OTIsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVy
TGlzdEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZi
b3gpOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgewor
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVu
IGluIHRlcm1zIG9mIFNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMzU4ZDY2Zjk4NzIz
Li4xZGUzZTA3NTA2YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKQEAgLTExMTMsOCArMTExNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgLy8g
ei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIs
IHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dy
b3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91
bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkg
PT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAg
IGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3Vu
ZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5m
by5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRP
bmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dD
b250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAwOCwxMiBAQCBib29sIFJlbmRlckJs
b2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1
bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChs
b2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwog
fQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjUwMywx
MCArMjUwOSwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNv
bnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdo
aWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAg
b24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9y
IGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVy
ZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAg
IGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDog
KGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsK
LSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNl
bGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsK
KyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkgLT4gYm9v
bCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2Vs
aW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7
CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewogICAg
ICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2Vs
aW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCmluZGV4IDg1YzNiNzEzYThiOC4uNTBmNjBmMTkwZDhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ5LDcgKzM0OSw4IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlv
dXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAm
JiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdp
dGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5
ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6
b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxh
eWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhkODUz
YWEyYzhhYS4uMmFkMWU0ZWY1MTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOSwxMCArMzIwLDEyIEBAIHZvaWQgUmVuZGVy
Qm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlCiAgICAgLy8gSWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhh
dmUgYSBkZWZpbmVkIHNjcm9sbExlZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVl
IGludG8gdGhlCiAgICAgLy8gbmV3IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgogICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZl
Y3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9s
bFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8g
b2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUo
em9vbVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0
aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9v
bSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91
dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5kZXJCb3g6
OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25z
dAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+
c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
KGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9w
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAg
cmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojpy
ZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEgKzU5NSwz
OCBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXll
cikKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBsYXll
ci5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZl
bnRUZXN0TW9uaXRvcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgYXV0byYg
c2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7CisgICAg
c2Nyb2xsQW5pbWF0b3Iuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3
TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAg
ICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJl
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVy
KCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWVBvc2l0
aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlv
biwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25p
dG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MjYs
MTIgKzgzOCwxOCBAQCBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJT
aXplKCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAg
IGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5j
bHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxi
YXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xs
YWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVu
ZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEz
ICs4NTcsMTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRo
KCkgY29uc3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsK
IAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAm
JiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVy
bGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxl
TGF5ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAm
JiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVy
bGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5o
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFi
bGVMYXllciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
ci0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzUsOCBAQCBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRl
ckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hM
YXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKSB7CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCkt
PmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVy
U2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAg
ICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTA4LDEzIEBAIGJv
b2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigp
OwogICAgIGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
Ly8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hl
biBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAg
ICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Ny
b2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9u
QmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAg
ICAgICAgc2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1
bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2Fs
VG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
KyAgICAgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAg
ICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBA
IC05MjEsNiArOTQzLDI3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlQm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFi
bGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgUmVuZGVyVmlldyBpcyBhbHdheXMgZXhwZWN0
ZWQgdG8gYmUgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZS4KKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkg
fHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIE92ZXJmbG93IGhhbmRsaW5nIG5lZWRzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
CisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBS
ZXNpemUgaGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICBpZiAo
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gTWFycXVlZSBoYW5kbGluZyBuZWVkcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LgorICAgIGlmIChpc0hUTUxNYXJxdWVlKCkgJiYgc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAh
PSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCiAvLyBGSVhNRTogVGhpcyBpcyBiYWRseSBuYW1lZC4gb3ZlcmZsb3c6
aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCB5ZXQgdGhpcyByZXR1cm5z
IGZhbHNlIGluIHRoYXQgY2FzZS4KIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxs
eVNjcm9sbGVkKCkgY29uc3QKIHsKQEAgLTk5Nyw4ICsxMDQwLDggQEAgUmVuZGVyQm94KiBSZW5k
ZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lk
IFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYg
KGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwor
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFuU2Nyb2xs
RnJvbVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNzAsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVu
ZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsK
IAogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9z
aXRpb24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAw
IH07CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQog
CiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0
CkBAIC0xNTc1LDkgKzE2MjIsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5k
SXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAo
IWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCkt
PnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFj
a2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAg
LTE4OTQsMTAgKzE5NDIsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVj
dC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9y
ZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3Vi
dHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7
CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlw
UmVjdC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAg
ICAgICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1
cm4gY2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMjNiYjc4
MTljMjI4Li5iYWI5ZGQwNjI5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
QEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0
b1VzZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAg
fQogCisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAg
ICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZv
ciB0aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRo
ZSByb290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKaW5kZXggODM4MjU2YzExZWYyLi41YTI1OTE2MWIxZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiAr
NTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVS
b3cuaCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29t
cHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAg
ICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAt
CiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgp
ICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xv
c2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGlu
Z1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5n
QmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29u
dGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAg
IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29u
dGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBj
b25zdHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlv
blZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNr
eUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3Np
bmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5n
TGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2lu
Z0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0
aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNv
bnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3Np
bmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0
aGlzfCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGlu
Z0FuZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAg
ICBGbG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2Fs
VG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94
KCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Ny
b2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7
Ci0gICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkK
LSAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwor
ICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdD
bGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYg
c2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJP
ZmZzZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWlu
aW5nUmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxi
YXJPZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmlu
Z1JlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwOGVj
ZTc2MmQ5YmQuLjBmNjg0Y2VmOGI4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBB
ZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEg
Uy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29t
bXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAt
MzAxLDE4ICszMDMsMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xp
c3REaXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAg
LCBtX2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRy
dWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAs
IG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3Vz
ZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihm
YWxzZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50
U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNE
aXJ0eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlz
aWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2Nl
bmRhbnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAg
ICAsIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVz
QXNGaXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0
eSh0cnVlKQpAQCAtMzIwLDIxICszMTksMTEgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9u
Q29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWdu
T2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVh
c29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0g
ICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTgs
MTYgKzM0Nyw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRl
ckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24u
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzUsMjkgKzM1NCwxMCBAQCBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92
ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNp
emVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVy
RmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAt
OTQ2LDcgKzkwNiw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklm
TmVlZGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlm
IChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0
b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTU0LDcgKzkxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0
aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAg
ICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxv
d0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAg
ICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRT
aXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkp
KTsKQEAgLTk2Myw3ICs5MjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAg
ICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNl
c3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2Vz
dG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xz
KHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9v
dCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAt
MTAzOSwxNCArMTAwMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgZm9yIChSZW5k
ZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlN
YXAsIGZsYWdzKTsKIAotICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBu
b3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkg
ewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQg
aXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRl
TWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
IHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRM
YXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI2LDI3ICsxMDgxLDYgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJS
ZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5k
ZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVu
ZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMg
IT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1h
cHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5
IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3Jk
ZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Ny
b2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVy
ZQpAQCAtMTE5OSwxMiArMTEzMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8g
b2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2Vs
ZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92
ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1
ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBk
YXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAg
IGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BN
YXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5NSw4ICsxNjI1LDEwIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQ
YXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5w
b3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0
cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4K
LSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFy
ZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3Np
dGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0
aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5G
bG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVu
ZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVu
ZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQ
b3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3
MDYsOCArMTYzOCwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQo
cG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9i
b3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAg
ICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0
aW9uKCkpOworICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVh
ID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9z
aXRpb24oKSk7CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJl
bnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwpAQCAtMTgzOSw5ICsxNzczLDkgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQor
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29u
c3QKIHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1MiwxNSArMTc4NiwxNSBAQCBzdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMp
CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAg
IGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250
YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAo
Y3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KGxheWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91
bmRhcmllcykgY29uc3QKQEAgLTE4NzQsNyArMTgwOCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNl
bGYsCiAgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
ICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFy
aWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFy
aWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25z
aWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5
ZXI7CiAgICAgfQpAQCAtMTg4Miw1MCArMTgxNiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYs
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFi
bGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICov
IHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdD
b29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmlt
YXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFu
aW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QK
LXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlE
KCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Ny
b2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFy
c09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5zY3JvbGxpbmdQZXJmb3JtYW5jZVRlc3RpbmdFbmFibGVk
KCk7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRB
bmNlc3RvcigpIGNvbnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAg
LTI0NTEsMTkgKzIzNDEsNiBAQCBMYXlvdXRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5j
ZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0
b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9p
bnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRl
cmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBp
ZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5z
aWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5B
QkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNj
cm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Nj
cm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92
ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQog
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDkz
LDI4OSArMjM3MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXll
cnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5
ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRl
IGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVy
KCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQg
YmVnaW5uaW5nRGVsdGEpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJl
Zm94J3MuCi0gICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29s
a2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVk
UmVkdWNlciA9IDEyOwotCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAv
IHNwZWVkUmVkdWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVz
dGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19j
YXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWRE
ZWx0YSA8IC0xKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1
c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsg
MTsKLQotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNp
emUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1
cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNj
cm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9p
bnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBj
aGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRv
dy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBp
bmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAg
ICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9z
aXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3Vz
TW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9
IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3du
TW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgp
KSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBs
ZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAg
ICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1
cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVs
eShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRo
IHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVh
Kiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAo
cmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJl
bmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBp
ZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1w
KSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAg
ICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7
Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0
aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUg
cmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVy
KCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFi
bGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsK
LQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1
dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUg
cHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBh
biBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0
aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAg
ICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAg
ICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3
YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0g
ICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsK
LSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0g
ICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmlt
YXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBv
c2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Ci17Ci0gICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNj
cm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9m
ZnNldCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlv
clN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikK
LSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNl
dDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50
U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0g
ICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFt
cGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6
Ok5vdEluQW5pbWF0aW9uKTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Ny
b2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9
IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlw
ZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0
OwotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlv
clN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCku
Y2FuY2VsQW5pbWF0aW9ucygpOwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Ny
b2xsT2Zmc2V0KCkpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhB
bmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHBy
ZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBv
c2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3Jv
bGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIp
OwotCi0gICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAo
IWJveC0+aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1l
bnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6
aGlkZGVuIGJsb2NrcykuCi0gICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAg
ICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5
aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAg
ICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gt
PmNsaWVudFdpZHRoKCkpOwotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Ny
b2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNl
dCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0g
Y2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAt
IGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRo
OwotCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAg
ICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9
PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxC
ZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhp
bmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0
aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxp
bmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3
aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRy
eVVwZGF0ZSgpOwotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBv
c2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIo
KS52aWV3KCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5
ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5
IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBi
ZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBh
bmNlc3Rvci4KLSAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5S
ZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBv
ZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNo
ZWQuCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwot
Ci0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMo
KTsKLQotICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAg
ICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRo
ZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9z
aXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2Yg
dXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNl
IHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBv
c2l0aW5nIGxheWVycyBsYXRlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4K
LSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21w
b3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0g
ICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBz
dGFja2luZyBjb250ZXh0LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHN0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0
RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5n
IG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7
Ci0gICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgp
KTsKLSAgICB9Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29u
dGFpbmVyRm9yUmVwYWludCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGlu
dmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0
UmVjdE5lZWRzVXBkYXRlKCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9
IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRM
YXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JG
YWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChy
ZXBhaW50Q29udGFpbmVyKQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVw
YWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50KTsKLSAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVu
dFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVp
cmVzUmVwYWludCA9IHRydWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsK
LSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0
ZWRTY3JvbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50
IG9mIG91ciBvYmplY3QuCi0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVy
ZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFp
bnQpOwotCi0gICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9N
IGV2ZW50cy4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgp
KQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdl
dCgqZWxlbWVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcu
ZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmll
dygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVy
TGF5ZXJEaWRTY3JvbGwoKnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVt
ZW50QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50
QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVu
J3QgZXhwbGljaXRseSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODIwLDcgKzI0
MTQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0
ID0gYWJzb2x1dGVSZWN0OwogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250
YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBh
dXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObyk7CiAKICAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0g
W3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQogICAgIHsK
QEAgLTI4MzAsNiArMjQyNCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2li
bGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgfTsKIAog
ICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgICAgIC8vIERvbid0
IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5
IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBw
cmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2Fm
YXJpIFJTUy4KICAgICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKQEAgLTI4NDAs
MjQgKzI0MzYsMTcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgLy8gYm9yZGVy
IGVkZ2UuIE1ha2UgdGhlIHJlY3RhbmdsZSByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsYWJsZSBhcmVh
LgogICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KC1MYXlvdXRQb2ludChib3gtPmJvcmRl
ckxlZnQoKSwgYm94LT5ib3JkZXJUb3AoKSkpOwogCi0gICAgICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBG
b3IgZGlyZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBz
Y3JvbGwgYmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAg
ICAgIC8vIHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4
IG9mIGxvY2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0
b28uCi0gICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5t
b3ZlQnkoTGF5b3V0UG9pbnQoLXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpLCAwKSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAg
ICBleHBhbmRTY3JvbGxSZWN0VG9WaXNpYmxlVGFyZ2V0UmVjdFRvSW5jbHVkZVNjcm9sbFBhZGRp
bmcoYm94LCBsYXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0KTsKICAgICAgICAgTGF5b3V0UmVj
dCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJl
Y3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAg
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQo
c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9j
YXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBz
aG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgb3B0aW9ucy5iZWhhdmlvcik7
Ci0gICAgICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
Y2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0g
ICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7
Ci0gICAgICAgICAgICBuZXdSZWN0ID0gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3Jtcyku
Ym91bmRpbmdCb3goKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc2Ny
b2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxQb3NpdGlvbihvcHRpb25zLmJlaGF2aW9yLCByZXZl
YWxSZWN0LCBsb2NhbEV4cG9zZVJlY3QpKQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52
YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVy
RWxlbWVudCgpOwogCkBAIC0yODcxLDcgKzI0NjAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNp
ZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8g
cHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAg
ICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93
ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZp
ZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAg
ICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRl
bnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAog
ICAgICAgICAgICAgICAgIGF1dG8qIGVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1
bWVudCgpID8gb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkgOiBudWxscHRyOwogICAgICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVt
ZW50ID8gZWxlbWVudC0+cmVuZGVyQm94KCkgOiBudWxscHRyOwpAQCAtMjk0OCwyMyArMjUzNyw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAg
aWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAg
ICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwg
b2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmlu
Zywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5j
bG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNv
bXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRp
b25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlU
cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNl
c3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3Qg
U2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBj
b25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCk7CkBAIC0zMTExLDcgKzI2ODMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgog
ICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAg
IAogICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewor
ICAgIGlmIChyZW5kZXJlci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7CiAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwog
ICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lk
dGgoKSk7CiAgICAgfQpAQCAtMzEyOSwxMDg1ICsyNzAxLDE2NiBAQCB2b2lkIFJlbmRlckxheWVy
OjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUm
IG9sZE9mZgogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21G
YWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVu
aXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAw
X2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAg
ICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9J
bnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgfQotCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVy
ZW5jZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
KmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0
aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9v
bUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJl
ci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAg
ICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0
KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVy
QW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6
b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhl
aWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBk
YXRlTGF5b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBh
bHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQg
dW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3Jv
bGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxp
bmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVT
dGF0ZT4gZ2VzdHVyZVN0YXRlKQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQotICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkg
ewotICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRv
ci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2Rl
SUQoKSwgZ2VzdHVyZVN0YXRlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBnZXN0dXJl
U3RhdGUpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRl
cm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVz
aW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNj
cm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxi
YXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNl
ID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRo
aXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6
Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0
ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkp
IH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAot
ewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBG
SVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNl
dEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUg
PSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgp
IDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAg
ZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVh
Y2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5z
ZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAg
IHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hh
YmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAg
ICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBh
Z2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxh
eWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9s
bENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkp
OwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVy
ZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigm
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJ
bnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9p
bnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVu
ZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChz
Y3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJu
IEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+
Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWln
aHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRz
U2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0g
ICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgo
KSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4o
Y29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICBy
ZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAg
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0g
ICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hh
bmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVs
YXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgp
OwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6
ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4g
d2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgot
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3Jv
bGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQot
Ci1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAg
IGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJl
bmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAw
OwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lk
dGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5n
ZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25P
dmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Ny
b2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkg
IT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVO
b25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Ny
b2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9s
bGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXpl
IGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAv
LyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUu
Ci0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9Owot
ICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0g
ICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJT
aXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3Qu
Y29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAg
ICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdo
dCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAg
IH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAg
IGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21M
ZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgp
LCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJT
aXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUp
OwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRD
b3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xs
YmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQot
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50
U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRl
ckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6Omlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBs
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsK
LX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAg
IGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJh
cj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJl
ciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3Rv
bVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAg
ICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVu
dCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVn
dWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9u
KTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9u
TnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3Jv
bGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92
QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNj
cm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJh
cihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikK
LXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIg
PSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNj
cm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNj
cm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJh
ciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUg
c2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHls
ZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
IGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAg
ICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0
eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5k
aW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0
b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNj
cm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bw
b3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFy
LT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxl
Q2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkK
LXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwot
fQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhU
TUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkp
IHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0g
ICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5z
dHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAo
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9k
ZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1
cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0g
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsK
LX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVy
IDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2Up
LCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAo
dHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7
Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1v
ZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAg
ICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xh
dGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAv
LyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAg
ICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tp
bmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2
YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYg
KHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAg
ICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAg
ICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQot
ICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5l
cik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVj
dChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVy
biBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWln
aHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxv
d0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNp
emUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkp
OwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgp
IC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9s
bGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBz
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJv
cmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZs
b3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93
WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJu
IHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xs
SGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0K
LXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93
ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0
eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxl
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3Rh
dGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVy
ZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIg
PyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBv
dmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxl
IG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJl
bmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBh
Z2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7
Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJh
cnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRy
dWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWlu
U2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSBy
YW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAg
ICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Nj
cm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJl
Zm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNl
IG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwot
I2VuZGlmCi0KLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBM
YXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJ
biB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0
cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBl
bmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBw
b2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8g
b2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Ci0K
LSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9u
VXBkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkK
LSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBiYXNlV2lkdGggPSBiYXNl
V2lkdGggLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVy
ZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQogCi0gICAgaWYgKHJl
Y3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2Uu
aGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVt
ZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRo
ZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAg
IH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0g
KGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZh
Y3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQo
KSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAotICAgIGlmIChyZWN0cy5yZXNpemVy
LmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgCisgICAgZG9j
dW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUUg
KFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMg
bmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK0ludFNp
emUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJ
IHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5k
aWYKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAg
ICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIElu
dFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xp
ZW50SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRy
b2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KQorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdl
IGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAotICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
aXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUg
dGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xs
YmFyKCkpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBh
c3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8v
IG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGlu
ZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFu
ZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJs
YXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwg
Y2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAg
IC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUs
IGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0
IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlm
IChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgewot
ICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQot
ICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRo
ZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxv
Y2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5
KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJl
Y3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGJvb2wgcGxhY2VW
ZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5zaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVy
KCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAKLSAgICAgICAgUmVuZGVyTGF5
ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAg
aWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBh
dXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChw
bGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRv
bUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29y
bmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54
KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVy
U2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250
cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVy
U2l6ZSB9OworICAgIH07CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGF2ZVJl
c2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZXIg
PSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7
CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGlu
ZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBh
aW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9j
YWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAg
ICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxs
eSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0g
ICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90
YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4
ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRv
SW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVn
RGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6
ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJh
cnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYm
ICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChj
b250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7
CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFu
c2Zvcm0iX3MpOwogCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFz
IGZpbHRlciJfcyk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hp
dGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVw
IHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihj
b250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQ
YWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xs
IGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwg
ZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIElu
dFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShw
YWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotICAgIGlmICht
X3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChj
b250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
aXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVy
L1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAg
ICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFp
bnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQK
LSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Ny
b2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
fQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK0lu
dFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQm
IGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFn
ZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0g
ICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAg
ICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAg
ICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFn
ZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigp
KTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwot
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0g
ICAgfQotCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
cmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXpl
ckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNp
emVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAs
IDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250
ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAg
ICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBp
eGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3Ju
ZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5l
ckltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29ybmVyID0gcmVuZGVyZXIoKS5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5t
aW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1
cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRlckxheWVy
OjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNp
emUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMg
PSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91dFJlY3QgcmVzaXplckFic1Jl
Y3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNl
dCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBt
X3Njcm9sbGFibGVBcmVhLT5zY3JvbGxXaWR0aCgpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAg
ICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJB
YnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6
ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUg
YXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9s
bGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFu
ZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxi
YXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6
ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJz
UmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3Ju
ZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAg
ICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcg
fSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNv
bnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0
dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwog
fQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxv
Y2FsUG9pbnQpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
SGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5j
b250YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0
T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhZ
KCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgp
CiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKyAgICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxh
eW91dCgpOworfQogCi0gICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVu
ZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAo
cmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KK2Jvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBm
YWxzZTsKK30KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xs
Q29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZC
YXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAg
IGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAg
ICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJlbmRlckxheWVyOjpoYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAobV9oQmFy
ICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBp
ZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAg
ICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJlbmRlckxheWVyOjpoYXNPdmVy
bGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpOworICAg
IHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
cikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9j
YWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVo
YXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0
aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkK
QEAgLTQyMjUsMTcgKzI4NzgsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgICAgIHdp
ZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckxheWVy
OjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVo
YXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKLXsKLSAgICBpZiAoIW1fY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXll
clBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VS
ZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKLSAg
ICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWc6OlBhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8s
IE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBjb25zdCBDbGlwUmVjdCYg
Y2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxlKQogewogICAgIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9y
KCk7CkBAIC00MjU4LDcgKzI5MDAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAg
IC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJs
ZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4g
b3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc28gd2UgY2hlY2sgdGhhdCBh
bHNvLgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHJ1bGUgPT0gSW5jbHVkZVNl
bGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxheWVyOyBsYXllciA9IGxheWVy
LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFp
bnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBib29sIHVzZXNDb21wb3NpdGVk
U2Nyb2xsaW5nID0gbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAg
ICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3Zl
cmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVy
KCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3Jk
ZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXll
cikpIHsKQEAgLTQ3NjMsOCArMzQwNiwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAg
ICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQot
ICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21l
bnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkgeworICAgICAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xs
YmFycyAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxiYXJzKCkpCisgICAgICAgICAgICAg
ICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJy
ZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICB9CiAKICAgICAgICAgaWYg
KGZpbHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RG
cmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlSZWN0IHdhcyByZXNldCB0byByZXByZXNl
bnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01MjM0LDExICszODc5LDEzIEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFn
bWVudHMmIGxheWVyCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJ
bmZvKQogeworICAgIEFTU0VSVChtX3Njcm9sbGFibGVBcmVhKTsKKwogICAgIGZvciAoY29uc3Qg
YXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgewogICAgICAgICBpZiAoZnJhZ21lbnQu
YmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFj
a2dyb3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91
bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24o
KSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNl
dCkpLAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludE92ZXJmbG93Q29udHJvbHMoY29u
dGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJw
aXhlbE9mZnNldCkpLAogICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxv
Y2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CiAgICAgfQpAQCAtNTI3
Nyw3ICszOTI0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgogICAgICAgICAgICAgICAgIGFi
c29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAg
IGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdCk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZp
c2libGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTGF5ZXIq
IGluc2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIG51bGxwdHIsIHJlcXVlc3QsIHJlc3Vs
dCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UpOwpAQCAtNTUwOCw3ICs0MTU1
LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9y
KHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2Fu
UmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0
VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAgIGlmIChjYW5SZXNpemUoKSAmJiBtX3Nj
cm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhpdFRlc3RSZXNpemVySW5GcmFnbWVu
dHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKICAgICAg
ICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7CiAg
ICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTU1ODMsMzUgKzQyMzAsNiBAQCBib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
cjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJG
cmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQ
b2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlmIChsYXllckZyYWdtZW50cy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYm9yZGVyQm94UmVj
dCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVy
Qm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0K
LSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdt
ZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgewotICAgICAgICBpZiAoc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICBJ
bnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5l
cigpIC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJ
bnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0
b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0
LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJp
Z2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1h
eFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhY
TWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgp
LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9IGxheWVy
RnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IExheWVy
RnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgIGF1dG8g
cmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJl
Y3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKLSAgICAgICAgaWYgKGZy
YWdtZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNp
emVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgp
KSkgewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0
TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5
ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFp
bmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUq
IHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBAIC02MDczLDcgKzQ2OTEsOCBA
QCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3Vu
ZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOworICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICByZWN0Lm1vdmVCeSgtbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xs
UG9zaXRpb24oKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBu
dWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChy
ZW5kZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYzNzEsMjEgKzQ5OTAsNiBAQCBib29sIFJlbmRlckxh
eWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBt
X2JhY2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXll
cjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9i
YWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxw
dHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBS
ZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAotewotICAgIHJldHVybiBt
X2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwot
fQotCiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWlu
dEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5k
b3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBA
IC02NDE2LDExICs1MDIwLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0
aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4g
cGFpbnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0Ns
aXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxC
YWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3Vu
ZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29u
c3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5n
TGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NjYxLDcgKzUyNjAsNyBAQCBib29sIFJlbmRlckxheWVy
OjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNv
bnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVC
b3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAg
ICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Ny
b2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsK
IH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50
UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzEsNyArNTI3MCw3IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3Qp
IGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxl
KCkub3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIo
KS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYg
KHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFy
ZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2OTYsMzggKzUyOTUsNiBA
QCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1
ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJz
KCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVy
U3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJm
bG93IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRz
IGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0
byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgp
Lm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVy
Zmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJh
ciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6
b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwg
SG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9
IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xs
YmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Ny
b2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxT
Y3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3Jv
bGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9s
bGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hl
biBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAo
c2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxi
YXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3Jv
bGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0
RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJh
ciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRF
bmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAg
ICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRl
ckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFs
Rmxvd09ubHkoKSk7CkBAIC02NzQ4LDYgKzUzMTUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHls
ZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAg
ICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5n
ZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAg
ICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRT
dHlsZSkgewpAQCAtNjc1OSwxOCArNTMyOCwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQog
ICAgICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAg
ICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAg
IGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVy
ZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAm
JiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAg
ICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAg
ICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJx
dWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFy
c0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7
CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uo
b2xkU3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhp
cyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhl
IGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBh
aW50aW5nTGF5ZXIoKTsKQEAgLTY3ODUsMTMgKzUzNTAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpz
dHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZy
b20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYg
KG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFy
KQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9s
bENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJh
clJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7
CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODEyLDk4ICs1MzcyLDYgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVW
aWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJs
ZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVt
ZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAm
JiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBp
c1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9v
bCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRT
Y3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7
Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJl
ZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmll
dy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVt
b3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAg
aWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBX
ZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93
IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwg
cmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAg
dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewot
ICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIo
cmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6
U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwot
Ci0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAg
bV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5k
ZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTog
QSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Nj
cm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNs
ZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Nj
cm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6
ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5
bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVs
bHB0cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1f
cmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCku
ZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5k
ZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXIt
PnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0
eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgq
cmVzaXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAg
IGlmICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jl
ZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4NSw2ICs1
NDUzLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2Zp
bHRlcnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxh
YmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRy
OworICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVD
aGFuZ2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsKQEAgLTcwMDEsNiArNTQ4OSwxNiBA
QCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAg
ICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAoIWlz
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkgfHwgIWRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIo
KSkucmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGNsZWFyTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJl
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0
ZXJQYWludGluZ1N0cmF0ZWd5KCkKIHsKICAgICAvLyBSZW5kZXJMYXllckZpbHRlcnMgaXMgb25s
eSB1c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVycyBpbiBzb2Z0d2FyZSBtb2RlLApAQCAtNzAzNSw3
ICs1NTMzLDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29u
c3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJl
bnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFt
ZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5k
ZXJMYXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGlu
Z1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03MDU3LDYgKzU1NTUsMTEgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c2ltdWxhdGVGcmVxdWVudFBhaW50KCkKICAgICBTaW5nbGVQYWludEZyZXF1ZW5jeVRy
YWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIsIHBhZ2UoKS5sYXN0UmVuZGVyaW5nVXBk
YXRlVGltZXN0YW1wKCkgfTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVuZGVy
TGF5ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxl
QXJlYS5nZXQoKTsKK30KKwogI2lmICFMT0dfRElTQUJMRUQKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllcjo6RXZlbnRSZWdpb25JbnZhbGlk
YXRpb25SZWFzb24gcmVhc29uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAppbmRleCA2NjI2ODJmZDE1NTUuLmQxMDFhNGU5OTczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5
cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpA
QCAtNTEsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRl
clB0ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgUmVuZGVyR2Vv
bWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBSZW5kZXJMYXllckNv
bXBvc2l0b3I7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFzcyBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7
CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsxNDQsMjEgQEAgc3RydWN0
IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWlu
dDY0X3Q7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxh
eWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsK
K2NsYXNzIFJlbmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVy
TGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxh
eWVyQmFja2luZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAg
IGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogCiAgICAgZXhwbGljaXQg
UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRl
ckxheWVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRn
ZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3ll
ZCgpOwpAQCAtMjIzLDYgKzIyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11
dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBm
bGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2
YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRl
ciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MTksNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0
IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50
aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAg
IGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTA3ICs0MzksMjkgQEAg
cHVibGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVj
dChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29u
c3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJ
bnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50
U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0OwogCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7
CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9t
UG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBs
YXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlS
ZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxl
ZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3Jv
bGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zm
c2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkKTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0g
QW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBT
Y3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmlt
YXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3Np
dGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6
Ok5vKTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lk
IHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwg
c2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFt
cGluZzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNj
cm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2
b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4p
OwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCiAg
ICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxh
YmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXll
ciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJs
ZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lkIGF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsK
LQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRl
cy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1
dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9u
cyYpOwotCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29u
c3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wp
OwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0
aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwot
Ci0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpv
bnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFy
ZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAg
ICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92
QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVh
KCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmco
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3Rh
dGU+KSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5h
bDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5h
bDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0j
ZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0K
LSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJl
cXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRs
ZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAg
ICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3Jv
bGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0K
ICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xs
aW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xs
YWJsZSBvdmVyZmxvdy4KICAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25z
dDsKICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxl
IG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBo
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KCkgY29uc3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXpl
KSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAg
ICBib29sIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc092ZXJm
bG93Q29udHJvbHMoKSBjb25zdDsKICAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50
UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNp
emUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29u
c3Q7CiAKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qp
OwotICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBv
aW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7Ci0KICAgICB2b2lkIHVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwogICAgIHZvaWQgYXV0
b3Njcm9sbChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsK
QEAgLTU1Niw5ICs0ODQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJM
YXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAK
LSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBi
b29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7
CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFn
aW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1v
ZGUgbW9kZSkgY29uc3QKQEAgLTYzOCw2ICs1NjMsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24oUG9zaXRpb25UeXBlKSBjb25zdDsKICAg
ICAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVy
KCkgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5n
RnJhbWVSZW5kZXJMYXllcigpIGNvbnN0OwogCiAgICAgLy8gVGhlIGxheWVyIHJlbGF0aXZlIHRv
IHdoaWNoIGNsaXBwaW5nIHJlY3RzIGZvciB0aGlzIGxheWVyIGFyZSBjb21wdXRlZC4KICAgICBS
ZW5kZXJMYXllciogY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKSBjb25zdDsKQEAgLTY5OSw3ICs2
MjYsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9
IG51bGxwdHIsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gPSB7IH0sIFNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpY3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4sIEV2ZW50
UmVnaW9uQ29udGV4dCogPSBudWxscHRyKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwotICAg
IHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVj
dCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0Nv
bnRleHQgewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJv
b3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVy
Zmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNzg1LDExICs3MTEsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9u
KSB7IG1fc3RhdGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3Rh
dGljQmxvY2tQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3Np
dGlvbiA9IHBvc2l0aW9uOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wg
YWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2Fk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZzsgfQotI2VuZGlmCi0KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IHJlbmRlcmVyKCkuaGFzVHJhbnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFu
c2Zvcm0gaGFzIHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4KiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsg
fQpAQCAtODU5LDE2ICs3ODAsMTEgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyog
ZW5zdXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rl
c3Ryb3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
clNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QgZmluYWw7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9p
ZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Ny
b2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAorICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdDsKKwogICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGlu
Z1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNl
ZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hT
Y3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KICAg
ICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQpAQCAtODg2LDExICs4MDIsNiBA
QCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRp
bmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3Qg
TGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3Jv
dW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAg
dm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJh
cnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7
IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVp
cmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOSw4ICs4MzAsNiBA
QCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNl
c3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCk7CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHko
KSBjb25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50
bHkoKTsgfQogCkBAIC05MzEsNyArODQwLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZl
bnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5
bGUsIE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9u
KEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2Ny
aXB0aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25z
dDsKIAogcHJpdmF0ZToKIApAQCAtMTAxMSw5ICs5MjAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAg
ID0gMSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9
IDEgPDwgMSwKQEAgLTEwMzksOCArOTQ1LDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQg
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlv
blNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwogCi0gICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0
OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShj
b25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29u
c3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVy
KCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDU0LDYgKzk1OCw5IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBlbnN1cmVMYXllckZpbHRlcnMoKTsKICAgICB2b2lkIGNsZWFyTGF5
ZXJGaWx0ZXJzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICB2b2lkIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgUmVuZGVyTGF5ZXJGaWx0
ZXJzKiBmaWx0ZXJzRm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9uU2V0PFBhaW50
TGF5ZXJGbGFnPikgY29uc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzZXR1cEZpbHRlcnMoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiwgT3B0
aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3Qs
IE9wdGlvbmFsPExheW91dFJlY3Q+JiByb290UmVsYXRpdmVCb3VuZHMpOwogICAgIHZvaWQgYXBw
bHlGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0LCBjb25zdCBMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgY29uc3QgTGF5ZXJGcmFnbWVu
dHMmKTsKQEAgLTExMDAsNjQgKzEwMDcsMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGhp
dFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVz
dEZpbHRlcikgY29uc3Q7CiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29u
c3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlw
UmVjdCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExh
eWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50
SW5GcmFnbWVudCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RUcmFuc2Zvcm1lZExh
eWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRh
aW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAogICAgICAg
ICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
Y29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNl
dCA9IG51bGxwdHIpOwogCiAgICAgYm9vbCBsaXN0QmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVl
SW5SZWN0KGNvbnN0IExheWVyTGlzdCYsIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAg
IHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB2b2lkIGNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVy
ZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OwotCi0g
ICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKLQogICAgIGJvb2wgc2hvdWxk
QmVTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50
ZXJmYWNlCi0gICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3Qg
SW50UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29u
c3QgSW50UmVjdCYpIGZpbmFsOwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qg
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0g
ICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0
IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
U2Nyb2xsT2Zmc2V0JikgZmluYWw7Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0IGZpbmFsOwotCi0gICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5h
bChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVj
dEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29u
c3QgZmluYWw7Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsK
LSAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7Ci0g
ICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQg
PSBudWxscHRyKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3Mo
KSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci0gICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0jZW5kaWYK
LSAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7
Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJlZ2lzdGVyQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICAvLyBOT1RFOiBUaGlz
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQg
ZnJvbSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0
aW9uJik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0K
LSAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKLSAg
ICAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOwot
ICAgIAogICAgIGJvb2wgYWxsb3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0OwogCiAgICAgdm9pZCBk
aXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwpAQCAtMTE5NywxNCAr
MTA1Myw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFic29sdXRlIGNv
b3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50CiAg
ICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBvaW50JikgY29u
c3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7
Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQgY2xlYXJTY3Jv
bGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgIHZvaWQgY2xl
YXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7Ci0KICAgICB2
b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRpbmdEZXNj
ZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBiOyB9CkBAIC0x
MjEzLDExICsxMDYxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEluZGlyZWN0Q29tcG9zaXRp
bmdSZWFzb24oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiByZWFzb24pIHsgbV9pbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlYXNvbik7IH0KICAgICBi
b29sIG11c3RDb21wb3NpdGVGb3JJbmRpcmVjdFJlYXNvbnMoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGlyZWN0Q29tcG9zaXRpbmdSZWFzb247IH0KIAotICAgIExheW91dFVuaXQgb3ZlcmZsb3dUb3Ao
KSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93Umln
aHQoKSBjb25zdDsKLQogICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7CiAgICAgICAg
IEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNj
cm9sbGJhcjsKQEAgLTEyMzAsOCArMTA3Myw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKIAotICAgIGJv
b2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0
KSBjb25zdDsKLQogICAgIE9wdGlvblNldDxDb21wb3NpdGluZz4gbV9jb21wb3NpdGluZ0RpcnR5
Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7CkBAIC0xMjQ4
LDcgKzEwODksNiBAQCBwcml2YXRlOgogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhl
IGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemlu
ZyB0byBzdGFydCBhbmQgc3RvcC4KICAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKIAotICAg
IGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1NlbGZQYWlu
dGluZ0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5k
YW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcu
IFRoaXMgY2FuIGxlYWQgdG8KQEAgLTEyNjAsMTQgKzExMDAsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMg
bGF5ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJ
bnNpZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBw
YWludGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQg
OiAxOwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMK
IAogICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1f
aGFzVmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1
c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwotICAgIGJv
b2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0ZpeGVkSW50
ZXJzZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6IDE7CiAK
QEAgLTEyNzgsNyArMTExNiw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faGFzQ29tcG9zaXRl
ZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzIDogMTsKICAgICBib29sIG1faGFzQ29tcG9zaXRlZFNj
cm9sbGluZ0FuY2VzdG9yIDogMTsgLy8gSW4gdGhlIGxheWVyLW9yZGVyIHRyZWUuCi0gICAgYm9v
bCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgOiAxOwogCiAgICAgYm9vbCBtX2hh
c1RyYW5zZm9ybWVkQW5jZXN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXMzRFRyYW5zZm9ybWVkQW5j
ZXN0b3IgOiAxOwpAQCAtMTI4OCwxNyArMTEyNSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3NpdGluZ1Jl
YXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFz
b24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgogCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBi
b29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKLSNl
bmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOwotI2Vu
ZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDog
MTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKLSAgICBi
b29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VOQUJMRUQK
ICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpAQCAtMTMz
OSwyNSArMTE2NSwxMSBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRoL2hlaWdo
dAogICAgIEludFNpemUgbV9sYXllclNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9s
bFBvc2l0aW9uOwotICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbjsKLQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFy
ZWEuCi0gICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJzIHdpdGgg
b3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRyPFNjcm9s
bGJhcj4gbV9oQmFyOwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAgIHN0ZDo6
dW5pcXVlX3B0cjxDbGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKLSAgICAKLSAgICBJ
bnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKICAgICBNYXJrYWJsZTxT
Y3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+
IG1fYm94U2Nyb2xsaW5nU2NvcGU7CiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVn
cmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5n
U2NvcGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAv
LyBVc2VkIGZvciA8bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZh
bHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3Rv
cCB2YWx1ZXMuCiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwogICAgIExh
eW91dFVuaXQgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2NywxMCArMTE3OSw2IEBAIHBy
aXZhdGU6CiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSByZXBsaWNh
cyAod2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5kZXJSZXBs
aWNhPiBtX3JlZmxlY3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9t
IHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJh
clBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0
PiBtX3Jlc2l6ZXI7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5
ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3Qg
cGFnaW5hdGVkLgogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFnaW5hdGlv
bkxheWVyOwogCkBAIC0xMzc4LDYgKzExODYsNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlckxheWVyRmlsdGVycz4gbV9maWx0ZXJzOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2luZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4gbV9zY3JvbGxhYmxlQXJlYTsKICAgICAKICAgICBQYWlu
dEZyZXF1ZW5jeVRyYWNrZXIgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXI7CiB9OwpAQCAtMTQ1MCw2
ICsxMjU5LDMgQEAgdm9pZCBzaG93UGFpbnRPcmRlclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVy
TGF5ZXIqKTsKIHZvaWQgc2hvd0xheWVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
KTsKICNlbmRpZgogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlbmRl
ckxheWVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYSYgYXJlYSkgeyByZXR1cm4gYXJlYS5pc1JlbmRlckxheWVyKCk7IH0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggMTFkOTRhMTFlOGNmLi45ZGQxNjI3ODgwMGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01OCw4
ICs1OCw5IEBACiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRl
cklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQxOCwxMSArNDE5LDEzIEBAIHN0
YXRpYyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tp
bmdDb3ZlcmFnZShjb25zdCBSZW5kCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgdGls
ZUNvdmVyYWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAgIGJv
b2wgdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNp
emUoKTsKICAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAgICAg
ICAgaWYgKGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAg
ICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNj
cm9sbGluZzsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9s
bGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2Ug
fD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAg
ICAgaWYgKGxheWVyLmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgICAg
ICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xs
aW5nOworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNr
aW5nOjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5nOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiB0aWxlQ292ZXJhZ2U7CiB9CkBAIC0xMjI4LDkgKzEyMzEsMTIgQEAgTGF5b3V0UmVj
dCBSZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdChjb25z
dCBSZW5kZXJMYXllcioKICAgICB9CiAKICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJs
ZUNvbXBvc2l0ZWRBbmNlc3RvciA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3IpOworCiAgICAg
ICAgIExheW91dFJlY3QgYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzID0gYW5jZXN0b3JCYWNraW5n
LT5jb21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsQ29udGFpbmVy
Qm94ID0gc2Nyb2xsQ29udGFpbmVyTGF5ZXJCb3goYW5jZXN0b3JSZW5kZXJCb3gpOwotICAgICAg
ICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxP
ZmZzZXQoKTsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVD
b21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBwYXJlbnRHcmFwaGlj
c0xheWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0g
dG9MYXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlvbigpKSAtIHRvTGF5
b3V0U2l6ZShzY3JvbGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAgICAg
fQogCkBAIC0xMzY3LDcgKzEzNzMsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAg
IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29u
dGFpbmVyQm94LmxvY2F0aW9uKCkgLSBwYXJlbnRMYXllckJvdW5kcy5sb2NhdGlvbigpKSk7CiAg
ICAgICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFNpemUocm91bmRlZEludFNpemUoTGF5
b3V0U2l6ZShzY3JvbGxDb250YWluZXJCb3gud2lkdGgoKSwgc2Nyb2xsQ29udGFpbmVyQm94Lmhl
aWdodCgpKSkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBtX293bmlu
Z0xheWVyLnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBt
X293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxl
TGF5ZXIpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xs
T2Zmc2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBt
X3Njcm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyAr
MTM5MCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0Jv
eE9mZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9s
bFNpemUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhl
aWdodCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxh
eWVyLT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAg
ICAgICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8
fCBwYWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50
c0xheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUwMSwxNyBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Ny
b2xsT2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5n
TGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAg
IEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y3Vy
cmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNj
cm9sbGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0
aGUgbGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRl
ci4KICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBT
Y3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXll
ci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAg
IHNjcm9sbGFibGVMYXllci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQg
dGhlIGNvbnRlbnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwg
cmF0aGVyIHRoYW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0
aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlv
bkFjdGlvbjo6U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5wb3NpdGlvbigpLmlzWmVybygpKTsK
QEAgLTE5MDksNyArMTkyMyw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDbGlw
cGluZ1N0YWNrTGF5ZXJHZW9tZXRyeShMYXllckFuY2VzdG9yQ2xpcHBpbmdTCiAgICAgICAgIGVu
dHJ5LmNsaXBwaW5nTGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUo
KSk7CiAKICAgICAgICAgaWYgKGVudHJ5LmNsaXBEYXRhLmlzT3ZlcmZsb3dTY3JvbGwpIHsKLSAg
ICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlw
cGluZ0xheWVyID8gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCkg
OiBTY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7
CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW50cnkuY2xpcERhdGEu
Y2xpcHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkgOiBudWxscHRyKQorICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5
ZXItPnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAgbGFzdENsaXBM
YXllclJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMjAxMSwxMiArMjAyNywxNiBAQCBi
b29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihTY3JvbGxi
YXIqIHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
SG9yaXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNM
YXllckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSk7Cisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJs
ZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdM
YXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4gcmVxdWly
ZXNMYXllckZvclNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkp
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVp
cmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdApAQCAtMjAyNCwxMiArMjA0NCwxNiBAQCBib29s
IFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CiAg
ICAgaWYgKCFpczxSZW5kZXJCb3g+KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAg
ICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5z
Y3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0g
bV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xsYmFyID0g
dmVydGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5ZXIuaG9y
aXpvbnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxh
YmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0
aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVyLT5ob3Jp
em9udGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIo
c2Nyb2xsYmFyKTsKIH0KIApAQCAtMjA2NSwxMCArMjA4OSwxMiBAQCBib29sIFJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRh
bFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXll
ckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBj
b3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5n
TGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKGhvcml6
b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVy
LCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVB
cmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgVmVydGljYWxTY3JvbGxi
YXIpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxh
eWVyQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xs
YWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUxheWVyLCBIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hh
bmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFy
ZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUxheWVyLCBWZXJ0aWNhbFNjcm9s
bGJhcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKQEAg
LTIwNzYsNyArMjEwMiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxv
d0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAKIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogewotICAgIGlm
ICghbV9vd25pbmdMYXllci5oYXNTY3JvbGxiYXJzKCkpCisgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyIHx8ICFzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBA
IC0yMDk4LDE2ICsyMTI1LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92
ZXJmbG93Q29udHJvbHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUg
cmVsYXRpdmUgdG8gdGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5n
TGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xs
YWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKICAgICBpZiAoYXV0byogbGF5ZXIg
PSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9s
bGJhckxheWVyKCpsYXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveElu
c2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6
b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAg
ICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYg
KGF1dG8qIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBv
c2l0aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFk
ZGluZ0JveEluc2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xh
eWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAg
ICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0zMDg2LDcg
KzMxMTIsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3Bs
YXlJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKIAogICAgIGlmIChtX3Njcm9sbGVk
Q29udGVudHNMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkp
IHsKICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVkUmVjdEZv
clBhaW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVu
dHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXll
ci5zY3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsKKyAgICAg
ICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNj
cm9sbE9mZnNldCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGxh
eWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVu
ZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpIC0gbV9zdWJwaXhlbE9mZnNldEZy
b21SZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rp
c3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAgLTMx
MzIsNyArMzE2MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihj
b25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgICAgIGlmICgmbGF5
ZXIgPT0gJm1fb3duaW5nTGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250
ZW50cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCi0gICAgICAgICAgICBp
ZiAobGF5ZXIuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9u
Q29udGV4dCkKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFi
bGVMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9u
Q29udGV4dCkKICAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4
dCwgcGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFn
OjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICBsYXllci5wYWludExheWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWlu
dEZsYWdzKTsKQEAgLTM0MTgsMTcgKzM0NDgsMjYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6
OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgK
ICAgICAgICAgICAgIHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsK
IAogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250
YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NF
UlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxl
TGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9
IGVsc2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIo
KSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJs
ZUxheWVyKTsKKworICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRp
Y2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFw
aGljc0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3Ju
ZXJSZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3Ju
ZXJPclJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3du
aW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
cik7CisKKyAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgY29u
dGV4dC50cmFuc2xhdGUoLWNvcm5lclJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIExheW91dFJl
Y3QgdHJhbnNmb3JtZWRDbGlwID0gTGF5b3V0UmVjdChjbGlwKTsKICAgICAgICAgdHJhbnNmb3Jt
ZWRDbGlwLm1vdmVCeShjb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBtX293bmluZ0xh
eWVyLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRSZWN0
KHRyYW5zZm9ybWVkQ2xpcCkpOwotICAgICAgICBtX293bmluZ0xheWVyLnBhaW50UmVzaXplcihj
b250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOworICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRS
ZWN0KHRyYW5zZm9ybWVkQ2xpcCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVz
aXplcihjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwogICAgIH0KICNpZm5k
ZWYgTkRFQlVHCiAgICAgcmVuZGVyZXIoKS5wYWdlKCkuc2V0SXNQYWludGluZyhmYWxzZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CmluZGV4IGNmYzRhYjE1Mjg4Ni4uYTQyYTk2MTQ2ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNTUsNiArNTUsNyBA
QAogI2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ2NTcsOCArNDY1OCwxMSBA
QCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdO
b2RlRm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
LCBjb25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhN
RTogYW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBi
ZWNvbWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1
cm4gTGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAg
IGlmICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVh
KCkpCisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNp
emUoKSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYg
KGlzPFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0NjgyLDE0IEBA
IHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNj
cm9sbGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5k
TGF5ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBm
cmFtZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5n
KCk7CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7
IGJhY2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250
YWluZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAg
ICAgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9y
SG9yaXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
fSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpLCBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsK
ICAgICB9CiB9CiAKQEAgLTQ3MjAsOCArNDcyNywxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVy
TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5k
ZQogICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIp
CiAgICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIs
ICpzY3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxp
bmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJ
RCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Ny
b2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5n
ZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRl
LnBhcmVudE5vZGVJRCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwg
KnNjcm9sbGFibGVMYXllcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9k
ZUlEOwpAQCAtNDg5Niw3ICs0OTA1LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW4KICAgICBp
ZiAobm9kZUlEID09IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxpbmdOb2RlSUQoKSkK
ICAgICAgICAgcmV0dXJuICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKLSAgICByZXR1cm4g
bV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsKKyAgICByZXR1cm4g
bV9zY3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS0+c2Nyb2xsYWJsZUFyZWEoKTsK
IH0KIAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXll
cldpdGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNr
aW5nKQpAQCAtNTAzNSwxMSArNTA0NCwxNCBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xh
eWVyQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAg
IGF1dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwog
Ci0gICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5ZXIuaG9yaXpvbnRhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIg
PSAhbGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xs
YWJsZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9s
bGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKKyAgICBib29s
IGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50LmFkZE9yVXBkYXRlU2Ny
b2xsaW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbENv
bnRhaW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsZWRDb250ZW50
c0xheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIucmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Ny
b2xsYmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVydGljYWxTY3JvbGxiYXIp
OwogfQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlZ2lz
dGVyQWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAwNTJhOWM3NWU2MzUuLmM3ZmM2NmM3
MDEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcApAQCAtMTc2LDggKzE3Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0
CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xk
U3R5bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUo
Km9sZFN0eWxlLCBuZXdTdHlsZSkpIHsKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJM
YXllciA9IGxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zm
c2V0cygpOwotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgp
OworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyTGF5ZXItPmVuc3Vy
ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Ny
b2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1bWVu
dEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9
IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVTbmFwT2Zm
c2V0cygpOwpAQCAtMTk1LDggKzE5Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAgICAg
ICAgIGlmIChzY3JvbGxTbmFwQm94ICYmIHNjcm9sbFNuYXBCb3gtPmxheWVyKCkpIHsKICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHNjcm9sbFNuYXBCb3gtPnN0eWxlKCk7
CiAgICAgICAgICAgICBpZiAoc3R5bGUuc2Nyb2xsU25hcFR5cGUoKS5zdHJpY3RuZXNzICE9IFNj
cm9sbFNuYXBTdHJpY3RuZXNzOjpOb25lKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJv
eC0+bGF5ZXIoKS0+dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAgICAgICAgICBzY3JvbGxT
bmFwQm94LT5sYXllcigpLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxTbmFwQm94LT5sYXllcigpLT5lbnN1cmVM
YXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51
cGRhdGVTbmFwT2Zmc2V0cygpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBk
YXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gt
PmlzQm9keSgpIHx8IHNjcm9sbFNuYXBCb3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVw
ZGF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LmFmMmI5NDllMDAwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApAQCAtMCwwICsxLDE4MzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
IEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5k
ZXIgdGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVy
c2lvbiAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAi
TVBMIikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwg
Zm91bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJH
UEwiKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwg
YXJlCisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0
byBhbGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0
aGUgdGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhl
IEdQTCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2Yg
dGhpcyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBk
ZWxldGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90
aWNlIGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBH
UEwsIGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92
aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYgbGF5ZXIpCisgICAgOiBtX3Nj
cm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFs
c2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKKyAgICAsIG1faGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVp
cmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3Np
dGlvbihmYWxzZSkKKyAgICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQor
ICAgICwgbV9sYXllcihsYXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9
PSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlz
KSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQ
b3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7
CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndp
bGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIo
KTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXll
ci5yZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChtX2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUg
YW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFs
dWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50
LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0
aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUg
YWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNp
ZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFu
ZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVy
LmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2
ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCku
cmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5n
Qm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBl
eGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+
aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25z
dAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9s
bGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRp
ZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLnNj
cm9sbGluZ1BlcmZvcm1hbmNlVGVzdGluZ0VuYWJsZWQoKTsKK30KKworLy8gRklYTUU6IHRoaXMg
aXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5jb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xh
eWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAg
IGlmICghcG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBT
Y3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9
IGZhbHNlOworICAgIH0KKworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRp
b24udmFsdWUoKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
blNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNj
cm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNj
cm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBz
Y3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3Np
dGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Ny
b2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxz
ZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNj
cm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVk
QmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25O
YXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9u
cygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNl
dCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+
c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3Jv
bGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShz
Y3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9s
bFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNj
cm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xs
VHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sK
KyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3
U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFt
cFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRp
b24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlm
IChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsK
KworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRp
b24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3go
KTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxU
byAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMg
dXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2Vy
KSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsK
KyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Ig
b3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNE
aXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNv
ZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVt
b3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRU
b0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAg
ICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Ny
b2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhP
ZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9
IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0
aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBj
YXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsK
KyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09m
ZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0
aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNj
cm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTog
Tm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQg
cG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhy
ZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBv
c2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZp
ZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMg
KGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBz
Y3JvbGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1
c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2Vz
dG9yLgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRl
clRyZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxh
eW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4K
KyAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwor
CisgICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAg
Ly8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0
YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlv
bnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10
by1kYXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Un
cmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRp
bmcgbGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAg
ICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAg
ICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEg
Y29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIp
LAorICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0
aGUgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJl
bnQgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWlu
dFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZl
cnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xh
eWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9u
cywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4K
KyAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50
UmVnaW9ucygpOworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVy
LmZyYW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7
CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVy
LmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBi
ZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRD
YXJldFJlY3ROZWVkc1VwZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9
IHJlbmRlcmVyLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91
dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JS
ZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91
c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50
Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENv
bnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsK
KyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25J
blF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVw
YWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAg
ICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAg
bV9sYXllci5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7CisgICAgICAgIHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVk
c1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVk
dWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWlu
dCkKKyAgICAgICAgcmVuZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIHJlY3RGb3JSZXBhaW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNj
cm9sbC1yZWxhdGVkIERPTSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Nj
cm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkK
KyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAg
IHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5l
ZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkK
K3sKKyAgICBpZiAobV9sYXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5
ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVk
IHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAg
IC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVy
ZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXll
ci5zdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAg
ICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBt
X2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1Vw
ZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0
byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3Jv
bGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFu
dHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAg
ICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0
aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgp
KTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0
ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7
Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25z
dAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxE
aW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29v
cmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFt
X21hcnF1ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRv
IHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisg
ICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb247CisgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJx
dWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1
ZWUoKSAmJiByZW5kZXJlci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhh
dmlvcjo6Tm9uZSAmJiByZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVl
KQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9s
YXllcik7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBl
bHNlIGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
Ym9vbCBpc1Zpc2libGUgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmls
aXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dT
Y3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092
ZXJmbG93KCkgJiYgIW1fbGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQor
ICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0
eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCku
YWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJu
IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0
U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRv
KHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2xheWVyLmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2xheWVyLmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxD
b29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4gZ2Vz
dHVyZVN0YXRlKQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAg
IGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgeworICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
LT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJ
RCgpLCBnZXN0dXJlU3RhdGUpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFNjcm9sbGFi
bGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIGdlc3R1cmVT
dGF0ZSk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNv
bnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNj
cm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Cit7Cisg
ICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQorICAgICAgICBz
Y3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisgICAgYXV0byB2aXNpYmxl
U2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7CisgICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24o
KSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lk
dGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2Uu
aGVpZ2h0KCkpIH0gfTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIu
c2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkp
CisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAg
ICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMg
dG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNoYWJs
ZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxPZmZz
ZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7
CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgp
ID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3Ry
ZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgp
IC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCisg
ICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBpZiAo
cmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXpl
LndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3Jv
bGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7
CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsKKyNl
bmRpZgorfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5l
clJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3Jv
bGxDb3JuZXI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxD
b3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJlcigpLmlz
Qm94KCkpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKK30KKwor
SW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1v
dmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRl
cmVyLCByZWN0KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxi
YXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5k
ZXJlciwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xs
YmFyKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAor
eworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50
IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHBvaW50KTsKK30KKwor
SW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2lu
dCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRQ
b2ludCk7CisgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAg
IHJldHVybiBwb2ludDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2
aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIudmlzaWJsZVNpemUoKTsK
K30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUoKSBj
b25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgp
KTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWFjaGFibGVUb3Rh
bENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlz
LT5jb250ZW50c1NpemUoKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVy
ZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNT
aXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOworCisgICAgaWYgKCFoYXNTY3Jv
bGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0
KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkp
OworCisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5n
ZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRT
aXplQ2hhbmdlZChyZWFzb24pOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3Jv
bGxiYXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkK
KyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuc2V0U2hvdWxkRm9y
Y2VSZWxheW91dENoaWxkcmVuKHRydWUpOworICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91
dCgpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRT
dXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXco
KS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwo
KQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZs
b3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRFbmRT
Y3JvbGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92
ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlk
VXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ug
c2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAg
IG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6
OlNjcm9sbCk7Cit9CisjZW5kaWYKKworUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3Rz
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0
Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgQVNTRVJU
KGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhl
IGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0g
c25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9o
QmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92
QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xs
YmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisg
ICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxT
Y3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29s
IHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyLnN0
eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3Zl
cmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5
SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7
CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNv
cm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAgICAg
ICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9y
aXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0
aAorICAgICAgICB9OworICAgIH0KKworICAgIFJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xS
ZWN0cyByZXN1bHQ7CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGJhclJlY3Quc2hpZnRZ
RWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAg
ICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmIChwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRY
RWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwg
MCk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJh
clJlY3Q7CisgICAgfQorCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBhdXRvIGJhclJlY3Qg
PSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVy
dGljYWxTY3JvbGxiYXJXaWR0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhclJlY3Qu
c2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisK
KyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIGJhclJlY3Qu
Y29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgcmVzdWx0LnZlcnRp
Y2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBb
Jl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xs
YmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVy
Zmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAg
ICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3Ju
ZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9
CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVj
dC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CisK
KyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICByZXN1bHQuc2Nyb2xsQ29y
bmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKKworICAgIGlmIChoYXZlUmVzaXplcikgewor
ICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgcmVzdWx0LnJl
c2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xs
YmFyVGhpY2tuZXNzKCk7CisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3Qo
eyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBj
b25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAg
IGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6
ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIGlmICgmc2Nyb2xs
YmFyID09IG1faEJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jp
em9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKKyAgICAgICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0Owor
ICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVy
ZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisK
KyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3Qu
bW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAg
ICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlv
bigpKTsKKworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIGJv
eC0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKKyAgICBib3gtPnJlcGFpbnRSZWN0
YW5nbGUocmVwYWludFJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAg
aWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgeworICAgICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+
cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jl
c2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9s
bGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOworfQorCitib29sIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xs
YmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRl
bkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVy
RWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVu
ZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkp
IHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWlu
aW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09
IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRv
d1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZWZQdHI8U2Ny
b2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVy
KSk7CisgICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIpOworICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+
KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5z
dHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXND
dXN0b21TY3JvbGxiYXJTdHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpj
cmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJC
b3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRn
ZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFy
KHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOworICAgICAgICBpZiAobV9sYXllci5wYWdlKCku
aXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCku
c2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKG1fbGF5ZXIucGFnZSgpLndoZWVsRXZlbnRUZXN0TW9u
aXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxk
KCp3aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxi
YXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFy
OworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9s
bGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihz
Y3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJv
bVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9s
bGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBt
X2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJm
bG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJs
ZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxh
c3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xs
RWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRl
c3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0
aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVz
dHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5l
ciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJh
cidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2Vk
KCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJh
cihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIp
IHsKKyAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsK
KyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JT
dWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMg
OiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xs
RWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAv
LyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIg
Y29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Ny
b2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNo
YW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgp
OworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9z
aW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpF
eGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiAmcmVuZGVyZXIudmlldygpLmZyYW1lVmll
dygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIHJldHVybiByZW5kZXJlci5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBt
X2xheWVyLmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFp
bmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYg
KG5leHRMYXllci0+cmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fdkJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAg
fHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVP
dmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgo
KTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAor
eworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQor
ICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09
IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRl
SW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9oQmFy
LT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNPdmVy
Zmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBt
X3Njcm9sbENvcm5lciB8fCBtX2xheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBS
ZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQoreworICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9sYXllci5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYg
KG1fdkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZy
b21Sb290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIpOworICAgIH0KKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV9oQmFyLT5zZXRG
cmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1f
c2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3Rz
LnNjcm9sbENvcm5lcik7CisKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXIt
PnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJv
eC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92
ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Cit9CisKK0xheW91dFVu
aXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAorewor
ICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0
IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBG
b3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4
WSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93
TGVmdCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgp
OworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkp
OworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJu
IG92ZXJmbG93UmVjdC54KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xh
eWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0
T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVj
dCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAg
IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisKKyAgICBtX3Njcm9sbFdpZHRoID0g
cm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSk7CisgICAgbV9zY3Jv
bGxIZWlnaHQgPSByb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsK
KworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xl
ZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93
ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0
U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJs
ZVRvcE92ZXJmbG93KSk7CisKKyAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3Jv
bGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgJiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIG1f
bGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAg
IEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdp
ZHRoKCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAg
cmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5j
bGllbnRIZWlnaHQoKSk7Cit9CisKK3N0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQorewor
ICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7
CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJm
bG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIp
ICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAg
IHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFj
dHNMaWtlQXV0bzsKK30KKworc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xs
YmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykK
K3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246
Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93
WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xs
YmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsK
KyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxB
Y3RzTGlrZUF1dG87Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIu
cmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBo
YW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8g
ZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+
aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0g
dGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOworCisgICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWly
ZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChtX2hCYXIg
JiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBIb3Jpem9udGFsU2Ny
b2xsYmFyKSkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxv
dyk7CisgICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0
eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhh
c1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZp
b3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciBy
ZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0
aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZs
b3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVy
dGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxT
Y3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1Zl
cnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgbV9sYXllci51
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnQoKTsK
KworICAgICAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6
QXV0byB8fCByZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7
CisgICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAg
ICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVy
LnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sm
IGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFu
Z2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAg
YmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmVyLmxheW91dCgpOworICAgICAgICAgICAgICAgIG1faW5PdmVy
Zmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyLnBhcmVudCgpOworICAgICAgICBpZiAo
cGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyLmlzQm94KCkpCisg
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNo
ZWRNYWluU2l6ZUZvckNoaWxkKCptX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAv
LyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1f
aEJhcikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50
V2lkdGgoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xp
ZW50V2lkdGgpOworICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVy
TGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xp
ZW50V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOworICAgIH0KKyAgICBpZiAobV92QmFyKSB7CisgICAg
ICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwor
ICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7
CisgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgp
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQs
IG1fc2Nyb2xsSGVpZ2h0KTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJl
Zm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zmc2V0IG9y
aWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBjb21wdXRlU2Nyb2xs
RGltZW5zaW9ucygpOworICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKwor
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9m
ZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFu
Z2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5
NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNI
VE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9s
bEluUHJvZ3Jlc3MoKSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0
IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAg
ICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2gg
dGhlbSB1cCB0byB0aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxP
ZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJl
dCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBl
bnRyeSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlz
c3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24g
b24gdGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRl
bnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBm
b3IgbW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Ny
b2xsT2Zmc2V0KCkpCisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zm
c2V0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVT
Y3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAh
PSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAobV9sYXllci5pc0NvbXBvc2l0
ZWQoKSkgeworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0
ZSgpOworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBk
YXRlKCk7CisgICAgfQorCisgICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAg
ICAgICAgbV9sYXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisg
ICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxS
ZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3Jv
bGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QK
K3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJh
cnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBE
b24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuaGFzT3ZlcmZsb3dD
bGlwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBp
biBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwg
cGFpbnQKKyAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBu
b3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKKyAgICAvLyB3aWxs
IGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRo
ZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKKyAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRl
ZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVl
IHRvIHJ1biwKKyAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4g
dGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUKKyAgICAvLyBzZWNvbmQg
cGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJp
Z2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlD
b250cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWlu
dE9mZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29u
ZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAo
KG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1n
ZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9s
c0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBtX2xheWVyLmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKTsKKyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBw
YWludGluZ1Jvb3QgPSByZW5kZXJlci52aWV3KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxlQXJlYSgpKQorICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnModHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlz
IHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4K
KyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQg
PSBwYWludE9mZnNldDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAg
IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisK
KyAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuIFdlIG5vcm1h
bGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMK
KyAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBu
b3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBjb250YWlucyBm
aXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMo
dG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3Jl
IHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4K
KyAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAg
ICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAobV92QmFyICYm
ICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+cGFpbnQoY29u
dGV4dCwgZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdo
aXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1
cCB0byB0aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3JvbGxDb3JuZXIo
Y29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisKKyAgICAvLyBQYWlu
dCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNv
cm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFt
YWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3Jv
bGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRP
ZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBhYnNSZWN0
ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsK
KyAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJ
bnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhh
dmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8gc2VlIHdoYXQg
aXMgYmVoaW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAg
U2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVj
dCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVz
aXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVz
aXplckNvcm5lclJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUg
Y29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+
IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4
dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJ
bWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXpl
ID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUu
c2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNv
cm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29ybmVyUmVzaXpl
clNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAgIGlmIChzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgY29udGV4
dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0Lngo
KSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJl
c2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgaWYg
KHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6
ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkp
OworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJl
Y3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJD
b3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVz
aXplclNpemUpLCByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAg
IGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25l
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsK
KyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXpl
ckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRl
UmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNp
emVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9m
ZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJh
d1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKworICAgIC8v
IERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJl
IGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVk
ZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgorICAgIGlmICghaGFz
T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAgICAgICBjb250
ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5l
ciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRT
aXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsg
MV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsg
MjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4w
Zik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIp
KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92
ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJl
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5z
dHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgeworICAgICAgICBpZiAocmVjdHMucmVz
aXplci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVy
IGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgorICAgIGlmIChtX3ZCYXIgJiYg
bV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAg
ICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hv
dWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0
LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5wYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3Rp
dmUoKTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtub3du
TW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVy
ZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxpbmdXaGVlbEV2ZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRI
YW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIucmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25h
cE9mZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVs
ZW1lbnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVu
dCgpKSB8fCAhbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVu
dCgpLT5yZW5kZXJCb3goKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVh
KCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJlY3QoKSk7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygp
IGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9y
ID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0
b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmxheVNjcm9s
bGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0
KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNj
cm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyOjpMYXllclBhaW50
aW5nSW5mbyBwYWludGluZ0luZm8oJm1fbGF5ZXIsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVj
dCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7CisgICAg
bV9sYXllci5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUmVuZGVyTGF5ZXI6OlBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0
aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAgIGlmIChsYXll
ckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9
IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLmJvcmRlckJveFJl
Y3QoKSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAg
YXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJv
dW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6
ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAt
IHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVj
dCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVm
dCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXpl
KCkgfTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9
IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29y
bmVyKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlD
b3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVz
aXplclJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdt
ZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdt
ZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6
ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZy
YWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVu
dC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJl
Y3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsK
KyAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0
aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhv
cml6b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmco
KSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51
bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxh
eWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJh
Y2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
OiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFj
a2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxs
cHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ01heVJl
dmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8
fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAg
ICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xs
YmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94
LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOworICAg
IE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKKworICAgIC8v
IFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0
LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5
IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092
ZXJmbG93Q2xpcCgpICYmICgoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1
dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikp
OworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkgJiYgKCh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9s
bGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Nj
cm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7CisgICAgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOworICAgIHNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgLy8gV2l0aCBu
b24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxl
IGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2
YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCisgICAgaWYg
KG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5
bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJm
bG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlm
IChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHls
ZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZs
b3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYg
KCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFT
ZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7CisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVz
dCA9IHJlbmRlcmVyLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAg
ICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJl
bmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxl
ID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJl
bW92ZWQgPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9
PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAoaXNT
Y3JvbGxhYmxlKSB7CisgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsK
KyAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVh
KHRoaXMpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewor
ICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0
aGlzKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsKKyAgICB9
CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBpZiAoYWRkZWRPclJlbW92ZWQp
IHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKQorICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91
Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3
ZSBiZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFz
IGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAgICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiBh
Y3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBhdXRv
IGNvcm5lciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdl
dFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1
YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3JuZXIpIHsKKyAg
ICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3Zl
KCpjb3JuZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hp
bGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVu
ZGVyZXIpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIp
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5l
cigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxDb3JuZXIgPSBu
dWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6
ZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7Cisg
ICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihy
ZW5kZXJlcik7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkg
PyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNp
emVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFy
ZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgq
cmVzaXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIp
OworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAg
ICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIoKQoreworICAgIGlmICghbV9y
ZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0
cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKQoreworICAgIGlmICht
X2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikK
KyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICB1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpOworICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworfQorCisjaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElm
IHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5k
bGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxl
QXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5h
ZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVy
ZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXI7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1
bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAg
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9
CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKKy8vIEZJWE1FOiB0aGlzIGlz
IG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9sYXllci5pc0NvbXBvc2l0ZWQoKSAmJiBtX2xheWVyLmJhY2tpbmcoKS0+aGFzU2Nyb2xs
aW5nTGF5ZXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShp
bnQgYmVnaW5uaW5nRGVsdGEpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBG
aXJlZm94J3MuCisgICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90
b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCisgICAgY29uc3QgaW50IHNw
ZWVkUmVkdWNlciA9IDEyOworCisgICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0
YSAvIHNwZWVkUmVkdWNlcjsKKyAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCisgICAgICAgIGFk
anVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRp
Y19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7CisgICAgZWxzZSBpZiAoYWRqdXN0
ZWREZWx0YSA8IC0xKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50Pihh
ZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkp
ICsgMTsKKworICAgIHJldHVybiBhZGp1c3RlZERlbHRhOworfQorCitzdGF0aWMgaW5saW5lIElu
dFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKK3sKKyAgICBy
ZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3Rl
ZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2lu
dCkKK3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gbV9sYXllci5yZW5k
ZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpOwor
CisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlv
biBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5k
b3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZp
b3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAw
IHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91
c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHBy
ZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRT
aXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAg
aWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykg
Ly8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBk
ZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxW
aWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisg
ICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisK
K09wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNj
cm9sbFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yLCBjb25zdCBMYXlvdXRSZWN0JiBy
ZXZlYWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpCit7CisgICAgQVNT
RVJUKG1fbGF5ZXIuYWxsb3dzQ3VycmVudFNjcm9sbCgpKTsKKworICAgIFJlbmRlckJveCogYm94
ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIGF1dG8gc2hv
dWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVo
YXZpb3IgYmVoYXZpb3IpCisgICAgeworICAgICAgICBib29sIHVzZUFuaW1hdGVkU2Nyb2xsaW5n
ID0gIW1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJ
blByb2dyZXNzKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnQgJiYgdXNlU21vb3RoU2Nyb2xsaW5n
KGJlaGF2aW9yLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHVzZUFuaW1hdGVkU2Nyb2xsaW5n
ID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKKyAgICB9OworCisg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2Nh
dGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkg
fHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6
Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byBhbmltYXRlZCA9IHNob3VsZFVzZUFuaW1h
dGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBiZWhhdmlvcik7CisgICAgICAgIHNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQp
OworICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xs
T2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OworCisgICAgICAgIGF1dG8gbG9jYWxFeHBvc2VSZWN0
U2Nyb2xsZWQgPSBsb2NhbEV4cG9zZVJlY3Q7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdFNjcm9s
bGVkLm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOworICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4
cG9zZVJlY3RTY3JvbGxlZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9s
bGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVy
ZXIucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci5w
YXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJl
ci5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAg
IFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwor
ICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBpZiAoc2Ny
b2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAg
Ly8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXll
ciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVtYWluaW5nU2Ny
b2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlm
ICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyLnBhcmVudCgpKSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAg
ICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jv
c3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgp
KQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZW5kZXJlci5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9z
Y3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYg
d2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJv
Z3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAgICAgICAgLy8gaGF2ZSBhbiBv
dmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0
IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnNj
cm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpz
Y3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgICAgIC8v
IEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8g
dHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/CisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9j
dW1lbnRTY3JvbGwoKQoreworICAgIEFTU0VSVCgmbV9sYXllciA9PSBtX2xheWVyLnJlbmRlcmVy
KCkudmlldygpLmxheWVyKCkpOworCisgICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwor
CisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAg
bV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1h
cChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAoJm1fbGF5ZXIgIT0gbV9sYXllci5yZW5kZXJlcigp
LnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2Vz
dG9yKG1fbGF5ZXIucGFyZW50KCksIG51bGxwdHIpOworCisgICAgLy8gRklYTUU6IHdoeSBpcyBp
dCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRv
CisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rv
ciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KKyAgICBtX2xheWVy
LnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBSZW5kZXJMYXll
cjo6SXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0
ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1
bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2
ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKK30KKworU3RyaW5nIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42YWIx
MDA1MDBlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5h
dGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0
ZXJtcworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4x
LCBmb3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9y
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0
IGh0dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGlu
IHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICog
YXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cg
dXNlIG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1z
IG9mIG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFu
ZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmls
ZSB1bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0
aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQK
KyAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0
aGUgY2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBh
Ym92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJNYXJxdWVlOworCitj
bGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVB
cmVhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJik7CisgICAgdmlydHVhbCB+
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCisgICAgUmVuZGVyTGF5ZXImIGxheWVyKCkg
eyByZXR1cm4gbV9sYXllcjsgfQorCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQgdXBkYXRlTWFycXVlZVBvc2l0
aW9uKCk7CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisKKyAgICB2b2lkIHN0
b3JlU2Nyb2xsUG9zaXRpb24oKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAg
IHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgIHZv
aWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYK
KworICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBv
c2l0aW9uPik7CisgICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVk
KCk7CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsSGVpZ2h0
KCkgY29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYp
OworCisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwg
dGhlaXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNp
emUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQm
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9s
bFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0g
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Ny
b2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGlu
dCB5LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
LCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRT
Y3JvbGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KKyAg
ICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZz
ZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5
KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBT
Y3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisK
KyAgICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJs
ZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJl
dHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAg
IGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxT
Y3JvbGxiYXIoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKGJvb2wpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisK
KyAgICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24p
OworICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAg
ICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9CisgICAgdm9pZCBz
ZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29u
Y2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlv
biA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVu
IHRoZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQg
d2hldGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wg
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworICAgIC8vIFJldHVybnMgdHJ1ZSB3
aGVuIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91
dCB0byBiZSB1cC10by1kYXRlKS4KKyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7
IH0KKworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworCisgICAgYm9vbCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIGJvb2wgaGl0VGVz
dFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9p
ZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
ID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBh
aW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIp
OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIgPSAxKTsKKworcHVibGljOgorICAgIC8vIEFsbCBtZXRob2RzIGluIHRoaXMgc2VjdGlvbiBv
dmVycmlkZSBTY3JvbGxhYmxlYUFyZWEgbWV0aG9kcyAoZmluYWwpLgorICAgIHZvaWQgYXZhaWxh
YmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwor
CisgICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7
CisKKyAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fc2Nyb2xsUG9zaXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7
IH0KKyAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBm
aW5hbDsKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmLCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4pIGZpbmFs
OworICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJv
b2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7
CisjZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZEVuZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7Cisj
ZW5kaWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5l
cigpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisK
KyAgICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25z
dCBmaW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRS
ZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRS
ZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFs
OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNv
bnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdO
b2RlSUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50
ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVu
dFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgp
IGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXco
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmlu
YWw7CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFs
OworICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZp
eGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dy
ZXNzKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQ
ZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2Vu
ZGlmCisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZp
bmFsOworCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAg
IEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1Np
emUoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRl
KGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNj
cm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgYm9v
bCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICB2b2lkIHVwZGF0ZVNj
cm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Cisg
ICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIHZvaWQgcG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xs
Q29ybmVyKCk7CisgICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKKworICAgIHZvaWQgdXBkYXRlQWxs
U2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJ
bWFnZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVj
dCk7CisKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5p
dCBvdmVyZmxvd0JvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkg
Y29uc3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7CisKKyAgICBSZW5k
ZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29u
c3Q7CisKKyAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3Q7CisKKyAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tn
cm91bmQoKSBjb25zdDsKKworICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAg
ICB2b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisKKyAgICBi
b29sIGhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxP
dmVyZmxvdygpIGNvbnN0OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25z
dDsKKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVy
cmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAgIHZvaWQgc2Ny
b2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKworICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0
IFNjcm9sbGJhciYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChi
b29sIGhhc092ZXJmbG93KTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChj
b25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyRG9jdW1lbnRTY3JvbGwoKTsKKworICAgIE9wdGlvbmFsPExheW91dFJlY3Q+IHVwZGF0ZVNj
cm9sbFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yLCBjb25zdCBMYXlvdXRSZWN0JiByZXZlYWxSZWN0
LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpOworCisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0
IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBz
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQg
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgp
OworCitwcml2YXRlOgorICAgIC8vIE1pbmltdW0gcGFkZGluZyBvbiB4ODZfNjQgKDQgYnl0ZXMp
LCBhZnRlciBtX3Njcm9sbEhlaWdodCkKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAx
OworICAgIGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOworCisgICAgLy8g
VGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3JvbGxX
aWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXllciYgbV9sYXll
cjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNjcm9sbFBvc2l0
aW9uIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxheWVycyB3aXRo
IG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3Jv
bGxiYXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQ
b2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBSZW5kZXJlcnMg
dG8gaG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVy
UHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKaW5kZXggNzM0NDA2YzQzMDVkLi4yNWFkZTQxZjlmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5k
ZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXll
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2lu
Z1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBs
YXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlz
dEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODk3LDEwIEBA
IGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJv
b2wgUmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcigp
CiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhh
c1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CmluZGV4IDc2ZTIzZTRkMDk5Ni4uN2I0ZTc2ZGM1N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6
OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikK
ICAgICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAg
IGxheWVyLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAg
QVNTRVJUKGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBS
ZW5kZXJNYXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3MSwxMSArMTcy
LDE0IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6c3RhcnQoKQogICAgIGlmIChtX3RpbWVyLmlzQWN0
aXZlKCkgfHwgbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKS5p
c1plcm8oKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9sYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsK
KwogICAgIGlmICghbV9zdXNwZW5kZWQgJiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNI
b3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxP
ZmZzZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBp
bmc6OlVuY2xhbXBlZCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBT
Y3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9s
YXllci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICAgICAg
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFydCks
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdG9w
cGVkID0gZmFsc2U7CkBAIC0yNDMsMTMgKzI0NywxNiBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRp
bWVyRmlyZWQoKQogewogICAgIGlmIChtX2xheWVyLT5yZW5kZXJlcigpLnZpZXcoKS5uZWVkc0xh
eW91dCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5
ZXIpOworCiAgICAgaWYgKG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAg
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hP
ZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9m
ZnNldChtX3N0YXJ0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xs
VG9ZT2Zmc2V0KG1fc3RhcnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxU
b1lPZmZzZXQobV9zdGFydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIs
NyArMjc5LDcgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9v
bCBwb3NpdGl2ZSA9IHJhbmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jp
em9udGFsKCkgPyByb3VuZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
KSA6IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAg
ICAgICAgIGludCBpbmNyZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVu
ZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAg
ICBpbnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNl
dCgpLngoKSA6IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJy
ZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQo
KS54KCkgOiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5l
d1BvcyA9ICBjdXJyZW50UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1l
bnQpOwogICAgICAgICBpZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1p
bihuZXdQb3MsIGVuZFBvaW50KTsKQEAgLTI4OSw5ICsyOTYsOSBAQCB2b2lkIFJlbmRlck1hcnF1
ZWU6OnRpbWVyRmlyZWQoKQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0g
ICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9s
YXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggN2E1MWNmODcwNmI0
Li41Y2I5YzAyN2QxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVj
dDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGlj
IHZvaWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAg
c3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTils
aW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9h
dGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5
ZXIsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAg
c3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0Zp
KFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBB
bm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxl
QXJlYSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAg
ICBzdHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNiwxMCArMTExNiwxNCBAQCB2b2lkIFJl
bmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBt
YXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAg
aWYgKGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8
ICJMIjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3du
Y2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwog
CiAgICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGQ1Y2VkOGEwMjhiMy4uNWQ3YzY3
MzkwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAs
NiArMTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVu
ZGVyQmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0
aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2Fs
bHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKaW5kZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3Jv
bGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKQEAgLTM5NywxOSArMzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVs
ZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQm
IHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJC
bG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0
byogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFy
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9
IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xs
YWJsZSA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVy
U2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAm
JiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxv
dzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50
LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBp
bm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYm
IGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9s
bGFibGUgPSBsYXllciA/IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxs
cHRyOworICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5z
Y3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJl
bmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggN2MwMWYwMjBmZTgyLi41OTIwZDU4ZjIwYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYg
KzQ5LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpA
QCAtNjAwLDIwICs2MDEsMjQgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0
cywgY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAg
ICBpZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAo
bGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIg
PDwgbGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xs
T2Zmc2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgo
KSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0
aCgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5y
ZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAg
ICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVh
KCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngo
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLnkoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXll
ci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAg
dHMgPDwgIiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsK
KyAgICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWln
aHQoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFi
bGVMYXllci0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAg
ICAgICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpOwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5
ZXIuaGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVN
YWMmIG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJh
clRoZW1lKTsKLSAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgq
bGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxiYXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKCFzY3Jv
bGxiYXJUaGVtZS5pc01vY2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxT
Y3JvbGxiYXIoKSkgeworICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVt
ZSA9ICpzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxh
YmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKaW5kZXggYjEwMzNkYTA3OTMwLi5mZjQyMjIwNzMyMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
SGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMzLDEwIEBAIHZv
aWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0
KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUo
KSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJv
dW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAg
IGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VS
VChsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9p
ZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDdiYTY4ZDRkMDJjNC4uY2JkODRj
NTMyOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgpAQCAtMTgzOCw3ICsxODM5LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpz
Y3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAg
ICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAg
c2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigp
KTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NTksOCArMjg2
MSwxMCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJs
ZUFyZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxp
c3RCb3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2Fz
dDxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIEFTU0VSVChyZW5kZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
QXJlYSA9IHJlbmRlckJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAg
ICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJv
ciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggOWYzYjZlMGVhM2EyLi5kMGNj
MDdiZjA4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAor
MjAyMC0xMi0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4K
KworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVu
ZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVy
ZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUg
aXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5
cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJm
bG93LiAKKyAKKyAgICAgICAgU3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICog
RE9NL0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9sbFhPZmZzZXRd
KToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWU9mZnNldF0pOgorICAgICAgICAo
LVtET01IVE1MRWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRqdXN0Rm9y
SU9TQ2FyZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTEyLTExICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJFR1JFU1NJ
T04gKHIyNzAzMTUpOiBXZWJLaXRMZWdhY3kgYnVpbGRzIGZhaWwgd2l0aCAidW5pZmRlZiIgZXJy
b3IgbWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhU
TUwubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCA4NTg0
YzIzMWZlZjguLmNiYzU2N2UzYmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhU
TUwubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzgsMTQgQEAK
ICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXIt
Pmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3du
Y2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0
KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
aWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOwogfQogCiAtIChpbnQpc2Nyb2xsWU9m
ZnNldApAQCAtOTEsNyArOTksMTQgQEAKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJl
cikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNh
c3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXll
cikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgp
OwogfQogCiAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGlu
dCl5CkBAIC0xMTEsMTEgKzEyNiwxNCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvKiBs
YXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zm
c2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNj
cm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQp
YWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2
MDgzOTJmLi4xMmQxNTllYzhmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QcmludENv
bnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVu
ZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRl
cldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBA
IC03MzgsOSArNzM5LDEwIEBAIHN0YXRpYyBOU1VSTCAqY3JlYXRlVW5pcXVlV2ViRGF0YVVSTCgp
OwogI2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVu
Y2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXIt
PnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xs
UmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lk
ZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6
U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGln
bm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmln
aW5TY3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsK
ICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVh
cmFuY2UoKTsKICAgICAgICAgfQpAQCAtNzU4LDkgKzc2MCwxMCBAQCBzdGF0aWMgTlNVUkwgKmNy
ZWF0ZVVuaXF1ZVdlYkRhdGFVUkwoKTsKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+
cmVuZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwg
aW5zaWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJD
b3JlOjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9z
c09yaWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIAogICAgICAgICAg
ICAgYXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFt
ZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGVmYjhlMjg3YzVmNC4uODZjYTIw
M2ZkZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MjAtMTItMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisK
KyAgICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRl
ckxheWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZs
b3cgaGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0
cyBpbnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBl
cyB0aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxv
dy4gCisgCisgICAgICAgIFNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAgICAqIFdl
YlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisKIDIwMjAtMTItMDkgIENh
dGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFN1cHBvcnQgb3Zl
cnNjcm9sbC1iZWhhdmlvciBwYXJzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmlu
ZGV4IDVkMzFjNzU2M2I5OC4uYzQ1YzllZTkxMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJW
aWV3LmNwcApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVX
aW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3
Lmg+CkBAIC0yMDQ4LDggKzIwNDksMTEgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3
UGFyYW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBo
aXQgdGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNv
cmVGcmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAg
ICAgc2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3Jv
bGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoIXNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xsZWRBcmVh
KTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigp
ICYmIEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkp
KSB7CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRs
ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416058</attachid>
            <date>2020-12-11 15:44:53 -0800</date>
            <delta_ts>2021-01-05 02:02:10 -0800</delta_ts>
            <desc>Patch, v18 (squashed for testing)</desc>
            <filename>patch-v18.diff</filename>
            <type>text/plain</type>
            <size>300562</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZWIxODViYWUzYjYuLmUwNjg0NmI1ZGY1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI2NyBAQAorMjAyMC0xMi0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1h
bm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2Yg
UmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxs
IHNjcm9sbGluZy9vdmVyZmxvdyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIs
IHRvIHN0cmVhbWxpbmUgaXRzIGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2Fi
bGUgZm9yIGxheWVyIHR5cGVzIHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQg
c2Nyb2xsaW5nL292ZXJmbG93LiAKKyAKKyAgICAgICAgU3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5n
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnNjcm9sbFRvIGNvbnN0KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnNldFNjcm9sbFRvcCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmV2ZWFsU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUgY29uc3QpOgorICAgICAgICAqIGh0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0
VHlwZTo6ZWxlbWVudERpZEJsdXIpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVu
Y2xvc2luZ0JveCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsVG9BbmNob3IpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvU3Bh
dGlhbE5hdmlnYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsSW5EaXJlY3Rpb24p
OgorICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2VkRm9yTm9kZSk6CisgICAgICAgICogcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2Nyb2xsYWJsZUFy
ZWFGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNv
bXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3R5bGVEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMZWZ0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsVG9wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldHVwV2hlZWxFdmVudE1vbml0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Ny
b2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9s
bGJhckxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNj
cm9sbExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJs
ZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYW5TY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxQb3NpdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNj
dXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb25zdHJhaW5pbmdSZWN0Rm9y
U3RpY2t5UG9zaXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnJlc2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmlzaWJsZVNpemUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
YXNPdmVybGF5U2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRU
ZXN0TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBS
ZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
b21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdT
dGFja0xheWVyR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpyZXF1aXJlc0hvcml6b250YWxTY3JvbGxiYXJMYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzU2Ny
b2xsQ29ybmVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnRDb250ZW50
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZlU2Nyb2xs
YWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzY3JvbGxhYmxlQXJlYUZvclNj
cm9sbGluZ05vZGVJRCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lXZWJLaXRTY3Jv
bGxpbmdMYXllckNvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1J1YmJlckJhbmRJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVh
ZEZvclBlcmZvcm1hbmNlVGVzdGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmFw
cGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xh
bXBTY3JvbGxPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVl
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y3JlYXRlT3JEZXN0cm95TWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3Jv
bGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
b3ZlcmhhbmdBbW91bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2
aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVu
dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dD
b250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZW5kZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93Q29udHJv
bHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZs
b3dUb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmZsb3dCb3R0b20gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNT
Y3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVy
ZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3Zl
cmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVz
aXplcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aXNBY3RpdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxF
dmVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3Zlcmxh
eVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNsZWFyU2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVJlc2l6ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVs
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Ny
b2xsRnJvbVBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3Vt
ZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01v
Y2tTY3JvbGxBbmltYXRvck1lc3NhZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDogQWRkZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
YXJxdWVlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp0aW1lckZp
cmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQu
Y3BwOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVl
bEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OiBjb25zdCk6CisKIDIwMjAtMTItMTEgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJhY2twYWQgYW5k
IE1vdXNlIHNjcm9sbCBldmVudHMgb24gaVBhZCBvbmx5IGZpcmUgInBvaW50ZXJtb3ZlIiAtLSBu
b3QgIndoZWVsIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMDA5MGY2NDViOWQ1Li41YzQxOGM3ZGM5
NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTQ4Niw2ICsxNDg2LDcgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAogICAgIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKyAgICByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oCiAgICAgcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmgKICAgICByZW5k
ZXJpbmcvUmVuZGVyTWVkaWEuaAogICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCBhNDlmMzY4MmEyZjIuLmVmZWIyNTRjMGZiNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAg
LTIyMjcsNiArMjIyNyw3IEBAIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAogcmVuZGVyaW5nL1JlbmRlckxheWVyRmls
dGVycy5jcHAKIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorcmVuZGVyaW5n
L1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGF5b3V0U3Rh
dGUuY3BwCiByZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDUyMmFjMjMwM2RkYi4uNzQ0ZjQzY2ZmZmU5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00MDgx
LDYgKzQwODEsNyBAQAogCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODM3
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRUE0ODM5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg3QTA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUE0ODNCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMYXllci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNTNG
Qjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4NDIxM0I3ODY0
MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODgwMDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg4NzA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJUaGVtZU1hYy5oICovOyB9OwogCQlCQ0VBNDg4QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
VGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDQzLDYgKzYwNDQsOCBAQAogCQkw
RjRDREVBQTIzRDkxQThBMDAyNTFCMDIgLyogU2Nyb2xsVHlwZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2Nyb2xsVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjUz
RkI4MTIxM0IxQkI4MDBDNDBEMzQgLyogQ1NTRmlsdGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZpbHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNTNGQjgzMjEzQjFCQjgwMEM0MEQzNCAvKiBDU1NGaWx0ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRmlsdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTNG
Qjg5MjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NTNGQjhCMjEzQjc2ODQwMEM0MEQzNCAvKiBSZW5kZXJMYXllckZpbHRlcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyTGF5ZXJGaWx0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRBdXRvU2l6aW5nLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NjczLDYgKzI5Njc2LDggQEAKIAkJCQkw
RjUzRkI4OTIxM0I3Njg0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJGaWx0ZXJzLmggKi8sCiAJCQkJ
M0MyNDRGRTVBMzc1QUM2MzNGODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwICov
LAogCQkJCTNDMjQ0RkU0QTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0
LmggKi8sCisJCQkJMEY1M0ZCODMyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuY3BwICovLAorCQkJCTBGNTNGQjg0MjEzQjc4NjQwMEM0MEQzNCAvKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLmggKi8sCiAJCQkJMkQ5MDY2MDQwQkUxNDFENDAwOTU2OTk4IC8q
IFJlbmRlckxheW91dFN0YXRlLmNwcCAqLywKIAkJCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTgg
LyogUmVuZGVyTGF5b3V0U3RhdGUuaCAqLywKIAkJCQlCQzMzRkIxQTBGMzBFRTg1MDAyQ0REN0Mg
LyogUmVuZGVyTGluZUJveExpc3QuY3BwICovLApAQCAtMzQxNTYsNiArMzQxNjEsNyBAQAogCQkJ
CTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTNDMjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjUzRkI4NDIxM0I3
QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzExMkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJv
eExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXgg
MDIzMDBkOTg3ODUxLi40NjBlNjVmYjc4YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtODMs
NiArODMsNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTA2
LDcgKzM5MDcsNyBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJl
U2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LmxheWVyKCkgPyBib3gu
bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApA
QCAtMzkxOSw3ICszOTIwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3Jv
bGxUbyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAg
IC8vIEZJWE1FOiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVz
dCBpbiBSVEwgb3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50
KTsKKyAgICBib3gubGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxU
b09mZnNldChwb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCmluZGV4IDljYWEzYzhlNmVmNy4uOGQ3MTFiNjU0ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCkBAIC05Miw2ICs5Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3Iu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXIuaCIKQEAgLTEzMzUsOCArMTMzNiw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2Ny
b2xsTGVmdChpbnQgbmV3TGVmdCkKICAgICAgICAgaW50IGNsYW1wZWRMZWZ0ID0gY2xhbXBUb0lu
dGVnZXIobmV3TGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAg
ICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJl
aGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9s
bDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KGNsYW1wZWRMZWZ0LCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7
Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5sYXllcigpKQot
ICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0
YXRlKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyZXIt
PmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIp
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hl
ZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTM1OSw4ICsxMzYwLDggQEAgdm9pZCBFbGVt
ZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1wZWRUb3AgPSBj
bGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3RpdmVab29tKCkp
OwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNjcm9sbGluZyhT
Y3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0
ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNsYW1wZWRUb3As
IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1h
dGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVy
KCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRj
aGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5k
ZXJlci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJM
YXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwCmluZGV4IDliNjdkMjk3ZTE5MS4uODRkZTk4YzhiYWU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTgsNiArNTgsNyBAQAog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lLmgiCkBAIC0yMzkxLDkgKzIzOTIsMTAgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6cmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGUgcmV2ZWFsTW9kZSwgY29uc3Qg
U2Nyb2wKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGxheWVyID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpIHsKLSAg
ICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRy
dWUpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgbGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgaW5zaWRlRml4ZWQsIHsgcmV2ZWFs
TW9kZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQsIFNob3VsZEFsbG93Q3Jvc3NPcmlnaW5TY3JvbGxp
bmc6OlllcyB9KTsKLSAgICAgICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICAgICAg
dXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5wYWdl
KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCkuY2xp
ZW50KCkubm90aWZ5UmV2ZWFsZWRTZWxlY3Rpb25CeVNjcm9sbGluZ0ZyYW1lKCptX2RvY3VtZW50
LT5mcmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcApp
bmRleCAwYWRmN2QxNjRlMmUuLjJmOGNiNjliZTM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcnF1ZWVFbGVtZW50LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApA
QCAtMTc1LDcgKzE3NiwxMCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJl
bmRlck1hcnF1ZWUoKSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIo
KS0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRl
ckJveE1vZGVsT2JqZWN0KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApp
bmRleCAyZGU0M2RhZDVhOWYuLmMwMmE4ZDc2YzIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJM
YXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI1Myw5ICsyNTQsMTEg
QEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBpZiAoIWlu
bmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIGlubmVyTGF5ZXJTY3JvbGxh
YmxlID0gaW5uZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgYm9v
bCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lPigqcmVuZGVyZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBp
bm5lckxheWVyLT5zY3JvbGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsV2lkdGgo
KSwgMCk7CisgICAgaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldCk7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1Z2dlc3Rp
b25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzgyZmY3YzVkM2Y2
Li4xNTFlNzVhNTc2YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTgw
LDYgKzgwLDcgQEAKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTE1
MDEsNyArMTUwMiw3IEBAIE9wdGlvbmFsPEN1cnNvcj4gRXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJz
b3IoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBib29sIHNoCiAgICAgICAgICAgICBpZiAo
YXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqcmVuZGVyZXIp
LmxheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpblJlc2l6ZXIgPSBsYXllci0+aXNQb2ludElu
UmVzaXplQ29udHJvbChyb3VuZGVkSW50UG9pbnQocmVzdWx0LmxvY2FsUG9pbnQoKSkpOwogICAg
ICAgICAgICAgICAgIGlmIChpblJlc2l6ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBs
YXllci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhX
ZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxheWVyLT5yZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpIDogc291dGhFYXN0
UmVzaXplQ3Vyc29yKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTg1MSw5ICsx
ODUyLDkgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFuZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEoTm9kZSogbm9kZSkKICAgICAgICAgaWYgKCFsYXllcikKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7Ci0gICAgICAgICAgICBpZiAoIXNjcm9sbGFibGVM
YXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
YWJsZUxheWVyOworICAgICAgICBpZiAoYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkgeworICAgICAgICAgICAgaWYgKCFlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMjk4MCw3ICsyOTgxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZVdoZWVsRXZlbnRJbkFwcHJvcHJpYXRlRW5jbG9zaW5nQm94KE5vZGUqIHN0YXJ0Tm9k
ZSwgY28KIAogICAgIFJlbmRlckJveCogY3VycmVudEVuY2xvc2luZ0JveCA9ICZpbml0aWFsRW5j
bG9zaW5nQm94OwogICAgIHdoaWxlIChjdXJyZW50RW5jbG9zaW5nQm94KSB7Ci0gICAgICAgIGlm
IChSZW5kZXJMYXllciogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpKSB7
CisgICAgICAgIGlmIChhdXRvKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVy
KCkgPyBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cikgewogICAgICAgICAgICAgYXV0byBwbGF0Zm9ybUV2ZW50ID0gd2hlZWxFdmVudC51bmRl
cmx5aW5nUGxhdGZvcm1FdmVudCgpOwogICAgICAgICAgICAgYm9vbCBzY3JvbGxpbmdXYXNIYW5k
bGVkOwogICAgICAgICAgICAgaWYgKHBsYXRmb3JtRXZlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAppbmRleCA4ZGUzZGVlZmQzYTguLjZhNDg4ZjFlM2FmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcApAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTkzLDcgKzI1OTQsOCBAQCB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYg
KCFsYXlvdXRDb250ZXh0KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFp
bmVkT2JqZWN0cygpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhp
cy0+cmVuZGVyVmlldygpKSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpOworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IHJlbmRlclZpZXctPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3Jv
bGwoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTMyMDgsNiArMzIxMCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6c2Nyb2xsVG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGlu
Zywgc3RyZWFtIDw8ICIgYW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byog
ZW5jbG9zaW5nTGF5ZXIgPSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigp
OworICAgIGlmIChlbmNsb3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpCisgICAgICAgIGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVh
KCk7CisKICAgICAvLyBTY3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0
aGUgYW5jaG9yLgogICAgIC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNp
ZGUgKHRoaXMgbWF0Y2hlcyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjAsNyAr
Mzg2NiwxMSBAQCBTY3JvbGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIEludFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94
KGJvb2wqKSBjb25zdApAQCAtNDMyNCw4ICs0MzM0LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWlu
dENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlS
ZWN0CiAgICAgICAgIHJlbmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExh
eWVyLT5wYWludChjb250ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2
aW9yLCByZW5kZXJlciwgeyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5
T3JpZ2luUGFpbnRQb2xpY3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdp
blBhaW50UG9saWN5OjpBbnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWlu
dFBvbGljeTo6QWNjZXNzaWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAg
aWYgKHJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50
UmVnaW9uQ29udGV4dCkKLSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJz
KGNvbnRleHQsIGRpcnR5UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9s
bGFibGVSb290TGF5ZXItPnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0
LCBtX3BhaW50QmVoYXZpb3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRl
bnRzKGNvbnRleHQsIGRpcnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMy4uODA5YmMxOTEz
NDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOTQsNyArMzk1LDggQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWluZXIs
IEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xheWVy
KCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xh
eWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5YjI0
Mi4uOGE0Y2E3YmNkMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQpAQCAtNTcs
NiArNTcsNyBAQAogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCiAj
aW1wb3J0ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEuaCIKICNpbXBvcnQgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW1wb3J0ICJS
ZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgiCkBAIC04MTks
MTQgKzgyMCwxNSBAQCB2b2lkIEZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdlZEZv
ck5vZGUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBOb2RlKgogICAgIGlmICghcmVuZGVyZXIg
fHwgIXJlbmRlcmVyLT5oYXNMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJM
YXllciYgbGF5ZXIgPSAqZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlciku
bGF5ZXIoKTsKKyAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKIAotICAgIGF1dG8gb2xkU2Nyb2xsVHlwZSA9
IGxheWVyLmN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgbGF5ZXIuc2V0Q3VycmVudFNjcm9sbFR5
cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNlciA6IFNjcm9sbFR5cGU6OlByb2dyYW1t
YXRpYyk7Ci0gICAgbGF5ZXIuc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsKKyAgICBh
dXRvIG9sZFNjcm9sbFR5cGUgPSBzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBlKCk7
CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJTY3JvbGwg
PyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Cisg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDdXJyZW50U2Nyb2xsVHlwZShvbGRTY3JvbGxUeXBlKTsK
IAotICAgIGxheWVyLmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdlIGFsd2F5cyBj
YWxsIHRoaXM/CisgICAgc2Nyb2xsYWJsZUxheWVyLT5kaWRFbmRTY3JvbGwoKTsgLy8gRklYTUU6
IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPwogfQogCiB2b2lkIEZyYW1lOjpyZXNldEFsbEdl
b2xvY2F0aW9uUGVybWlzc2lvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KaW5kZXggNzE0MTUzNjViYWJhLi42ZjM4M2RhMDNiZDcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBv
cnQgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJl
bmRlckxheWVyLmgiCisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1w
b3J0ICJSZW5kZXJMaXN0Qm94LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJS
ZW5kZXJXaWRnZXQuaCIKQEAgLTc5MSw3ICs3OTIsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYUZvckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVy
TGlzdEJveD4oYm94KSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZi
b3gpOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgewor
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVu
IGluIHRlcm1zIG9mIFNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMzU4ZDY2Zjk4NzIz
Li4xZGUzZTA3NTA2YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKQEAgLTExMTMsOCArMTExNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgLy8g
ei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIs
IHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dy
b3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91
bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkg
PT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAg
IGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3Vu
ZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5m
by5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRP
bmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dD
b250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDcsNyArMjAwOCwxMiBAQCBib29sIFJlbmRlckJs
b2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1
bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChs
b2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwog
fQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjUwMywx
MCArMjUwOSwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNv
bnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdo
aWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAg
b24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9y
IGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVy
ZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAg
IGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDog
KGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsK
LSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNl
bGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsK
KyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkgLT4gYm9v
bCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2Vs
aW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7
CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewogICAg
ICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2Vs
aW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCmluZGV4IDg1YzNiNzEzYThiOC4uNTBmNjBmMTkwZDhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzQ5LDcgKzM0OSw4IEBA
IHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlv
dXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsCiAKICAgICBpZiAoIXN0eWxlKCkuYXV0b1dyYXAoKSAm
JiBjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdp
dGggaW5saW5lIGNoaWxkcmVuIGhhcyBubyBtaW5pbXVtIHdpZHRoLgotICAgICAgICBpZiAobGF5
ZXIoKSAmJiBsYXllcigpLT5tYXJxdWVlKCkgJiYgbGF5ZXIoKS0+bWFycXVlZSgpLT5pc0hvcml6
b250YWwoKSkKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxh
eWVyICYmIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpICYmIHNjcm9sbGFibGVMYXllci0+bWFy
cXVlZSgpLT5pc0hvcml6b250YWwoKSkKICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IDA7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IDhkODUz
YWEyYzhhYS4uMmFkMWU0ZWY1MTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTMxOSwxMCArMzIwLDEyIEBAIHZvaWQgUmVuZGVy
Qm94OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlCiAgICAgLy8gSWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhh
dmUgYSBkZWZpbmVkIHNjcm9sbExlZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVl
IGludG8gdGhlCiAgICAgLy8gbmV3IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgogICAgIGlmICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZl
Y3RpdmVab29tKCkgIT0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9s
bFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAg
ICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8g
b2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUo
em9vbVNjYWxlRmFjdG9yKTsKLSAgICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0
aW9uIHNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwor
ICAgICAgICAgICAgZmxvYXQgem9vbVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9v
bSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uLnNjYWxlKHpvb21TY2FsZUZhY3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBPdXIgb3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91
dCB0cmlnZ2VyaW5nIGxheW91dC4KQEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5kZXJCb3g6
OnNjcm9sbEhlaWdodCgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25z
dAogewotICAgIHJldHVybiBoYXNPdmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+
c2Nyb2xsUG9zaXRpb24oKS54KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4g
KGhhc092ZXJmbG93Q2xpcCgpICYmIHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbFBvc2l0aW9uKCkueCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9w
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxh
eWVyKCktPnNjcm9sbFBvc2l0aW9uKCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAg
cmV0dXJuIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94Ojpy
ZXNldExvZ2ljYWxIZWlnaHRCZWZvcmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEgKzU5NSwz
OCBAQCBzdGF0aWMgdm9pZCBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXll
cikKICAgICBQYWdlJiBwYWdlID0gbGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBsYXll
ci5zY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZl
bnRUZXN0TW9uaXRvcigpKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgYXV0byYg
c2Nyb2xsQW5pbWF0b3IgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7CisgICAg
c2Nyb2xsQW5pbWF0b3Iuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxFdmVudFRl
c3RNb25pdG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3
TGVmdCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5p
bWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAh
bGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRN
b25pdG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0
LCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVk
KTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxU
eXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBh
bmltYXRlZCkKIHsKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAg
ICAgICByZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJl
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVy
KCkpOwotICAgIGxheWVyKCktPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwg
Y2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWVBvc2l0
aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBS
ZW5kZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlv
biwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25p
dG9yKCpsYXllcigpKTsKLSAgICBsYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MjYs
MTIgKzgzOCwxOCBAQCBib29sIFJlbmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJT
aXplKCkgY29uc3QKIAogaW50IFJlbmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAg
IGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5j
bHVkZVZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xs
YmFySGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxi
YXJTaXplKCkgPyBsYXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAg
IGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xs
YWJsZUxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVu
ZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEz
ICs4NTcsMTYgQEAgaW50IFJlbmRlckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRo
KCkgY29uc3QKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsK
IAorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpIDogbnVsbHB0cjsKICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAm
JiAoc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVy
bGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxl
TGF5ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIt
Pmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCgpOwogICAgIH0KIAogICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAm
JiAoc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVy
bGF5U2Nyb2xsYmFycygpKSkgewotICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5o
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFi
bGVMYXllciwgc2Nyb2xsYWJsZUxheWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXll
ci0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoKTsKICAgICB9CiAKQEAgLTg1NCw4ICs4NzUsOCBAQCBpbnQgUmVuZGVy
Qm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRl
ckJveDo6c2Nyb2xsTGF5ZXIoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVu
dCkKIHsKLSAgICBSZW5kZXJMYXllciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hM
YXllciAmJiBib3hMYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKSB7CisgICAgYXV0byogYm94TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCkt
PmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVy
U2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKSkgewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAg
ICAgICAqc3RvcEVsZW1lbnQgPSBlbGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTA4LDEzIEBAIGJv
b2wgUmVuZGVyQm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0
aW9uLCBTY3JvbGxHcmFudWxhcml0CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigp
OwogICAgIGlmIChsKSB7CisgICAgICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAg
Ly8gT24gTWFjIG9ubHkgd2UgcmVzZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hl
biBkb2luZyBhIGRvY3VtZW50IHNjcm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAg
ICAgIGlmIChncmFudWxhcml0eSA9PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Ny
b2xsZWQgPSBsLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9u
QmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAg
ICAgICAgc2Nyb2xsZWQgPSBib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChTY3JvbGxJbmxpbmVEaXJlY3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1
bWVudCwgbXVsdGlwbGllcik7CiAjZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2Fs
VG9QaHlzaWNhbChkaXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCku
aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkK
KyAgICAgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2Fs
KGRpcmVjdGlvbiwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAg
ICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBA
IC05MjEsNiArOTQzLDI3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlQm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFi
bGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFi
bGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgUmVuZGVyVmlldyBpcyBhbHdheXMgZXhwZWN0
ZWQgdG8gYmUgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZS4KKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkg
fHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIE92ZXJmbG93IGhhbmRsaW5nIG5lZWRzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
CisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8
IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBS
ZXNpemUgaGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICBpZiAo
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgLy8gTWFycXVlZSBoYW5kbGluZyBuZWVkcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LgorICAgIGlmIChpc0hUTUxNYXJxdWVlKCkgJiYgc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAh
PSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCiAvLyBGSVhNRTogVGhpcyBpcyBiYWRseSBuYW1lZC4gb3ZlcmZsb3c6
aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVkLCB5ZXQgdGhpcyByZXR1cm5z
IGZhbHNlIGluIHRoYXQgY2FzZS4KIGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxs
eVNjcm9sbGVkKCkgY29uc3QKIHsKQEAgLTk5Nyw4ICsxMDQwLDggQEAgUmVuZGVyQm94KiBSZW5k
ZXJCb3g6OmZpbmRBdXRvc2Nyb2xsYWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lk
IFJlbmRlckJveDo6cGFuU2Nyb2xsKGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYg
KGxheWVyKCkpCi0gICAgICAgIGxheWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOwor
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFuU2Nyb2xs
RnJvbVBvaW50KHNvdXJjZSk7CiB9CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Ny
b2xsYmFycygpIGNvbnN0CkBAIC0xMDI3LDcgKzEwNzAsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVu
ZGVyQm94OjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsK
IAogICAgIEFTU0VSVChoYXNMYXllcigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9z
aXRpb24oKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAw
IH07CisKKyAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQog
CiBMYXlvdXRTaXplIFJlbmRlckJveDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0
CkBAIC0xNTc1LDkgKzE2MjIsMTAgQEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5k
SXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAo
IWdldEJhY2tncm91bmRQYWludGVkRXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCkt
PnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogICAgIHJldHVybiBmb3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFj
a2dyb3VuZFJlY3QsIGJhY2tncm91bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAg
LTE4OTQsMTAgKzE5NDIsMTAgQEAgTGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVj
dC5zZXRTaXplKGNsaXBSZWN0LnNpemUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9y
ZGVyUmlnaHQoKSwgYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3Vi
dHJhY3Qgb3V0IHNjcm9sbGJhcnMgaWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7
CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXll
cigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlw
UmVjdC5jb250cmFjdChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSks
IGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAg
ICAgICBjbGlwUmVjdC5tb3ZlKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aChyZWxldmFuY3kpLCAwKTsKKyAgICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1
cm4gY2xpcFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggMjNiYjc4
MTljMjI4Li5iYWI5ZGQwNjI5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
QEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0
b1VzZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAg
fQogCisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAg
ICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYgbG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZv
ciB0aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRo
ZSByb290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKaW5kZXggODM4MjU2YzExZWYyLi41YTI1OTE2MWIxZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNTEsNiAr
NTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1u
Rmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVS
b3cuaCIKQEAgLTQ4OSw4ICs0OTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29t
cHV0ZVN0aWNreVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICAg
ICAgRmxvYXRQb2ludCBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rv
ciA9IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IubG9jYXRpb24oKSAt
CiAgICAgICAgICAgICBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVmdCgp
ICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVuY2xv
c2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGlu
Z1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5n
QmxvY2spCi0gICAgICAgICAgICBjb250YWluZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgY29u
dGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVu
Y2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgICAg
IGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3Iuc2V0TG9jYXRpb24oY29u
dGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IpOwogICAgIH0KICAgICBj
b25zdHJhaW50cy5zZXRDb250YWluaW5nQmxvY2tSZWN0KGNvbnRhaW5lclJlY3RSZWxhdGl2ZVRv
U2Nyb2xsaW5nQW5jZXN0b3IpOwpAQCAtNTA3LDggKzUxMCwxMCBAQCB2b2lkIFJlbmRlckJveE1v
ZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlv
blZpZXdwbwogICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0xheWVyKSB7CiAgICAgICAgIHN0aWNr
eUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yIC09IEZsb2F0U2l6ZShlbmNsb3Np
bmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5n
TGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9wKCkpOwotICAgICAgICBpZiAoJmVuY2xvc2lu
Z0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykKLSAgICAgICAgICAgIHN0aWNreUxvY2F0
aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIt
PnNjcm9sbE9mZnNldCgpOworICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNv
bnRhaW5pbmdCbG9jaykgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3Np
bmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNl
c3RvciArPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3csIGFzc3VtZSB0aGF0IHx0
aGlzfCBpcyBub3QgdHJhbnNmb3JtZWQuCiAgICAgc3RpY2t5Qm94UmVsYXRpdmVUb1Njcm9sbGlu
Z0FuZWNzdG9yLnNldExvY2F0aW9uKHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0Fu
Y2VzdG9yKTsKQEAgLTU0NywxMSArNTUyLDE0IEBAIEZsb2F0UmVjdCBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uKCkgY29uc3QKIAogICAgICAg
ICBGbG9hdFJlY3QgY29uc3RyYWluaW5nUmVjdCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxvY2Fs
VG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChjbGlwUmVjdCksICZ2aWV3KCkpLmJvdW5kaW5nQm94
KCk7CiAKLSAgICAgICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Ny
b2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldDsKKyAgICAg
ICAgaWYgKHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyKQorICAgICAgICAgICAgc2Ny
b2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogCiAgICAgICAgIGZsb2F0IHNjcm9sbGJhck9mZnNldCA9IDA7
Ci0gICAgICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2lu
Z0NsaXBwaW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkK
LSAgICAgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IGVuY2xvc2luZ0NsaXBwaW5nQm94LmxheWVy
KCktPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpOwor
ICAgICAgICBpZiAoZW5jbG9zaW5nQ2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdD
bGlwcGluZ0JveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgJiYg
c2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxiYXJP
ZmZzZXQgPSBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CiAKICAgICAgICAgY29uc3RyYWlu
aW5nUmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KHNjcm9sbE9mZnNldC54KCkgKyBzY3JvbGxi
YXJPZmZzZXQsIHNjcm9sbE9mZnNldC55KCkpKTsKICAgICAgICAgcmV0dXJuIGNvbnN0cmFpbmlu
Z1JlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCAwOGVj
ZTc2MmQ5YmQuLjQ1MTkxZGI1OWI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBB
ZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEg
Uy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29t
bXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAt
MzAxLDE4ICszMDMsMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xp
c3REaXJ0eSh0cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAg
LCBtX2luUmVzaXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRy
dWUpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAs
IG1faGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3Vz
ZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihm
YWxzZSkKLSAgICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50
U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNE
aXJ0eSh0cnVlKQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlz
aWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2Nl
bmRhbnQoZmFsc2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAg
ICAsIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVz
QXNGaXhlZChmYWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0
eSh0cnVlKQpAQCAtMzIwLDIxICszMTksMTEgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJl
bmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1f
aGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9u
Q29udGFpbmVkRGVzY2VuZGFudHMoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1f
aGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWdu
T2JqZWN0KGZhbHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1f
dmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVh
c29uKQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhm
YWxzZSkKLSNlbmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGZhbHNlKQotICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0g
ICAgLCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgLCBtX2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTgs
MTYgKzM0Nyw2IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRT
dGF0dXNEaXJ0eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVy
ZXIoKS5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0K
LQotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAg
ICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhl
IG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRl
ckJveCgpKSB7Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRM
YXllclNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24u
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9z
aXRpb24obV9zY3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVy
TGF5ZXI6On5SZW5kZXJMYXllcigpCkBAIC0zNzUsMjkgKzM1NCwxMCBAQCBSZW5kZXJMYXllcjo6
flJlbmRlckxheWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVy
KCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAg
QVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZy
YW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVn
aXN0ZXJlZFNjcm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotI2VuZGlmCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQo
KSkKLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsK
LSAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92
ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNp
emVyKCk7Ci0KKyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVy
RmlsdGVycygpOwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAt
OTQ2LDcgKzkwNiw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxh
eWVyUG9zaXRpb24oJmZsYWdzKTsKLSAgICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklm
TmVlZGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlm
IChnZW9tZXRyeU1hcCkKICAgICAgICAgZ2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0
b3IodGhpcywgcGFyZW50KCkpOwpAQCAtOTU0LDcgKzkxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0
aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAg
ICAgY2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxv
d0NvbnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAg
ICAgaWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRT
aXplKHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkp
KTsKQEAgLTk2Myw3ICs5MjQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAg
ICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNl
c3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2Vz
dG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xz
KHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9v
dCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAt
MTAzOSwxNCArMTAwMCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
KFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgZm9yIChSZW5k
ZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlN
YXAsIGZsYWdzKTsKIAotICAgIC8vIFdpdGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBu
b3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkg
ewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQg
aXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91
cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRl
TWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwog
CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkp
IHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRM
YXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7CkBAIC0xMTI2LDI3ICsxMDgxLDYgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJS
ZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXll
cjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5k
ZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVu
ZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMg
IT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1h
cHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5
IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3Jk
ZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFu
Y2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Ny
b2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVy
ZQpAQCAtMTE5OSwxMiArMTEzMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8g
b2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2Vs
ZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92
ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1
ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBk
YXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAg
IGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BN
YXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpAQCAtMTY5NSw4ICsxNjI1LDEwIEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9z
aXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAg
ICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQ
YXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5w
b3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0
cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4K
LSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFy
ZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3Np
dGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0
aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5G
bG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVu
ZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVu
ZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQ
b3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3
MDYsOCArMTYzOCwxMCBAQCBib29sIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9w
dGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQo
cG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9i
b3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGUoKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAg
ICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAg
ICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0
aW9uKCkpOworICAgICAgICBpZiAocGFyZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dD
bGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVh
ID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQ
b2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9z
aXRpb24oKSk7CisgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRl
bnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJl
bnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29wZSgpOwpAQCAtMTgzOSw5ICsxNzczLDkgQEAg
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQor
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29u
c3QKIHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50
KCkub3duZXJFbGVtZW50KCk7CisgICAgYXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5k
b2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1MiwxNSArMTc4NiwxNSBAQCBzdGF0aWMgUmVuZGVy
TGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVy
KQogICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0
aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMp
CitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVy
KENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAg
IGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxv
Y2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250
YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAo
Y3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVy
KGxheWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBS
ZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91
bmRhcmllcykgY29uc3QKQEAgLTE4NzQsNyArMTgwOCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNl
bGYsCiAgICAgaWYgKGluY2x1ZGVTZWxmID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxm
ICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVy
ID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFy
aWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5l
eHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFy
aWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5p
bmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25z
aWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5
ZXI7CiAgICAgfQpAQCAtMTg4Miw1MCArMTgxNiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYs
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFi
bGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICov
IHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3Jv
bGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdD
b29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmlt
YXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFu
aW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QK
LXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3co
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlE
KCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Ny
b2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBz
Y3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFy
c09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5zY3JvbGxpbmdQZXJmb3JtYW5jZVRlc3RpbmdFbmFibGVk
KCk7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRB
bmNlc3RvcigpIGNvbnN0CiB7CiAgICAgUmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAg
LTI0NTEsMTkgKzIzNDEsNiBAQCBMYXlvdXRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5j
ZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0
b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9p
bnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VD
b21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsKLSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRl
cmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBp
ZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5z
aWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5B
QkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNj
cm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Nj
cm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92
ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQog
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91
Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDkz
LDI4OSArMjM3MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRM
aXN0ZW5lckZvclNjcm9sbGluZygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXll
cnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRlZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5
ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRl
IGxheWVycy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVy
KCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQg
YmVnaW5uaW5nRGVsdGEpCi17Ci0gICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJl
Zm94J3MuCi0gICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29s
a2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVk
UmVkdWNlciA9IDEyOwotCi0gICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAv
IHNwZWVkUmVkdWNlcjsKLSAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVz
dGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19j
YXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWRE
ZWx0YSA8IC0xKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1
c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsg
MTsKLQotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNp
emUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1
cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNj
cm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9p
bnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBj
aGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRv
dy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBp
bmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAg
ICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9z
aXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3Vz
TW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9
IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3du
TW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgp
KSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBs
ZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAg
ICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1
cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVs
eShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRo
IHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6
OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVh
Kiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAo
cmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJl
bmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBp
ZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1w
KSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAg
ICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7
Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0
aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUg
cmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVy
KCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFi
bGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsK
LQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1
dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8g
SWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUg
cHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBh
biBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0
aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAg
ICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAg
ICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3
YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQot
fQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9u
YWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91
dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0g
ICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsK
LSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0g
ICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmlt
YXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBv
c2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
Ci17Ci0gICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNj
cm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRp
b24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09m
ZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFt
cGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNldCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNj
cm9sbE9mZnNldC5jb25zdHJhaW5lZEJldHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9m
ZnNldCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBk
YXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5H
KQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJl
cXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRv
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQot
ICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZSgqdGhpcywgcG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwg
U2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlv
clN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikK
LSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNl
dDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50
U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0g
ICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zm
c2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFt
cGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6
Ok5vdEluQW5pbWF0aW9uKTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Ny
b2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1h
dGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZykKLXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9
IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlw
ZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0
OwotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlv
clN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCku
Y2FuY2VsQW5pbWF0aW9ucygpOwotICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Ny
b2xsT2Zmc2V0KCkpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhB
bmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHBy
ZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9T
VFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBv
c2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3Jv
bGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIp
OwotCi0gICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAo
IWJveC0+aXNIVE1MTWFycXVlZSgpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1l
bnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6
aGlkZGVuIGJsb2NrcykuCi0gICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAg
ICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5
aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAg
ICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gt
PmNsaWVudFdpZHRoKCkpOwotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNj
cm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Ny
b2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNl
dCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zm
c2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0g
Y2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAt
IGNhcmV0V2lkdGgpCi0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRo
OwotCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAg
ICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0g
ICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9
PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxC
ZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhp
bmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0
aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxp
bmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3
aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAgICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRy
eVVwZGF0ZSgpOwotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9s
bCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBv
c2l0aW9uID0gbmV3UG9zaXRpb247Ci0KLSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIo
KS52aWV3KCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5
ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5
IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBi
ZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBh
bmNlc3Rvci4KLSAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5S
ZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBv
ZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNo
ZWQuCi0gICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwot
Ci0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMo
KTsKLQotICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAg
ICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRo
ZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9z
aXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2Yg
dXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNl
IHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBv
c2l0aW5nIGxheWVycyBsYXRlcgotICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4K
LSAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21w
b3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0g
ICAgICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBz
dGFja2luZyBjb250ZXh0LgotICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9
IHN0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0
RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5n
IG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7
Ci0gICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgp
KTsKLSAgICB9Ci0KLSAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29u
dGFpbmVyRm9yUmVwYWludCgpOwotICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGlu
dmFsaWRhdGVkIGFmdGVyIHNjcm9sbGluZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0
UmVjdE5lZWRzVXBkYXRlKCk7Ci0gICAgCi0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9
IHJlbmRlcmVyKCkuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRM
YXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JG
YWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChy
ZXBhaW50Q29udGFpbmVyKQotICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVw
YWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50KTsKLSAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVu
dFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVp
cmVzUmVwYWludCA9IHRydWU7Ci0gICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsK
LSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNl
dERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAg
ICAgICAgcmVxdWlyZXNSZXBhaW50ID0gYmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0
ZWRTY3JvbGwoKTsKLSAgICB9Ci0KLSAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50
IG9mIG91ciBvYmplY3QuCi0gICAgaWYgKHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVy
ZXIoKS5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFp
bnQpOwotCi0gICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9N
IGV2ZW50cy4KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgp
KQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdl
dCgqZWxlbWVudCk7Ci0KLSAgICBpZiAoc2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcu
ZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmll
dygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVy
TGF5ZXJEaWRTY3JvbGwoKnRoaXMpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVt
ZW50QW5kVmlld1Blcm1pdFNjcm9sbChIVE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50
QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVu
J3QgZXhwbGljaXRseSBmb3JiaWRkZW4sIHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODIwLDcgKzI0
MTQsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0
ID0gYWJzb2x1dGVSZWN0OwogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250
YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBh
dXRvKiBwYXJlbnRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObyk7CiAKICAgICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0g
W3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQsIFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQogICAgIHsK
QEAgLTI4MzAsNiArMjQyNCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2li
bGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgfTsKIAog
ICAgIGlmIChhbGxvd3NDdXJyZW50U2Nyb2xsKCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgICAgIC8vIERvbid0
IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5
IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBw
cmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5nIHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2Fm
YXJpIFJTUy4KICAgICAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKQEAgLTI4NDAs
MjQgKzI0MzYsMTcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICAgICAgLy8gYm9yZGVy
IGVkZ2UuIE1ha2UgdGhlIHJlY3RhbmdsZSByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsYWJsZSBhcmVh
LgogICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KC1MYXlvdXRQb2ludChib3gtPmJvcmRl
ckxlZnQoKSwgYm94LT5ib3JkZXJUb3AoKSkpOwogCi0gICAgICAgIGlmIChzaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBG
b3IgZGlyZWN0aW9uOiBydGw7IHdyaXRpbmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBz
Y3JvbGwgYmFyIGlzIG9uIHRoZSBsZWZ0IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAg
ICAgIC8vIHN0YXJ0cyBmcm9tIHRoZSByaWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4
IG9mIGxvY2FsRXhwb3NlUmVjdCBzaG91bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0
b28uCi0gICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0
aWNhbFNjcm9sbGJhcldpZHRoKCksIDApKTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5t
b3ZlQnkoTGF5b3V0UG9pbnQoLXNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0
aCgpLCAwKSk7CiAgICAgICAgIH0KICAgICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1
LCAwX2x1LCBib3gtPmNsaWVudFdpZHRoKCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAg
ICBleHBhbmRTY3JvbGxSZWN0VG9WaXNpYmxlVGFyZ2V0UmVjdFRvSW5jbHVkZVNjcm9sbFBhZGRp
bmcoYm94LCBsYXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0KTsKICAgICAgICAgTGF5b3V0UmVj
dCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRvRXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJl
Y3QsIGluc2lkZUZpeGVkLCBvcHRpb25zLmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAg
ICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQo
c2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNpemUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9j
YXRpb24oKSkpOwotICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6Tm90SW5BbmltYXRpb24pIHsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBz
aG91bGRVc2VBbmltYXRlZFNjcm9sbChib3gtPmVsZW1lbnQoKSwgb3B0aW9ucy5iZWhhdmlvcik7
Ci0gICAgICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQo
Y2xhbXBlZFNjcm9sbE9mZnNldCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0g
ICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7
Ci0gICAgICAgICAgICBuZXdSZWN0ID0gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1
YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3Jtcyku
Ym91bmRpbmdCb3goKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc2Ny
b2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxQb3NpdGlvbihvcHRpb25zLmJlaGF2aW9yLCByZXZl
YWxSZWN0LCBsb2NhbEV4cG9zZVJlY3QpKQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52
YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVy
RWxlbWVudCgpOwogCkBAIC0yODcxLDcgKzI0NjAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNp
ZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8g
cHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAg
ICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93
ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZp
ZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAg
ICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRl
bnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAog
ICAgICAgICAgICAgICAgIGF1dG8qIGVsZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1
bWVudCgpID8gb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkgOiBudWxscHRyOwogICAgICAgICAgICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVt
ZW50ID8gZWxlbWVudC0+cmVuZGVyQm94KCkgOiBudWxscHRyOwpAQCAtMjk0OCwyMyArMjUzNyw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVj
dCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxS
ZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAg
aWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAg
ICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwg
b2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmlu
Zywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAo
UmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5j
bG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNv
bXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRp
b25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0
aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlU
cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNl
c3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3Qg
UmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVj
dCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3Qg
U2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBj
b25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCk7CkBAIC0zMTExLDcgKzI2ODMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgog
ICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAg
IAogICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNl
dC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7
Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewor
ICAgIGlmIChyZW5kZXJlci0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7CiAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwog
ICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lk
dGgoKSk7CiAgICAgfQpAQCAtMzEyOSwxMDg1ICsyNzAxLDE2NSBAQCB2b2lkIFJlbmRlckxheWVy
OjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUm
IG9sZE9mZgogICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21G
YWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVu
aXQgYmFzZVdpZHRoID0gcmVuZGVyZXItPndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAw
X2x1IDogcmVuZGVyZXItPmhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAg
ICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRF
bGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9J
bnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
Ci0gICAgfQotCi0gICAgaWYgKHJlc2l6ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVy
ZW5jZS5oZWlnaHQoKSkgewotICAgICAgICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4o
KmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0
aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTU0Nz4pLgotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9v
bUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50
LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJl
ci0+bWFyZ2luQm90dG9tKCkgLyB6b29tRmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAg
ICAgICAgfQotICAgICAgICBMYXlvdXRVbml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0
KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVy
QW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6
b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5SGVpZ2h0LCByb3VuZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhl
aWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBk
YXRlTGF5b3V0KCk7Ci0KLSAgICAvLyBGSVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBh
bHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRvdyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQg
dW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3Jv
bGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Ny
b2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxp
bmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVT
dGF0ZT4gZ2VzdHVyZVN0YXRlKQotewotICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xM
SU5HKQotICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkg
ewotICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRv
ci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2Rl
SUQoKSwgZ2VzdHVyZVN0YXRlKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBnZXN0dXJl
U3RhdGUpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRl
cm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVz
aW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNj
cm9sbGJhclNwYWNlOwotICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxi
YXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNl
ID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRo
aXMtPnZpc2libGVTaXplKCk7Ci0gICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6
Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0
ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkp
IH0gfTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAot
ewotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBG
SVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Ny
b2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNl
dEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUg
PSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgp
IDwgMCkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAg
ZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVh
Y2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5z
ZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlz
aWJsZUhlaWdodCgpKSk7Ci0KLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAg
IHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hh
YmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZz
ZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAg
ICByZXR1cm4gc3RyZXRjaDsKLSNlbHNlCi0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBh
Z2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxh
eWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250
cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9s
bENvcm5lclZpc2libGUoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkp
OwotICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25z
dAotewotICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNj
cm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVy
ZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigp
LnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigm
cmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQo
c2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJ
bnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9p
bnQpOwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVu
ZGVyZXIoKSwgcGFyZW50UG9pbnQpOwotICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChz
Y3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
OnZpc2libGVTaXplKCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgp
OwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJu
IEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+
Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWln
aHQoKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNT
aXplKCkgY29uc3QKLXsKLSAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRz
U2l6ZSgpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0g
ICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgo
KSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0
aWNhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4o
Y29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICBy
ZXR1cm4gY29udGVudHNTaXplOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250
ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAg
U2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0g
ICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hh
bmdlZCkgewotICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVs
YXlvdXRDaGlsZHJlbih0cnVlKTsKLSAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgp
OwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1h
dGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXco
KS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdl
KCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpkaWRFbmRTY3JvbGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6
ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4g
d2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgot
ICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3Jv
bGwpOwotfQotI2VuZGlmCi0KLUludFBvaW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRl
cmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQot
Ci1SZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVy
ZXIoKSkpOwotICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVy
ZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAg
IGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJl
bmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8g
aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAw
OwotICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lk
dGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9s
bGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92
ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5n
ZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25P
dmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Ny
b2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkg
IT0gUmVzaXplOjpOb25lOwotICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVO
b25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Ny
b2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9s
bGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXpl
IGNvcm5lclNpemU7Ci0gICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAv
LyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUu
Ci0gICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCwKLSAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9u
dGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9Owot
ICAgIH0KLQotICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hC
YXIpIHsKLSAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdDsKLSAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikgewotICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0g
ICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJT
aXplLndpZHRoKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3Qu
Y29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
c3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3Q7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAg
ICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkg
LSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lk
Q29ybmVyKQotICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdo
dCgpKTsKLQotICAgICAgICByZXN1bHQudmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAg
IH0KLQotICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAg
ICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAg
IGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Qu
bWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21M
ZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgp
LCB9LCBjb3JuZXJTaXplIH07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJT
aXplLCBjb3JuZXJTaXplIH07Ci0gICAgfTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3Ju
ZXIpCi0gICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUp
OwotCi0gICAgaWYgKGhhdmVSZXNpemVyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRD
b3JuZXIpCi0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBT
Y3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAg
IHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xs
YmFyVGhpY2tuZXNzIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotSW50U2l6ZSBSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYgc2Nyb2xsYmFyKSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAg
cmV0dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQot
ICAgIGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50
U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAg
ICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
R3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewot
ICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJl
Y3Q7Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LSAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcGFpbnQuCi0gICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKLQotICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRl
ckJveCgpLT5mbGlwRm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCku
cmVwYWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6Omlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBs
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsK
LX0KLQotc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihS
ZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hh
ZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAg
IGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJh
cj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJl
ciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3Rv
bVNjcm9sbGJhclN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNh
c3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAg
ICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVu
dCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVn
dWxhcik7Ci0gICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9u
KTsKLSAgICAgICAgaWYgKHBhZ2UoKS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndo
ZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKLSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdldCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9u
TnVsbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3Jv
bGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92
QmFyOwotICAgIGlmICghc2Nyb2xsYmFyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNj
cm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJh
cihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3Zl
RnJvbVBhcmVudCgpOwotICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+
KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNh
c3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikK
LXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIg
PSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxz
T3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNj
cm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNj
cm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAg
IC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJh
ciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUg
c2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHls
ZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdl
ZCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29s
IGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAg
ICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0
eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5k
aW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0
b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVs
c2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQot
Ci0gICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNj
cm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bw
b3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFy
LT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxl
Q2hhbmdlZCgpOwotfQotCi1TY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Nj
cm9sbGFibGVBcmVhKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVy
OwotCi0gICAgcmV0dXJuICZyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkK
LXsKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xh
eWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkgewotICAgICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwot
fQotCi0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhU
TUxFbGVtZW50cy4KLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkp
IHx8ICFlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0g
ICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5z
dHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxv
dygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAo
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9k
ZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8q
IHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1
cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xs
QW5pbWF0b3IoKSBjb25zdAotewotICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6
OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9j
a1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0g
ICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsK
LX0KLQotU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVy
IDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2Up
LCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAo
dHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7
Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiBoYXMgYmFja2Ryb3AgZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1v
ZGUoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAg
ICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xh
dGVzIGJsZW5kaW5nIl9zKTsKLQotICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAv
LyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAg
ICAgICAgVGV4dFN0cmVhbSBzdHJlYW07Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tp
bmcoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2
ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2
YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYg
KHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91
bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIG1fdkJhci0+d2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faEJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkKLSAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21S
ZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0
byByZXNpemVyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0
byByZXNpemVDb3JuZXIgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKLSAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgp
LnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRp
b25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIXJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAg
ICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAg
ICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQot
ICAgIAotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVy
KQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5l
cik7Ci0KLSAgICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVj
dChyZWN0cy5yZXNpemVyKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRlckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBw
ZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVy
biBtX3Njcm9sbFNpemUud2lkdGgoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWln
aHQoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xs
RGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcykt
PmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVz
ZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAg
ICByZXR1cm4gbV9zY3JvbGxTaXplLmhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxh
eWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJC
b3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVj
dCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJl
dHVybiBvdmVyZmxvd1JlY3QueSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVy
Zmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsK
LSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxv
d0xlZnQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0LngoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZs
aXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsK
LQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNp
emUuc2V0V2lkdGgocm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkp
OwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRIZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgp
IC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0gICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9s
bGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBz
Y3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJv
cmRlclRvcCgpKTsKLSAgICBzZXRTY3JvbGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0
T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYm
IChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRp
Y2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jp
em9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZs
b3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93
WSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25z
dAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJu
IHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xs
SGVpZ2h0KCkgPiByb3VuZFRvSW50KHJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0K
LXN0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93
ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0
eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Nj
cm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxl
Lmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0
aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3Rh
dGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVy
ZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIg
PyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZs
b3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFz
dHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVt
ZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZv
aWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExp
c3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhh
dmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBM
aXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3Zl
cmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNWZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBv
dmVyZmxvdyByZXF1aXJlcyBhIHNjcm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxl
IG9yIGRpc2FibGUuCi0gICAgaWYgKG1faEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJl
bmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+
c2V0RW5hYmxlZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBh
Z2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hv
cml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0
aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpv
bnRhbE92ZXJmbG93KTsKLSAgICBib29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNh
bFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jp
em9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7
Ci0gICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkpCi0gICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgICAgIGlmIChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9C
ZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGlj
YWxPdmVyZmxvdyk7Ci0KLSAgICAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAg
ICAgICByZW5kZXJlcigpLnJlcGFpbnQoKTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHls
ZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3Zl
cmZsb3dSZWxheW91dCkgewotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICByZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5
VGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkg
ewotICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5k
ZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJh
cnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRy
dWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJl
cigpLmxheW91dCgpOwotICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFs
c2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9i
amVjdCogcGFyZW50ID0gcmVuZGVyZXIoKS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAm
JiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWlu
U2l6ZUZvckNoaWxkKCpyZW5kZXJCb3goKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSBy
YW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAg
ICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAg
ICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBh
Z2VTdGVwKTsKLSAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Nj
cm9sbFNpemUud2lkdGgoKSk7Ci0gICAgfQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKLSAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJl
Zm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKLQotICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdXBk
YXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNl
IG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwot
I2VuZGlmCi0KLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJ
blByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBM
YXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJ
biB0aGlzIGNhc2Ugd2UgbmVlZAotICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0
cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6
IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBl
bmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBw
b2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8g
b2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUg
PHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYg
KGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3Jv
bGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAg
IGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Ci0K
LSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dl
b21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9u
VXBkYXRlKCk7Ci0gICAgfQotCi0gICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkK
LSAgICAgICAgc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Ci17Ci0g
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBiYXNlV2lkdGggPSBiYXNl
V2lkdGggLyB6b29tRmFjdG9yOworICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHls
ZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVy
ZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgfQogCi0gICAgaWYgKHJl
Y3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2Uu
aGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVt
ZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRo
ZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAg
IH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0g
KGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZh
Y3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQo
KSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAotICAgIGlmIChyZWN0cy5yZXNpemVy
LmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZG9jdW1l
bnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUUgKFJh
ZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVj
ZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAot
Ym9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK0ludFNpemUg
UmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHBy
b2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYK
KyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEludFNp
emUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50
SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQor
UmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhh
dmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAotICAgIGlmICgh
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaXM8
UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhl
IGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0g
c25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFy
KCkpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3Mg
dGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9u
IHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBw
YXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3
ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkg
c2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1
c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8v
IGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNh
Y2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5l
ZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmICho
YXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9scykgewotICAg
ICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAg
ICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBz
Y3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2Fs
RGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1w
YWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3Qo
bG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGJvb2wgcGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIq
IHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYg
KCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZp
ZXcoKS5sYXllcigpOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBhdXRv
IGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxl
ZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVy
KCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCks
IGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6
ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9s
c1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6
ZSB9OworICAgIH07CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGF2ZVJlc2l6
ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6
dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBj
b3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CiAg
ICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBj
dXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRy
b2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJ
bnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNo
ZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICAv
LyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBt
b3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAg
Ly8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJs
eSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQg
cG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50
U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWls
ZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgp
LmhlaWdodCgpKTsKIAotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMg
YXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChjb250
ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Ny
b2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7Cisg
ICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zv
cm0iX3MpOwogCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZp
bHRlciJfcyk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUg
aWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRv
IHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250
ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWlu
dCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNv
cm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFt
YWdlUmVjdCk7Ci19CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6
OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIEludFJl
Y3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5n
Q29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotICAgIGlmIChtX3Nj
cm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250
ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXND
b21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1Rl
eHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAg
ICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQg
YSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAg
ICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xs
YmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5l
cihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK0ludFNp
emUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsK
LSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAg
ICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAg
Y29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBj
b3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsK
LSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAg
fQotCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkg
ewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVz
aXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNv
cm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVy
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEu
MCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0
LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNv
cm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVs
cyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJS
ZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lcklt
YWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29ybmVyID0gcmVuZGVyZXIoKS5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5Y
TWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4g
bG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRS
ZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRlckxheWVyOjpz
Y3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUo
KSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3Qg
PSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7
Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAg
ICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Nj
cm9sbGFibGVBcmVhLT5zY3JvbGxXaWR0aCgpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBt
X3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNS
ZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJ
bWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJv
dW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJh
cnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBi
b3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJz
KCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJB
YnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVj
dDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIu
d2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7
Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRl
eHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0dXJu
IHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwogfQog
Ci1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2Fs
UG9pbnQpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Nj
cm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVp
Z2h0KCk7CiAKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250
YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAg
IEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhZKCkg
LSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJm
bG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiB7
Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KyAgICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91
dCgpOworfQogCi0gICAgSW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVuZGVy
ZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAocmVj
dHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KK2Jvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBmYWxz
ZTsKK30KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29y
bmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZCYXIg
JiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlm
IChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAg
ICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAobV9oQmFyICYm
IG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAg
ICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJlbmRlckxheWVyOjpoYXNPdmVybGF5
U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJl
dHVybiBmYWxzZTsKK30KIAorYm9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxp
bmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4g
bV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQ
b2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCku
cmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZp
b3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9u
U2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5
IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAg
LTQyMjUsMTcgKzI4NzcsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdl
dC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZp
b3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXllclBh
aW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0
KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBw
YWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5n
T3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xp
cFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxlKQogewogICAgIGZsb2F0IGRldmlj
ZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7
CkBAIC00MjU4LDcgKzI4OTksOCBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8v
IGFueSBsYXllcnMgd2l0aCBvdmVyZmxvdy4gVGhlIGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0
byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0aGF0IHRoZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3Vy
CiAgICAgICAgIC8vIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNv
LgogICAgICAgICBmb3IgKFJlbmRlckxheWVyKiBsYXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZG
b3JCb3JkZXJSYWRpdXMgPyB0aGlzIDogcGFyZW50KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5w
YXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRC
ZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAgICBib29sIHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nID0gbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBp
ZiAocGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZs
b3dTY3JvbGxDb250ZW50KSAmJiB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCku
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJS
YWRpdXMoKSAmJiBhbmNlc3RvckxheWVySXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikp
IHsKQEAgLTQ3NjMsOCArMzQwNSwxMCBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAg
ICAgICAgcGFpbnRMaXN0KHBvc2l0aXZlWk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAg
ICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRz
LCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICBpZiAobV9zY3Jv
bGxhYmxlQXJlYSkgeworICAgICAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFy
cyAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxiYXJzKCkpCisgICAgICAgICAgICAgICAg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50
Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8pOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGZp
bHRlckNvbnRleHQpIHsKICAgICAgICAgICAgIC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFn
bWVudHMoKSBsYXN0IHRpbWUsIHBhaW50RGlydHlSZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQg
dGhlIGZpbHRlciBib3VuZHMuCkBAIC01MjM0LDExICszODc4LDEzIEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01hc2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVu
dHMmIGxheWVyCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZy
YWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZv
KQogeworICAgIEFTU0VSVChtX3Njcm9sbGFibGVBcmVhKTsKKwogICAgIGZvciAoY29uc3QgYXV0
byYgZnJhZ21lbnQgOiBsYXllckZyYWdtZW50cykgewogICAgICAgICBpZiAoZnJhZ21lbnQuYmFj
a2dyb3VuZFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNs
aXBUb1JlY3QoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dy
b3VuZFJlY3QpOwotICAgICAgICBwYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRl
ZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAt
IHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkp
LAorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4
dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9j
YXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhl
bE9mZnNldCkpLAogICAgICAgICAgICAgc25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3Vu
ZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAgICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2Fs
UGFpbnRpbmdJbmZvLCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7CiAgICAgfQpAQCAtNTI3Nyw3
ICszOTIzLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJgogICAgICAgICAgICAgICAgIGFic29s
dXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhp
dFRlc3RBcmVhLmludGVyc2VjdChhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmll
dygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2li
bGVSZWN0KSk7CisgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdh
Y3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGlu
c2lkZUxheWVyID0gaGl0VGVzdExheWVyKHRoaXMsIG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwg
aGl0VGVzdEFyZWEsIGhpdFRlc3RMb2NhdGlvbiwgZmFsc2UpOwpAQCAtNTUwOCw3ICs0MTU0LDcg
QEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJv
b3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnQKICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJv
b3RMYXllcikpOwogCiAgICAgTGF5b3V0UG9pbnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVz
aXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVz
dExvY2F0aW9uLCBsb2NhbFBvaW50KSkgeworICAgIGlmIChjYW5SZXNpemUoKSAmJiBtX3Njcm9s
bGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMo
bGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKICAgICAgICAg
cmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7CiAgICAg
ICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTU1ODMsMzUgKzQyMjksNiBAQCBib29sIFJlbmRl
ckxheWVyOjpoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
IGxheWVyRnJhZ21lbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6
aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFn
bWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2lu
dCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAotewotICAgIGlmIChsYXllckZyYWdtZW50cy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9
IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94
UmVjdCgpKTsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAg
ICBhdXRvIGNvcm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50
Qm91bmRzLCBjb25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgewotICAgICAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICBJbnRT
aXplIG9mZnNldEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigp
IC0gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgZnJhZ21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21M
ZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNp
emUoKSB9OwotICAgICAgICB9Ci0gICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0
ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4
WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCBy
ZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9IGxheWVyRnJh
Z21lbnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IExheWVyRnJh
Z21lbnQmIGZyYWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7Ci0gICAgICAgIGF1dG8gcmVz
aXplclJlY3RJbkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3Qo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKLSAgICAgICAgaWYgKGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVy
UmVjdEluRnJhZ21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkg
ewotICAgICAgICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9j
YXRpb24ucG9pbnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJ
bkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVy
TGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsCiAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgaGl0VGVzdExvY2F0aW9uLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRy
YW5zZm9ybVN0YXRlLCBkb3VibGUqIHpPZmZzZXQpCiB7CkBAIC02MDczLDcgKzQ2OTAsOCBAQCB2
b2lkIFJlbmRlckxheWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgTGF5b3V0UmVjdCByZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7
Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9sbFBvc2l0aW9uKCkpOworICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQorICAgICAgICByZWN0Lm1vdmVCeSgtbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9z
aXRpb24oKSk7CiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAgICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkub3ZlcmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxs
cHRyKSk7IC8vIEZJWE1FOiBSZWdpb25zIG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5k
ZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYzNzEsMjEgKzQ5ODksNiBAQCBib29sIFJlbmRlckxheWVy
OjpoYXNDb21wb3NpdGVkTWFzaygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2Jh
Y2tpbmctPmhhc01hc2tMYXllcigpOwogfQogCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6
bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNr
aW5nID8gbV9iYWNraW5nLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7
Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5k
ZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2Jh
Y2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQot
CiBib29sIFJlbmRlckxheWVyOjpwYWludHNXaXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJl
aGF2aW9yPiBwYWludEJlaGF2aW9yKSBjb25zdAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cg
PSAhaXNDb21wb3NpdGVkKCkgfHwgYmFja2luZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02
NDE2LDExICs1MDE5LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChP
cHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFp
bnRGbGFncy5jb250YWlucyhQYWludExheWVyRmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQ
YXRoUGhhc2UpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElz
S25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QK
IHsKICAgICBpZiAoIWlzU2VsZlBhaW50aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5
ZXJEZXNjZW5kYW50KCkpCkBAIC02NjYxLDcgKzUyNTksNyBAQCBib29sIFJlbmRlckxheWVyOjpo
YXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRl
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hE
ZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAgICBy
ZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Nyb2xs
YWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0K
IAogYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVx
dWVzdCogcmVxdWVzdCkgY29uc3QKQEAgLTY2NzEsNyArNTI2OSw3IEBAIGJvb2wgUmVuZGVyTGF5
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNv
bnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCku
b3BhY2l0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5p
c1JlbmRlclJlcGxhY2VkKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJl
bmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Ny
b2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1
ZXN0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTY2OTYsMzggKzUyOTQsNiBAQCBi
b29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0
KiByZXF1ZXN0KSBjb25zdAogICAgIHJldHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpy
ZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5
bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93
IGFyZSBhIGJveCBjb25jZXB0LgotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0g
ICAgaWYgKCFib3gpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhh
bmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBk
by4KLSAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92
ZXJmbG93WCgpOwotICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxv
d1koKTsKLQotICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0
aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQuCi0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxi
YXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigp
ICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9y
aXpvbnRhbFNjcm9sbGJhcikpOwotICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJv
eC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYgKChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxl
RGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFy
KSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xs
YmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3Jv
bGxiYXIpOwotICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxi
YXIpOwotCi0gICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJh
cnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBz
d2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2Vl
IGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIg
JiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwg
JiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5h
YmxlZCh0cnVlKTsKLQotICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAm
JiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFi
bGVkKHRydWUpOwotCi0gICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxh
eWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKIHsKICAgICBzZXRJc05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxv
d09ubHkoKSk7CkBAIC02NzQ4LDYgKzUzMTQsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQog
I2VuZGlmCiAgICAgfQogCisgICAgdXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAg
Ly8gRklYTUU6IFJlbmRlckxheWVyIGFscmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMg
dGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBkaXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAg
Ly8gbGlrZWx5IGJlIGZvbGRlZCBhbG9uZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHls
ZSkgewpAQCAtNjc1OSwxOCArNTMyNywxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5n
ZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVmlzaWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkuCi0gICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAg
ICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlm
ICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsK
ICAgICB9CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIo
KS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiBy
ZW5kZXJlcigpLmlzQm94KCkpIHsKLSAgICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAg
ICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBt
X21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVl
KQotICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7Cisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xk
U3R5bGUpOworICAgIH0KICAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBs
YXllciBzZWxmLXBhaW50aW5nIHNvIHdlIG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJp
dCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBiZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50
aW5nTGF5ZXIoKTsKQEAgLTY3ODUsMTMgKzUzNDksOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHls
ZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZQogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20g
Y3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxiYXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1f
aEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQot
ICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCk7Ci0gICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJl
bGF0ZWRTdHlsZSgpOwogCiAgICAgdXBkYXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAg
ICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBAIC02ODEyLDk4ICs1MzcxLDYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUKICNlbmRpZgogfQogCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3
ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRv
SGl0VGVzdCA9IHJlbmRlcmVyKCkudmlzaWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1M
RnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50
KCkpCi0gICAgICAgIGlzVmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBv
d25lci0+cmVuZGVyZXIoKS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Nj
cm9sbGFibGUgPSBoYXNPdmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBh
ZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwotICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0g
ICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJsZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKSB7Ci0gICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5h
ZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEpIHsKLSAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3Zl
U2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVh
ID0gZmFsc2U7Ci0gICAgfQotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYg
KGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBv
bmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNj
cm9sbGluZywgc28gaWYgd2UgYmVjYW1lCi0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVt
b3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0jZWxzZQotICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAg
IFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVu
ZGVyZXIoKSk7Ci0gICAgYXV0byBjb3JuZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
ID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Ny
b2xsYmFyQ29ybmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0g
ICAgaWYgKCFjb3JuZXIpIHsKLSAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9z
Y3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJl
cigpLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSBy
ZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9s
bENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIt
PmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+
c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFy
U2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9s
bENvcm5lciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJT
dHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUo
eyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0
cjsKLQotICAgIGlmICghcmVzaXplcikgewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVz
aXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9j
dW1lbnQoKSwgV1RGTW92ZSgqcmVzaXplcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJl
ciBzaG91bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNl
dFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxl
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVz
aXplcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlm
ICghbV9yZXNpemVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQo
bnVsbHB0cik7Ci0gICAgbV9yZXNpemVyID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJl
bmRlckxheWVyOjpyZWZsZWN0aW9uTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxl
Y3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxheWVyKCkgOiBudWxscHRyOwpAQCAtNjk4NSw2ICs1NDUy
LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRl
cnMgPSBudWxscHRyOwogfQogCitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXll
cjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxl
QXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhID0gbWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhPigqdGhpcyk7CisKKyAgICBpZiAoIWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLT5zdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEuZ2V0KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3Jv
bGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+Y2xlYXJSZXNpemVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOwor
ICAgIH0KK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFu
Z2UoKQogewogICAgIGlmICghaGFzRmlsdGVyKCkpIHsKQEAgLTcwMDEsNiArNTQ4OCwxNiBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAg
IG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJlbmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAoIWlzPFJl
bmRlckJveD4ocmVuZGVyZXIoKSkgfHwgIWRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSku
cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgIGNsZWFyTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQ
YWludGluZ1N0cmF0ZWd5KCkKIHsKICAgICAvLyBSZW5kZXJMYXllckZpbHRlcnMgaXMgb25seSB1
c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVycyBpbiBzb2Z0d2FyZSBtb2RlLApAQCAtNzAzNSw3ICs1
NTMyLDcgQEAgc3RhdGljIFJlbmRlckxheWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3Qg
UmVuZGVyTGF5ZXImIGxheWVyKQogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQo
KSkKICAgICAgICAgcmV0dXJuIHBhcmVudDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJl
bmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJM
YXllcigpOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1Bh
cmVudEZyYW1lcygpIGNvbnN0CkBAIC03MDU3LDYgKzU1NTQsMTEgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2ltdWxhdGVGcmVxdWVudFBhaW50KCkKICAgICBTaW5nbGVQYWludEZyZXF1ZW5jeVRyYWNr
aW5nIHsgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIsIHBhZ2UoKS5sYXN0UmVuZGVyaW5nVXBkYXRl
VGltZXN0YW1wKCkgfTsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5
ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJl
YS5nZXQoKTsKK30KKwogI2lmICFMT0dfRElTQUJMRUQKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllcjo6RXZlbnRSZWdpb25JbnZhbGlkYXRp
b25SZWFzb24gcmVhc29uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApp
bmRleCA2NjI2ODJmZDE1NTUuLmQxMDFhNGU5OTczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmln
aHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAt
NTEsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0
ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgUmVuZGVyR2VvbWV0
cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBSZW5kZXJMYXllckNvbXBv
c2l0b3I7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFzcyBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBj
bGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsxNDQsMjEgQEAgc3RydWN0IFNj
cm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0
X3Q7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVy
KTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2Ns
YXNzIFJlbmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5
ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVy
QmFja2luZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZy
aWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogCiAgICAgZXhwbGljaXQgUmVu
ZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxh
eWVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBz
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQg
KGlmIGFueSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgp
OwpAQCAtMjIzLDYgKzIyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0
aW9uQWxsb3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFn
OyB9CiAjZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2YXRl
OgogICAgIC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0
cmVlKS4KICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MTksNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJl
bmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5n
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJv
b2wgY2Fubm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTA3ICs0MzksMjkgQEAgcHVi
bGljOgogCiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChs
b2NhdGlvbigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRT
aXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6
ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0OwogCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAg
ICAgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9p
bnQoY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXll
cnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1
cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFy
ZWEgPSBudWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxU
eXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVk
KTsKLQotICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5p
bWF0ZWRTY3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRl
ZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Ny
b2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5v
KTsKLQotICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNj
cm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Ny
b2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGlu
Zzo6VW5jbGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9s
bFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lk
IHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwot
ICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCiAgICAg
Ly8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxl
LgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3
aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFy
ZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2Vs
Zk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lkIGF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQog
ICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4K
ICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVS
ZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYp
OwotCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwot
Ci0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9u
KTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0g
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRh
bFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEg
b3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250
YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBT
Y3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFy
LmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkg
Y29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+
KSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsK
LSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsK
LSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5k
aWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAg
ICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVp
cmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAK
LSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwo
KSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KICAg
ICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5n
LCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJs
ZSBvdmVyZmxvdy4KICAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsK
ICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92
ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkgY29uc3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBi
b29sIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc092ZXJmbG93
Q29udHJvbHMoKSBjb25zdDsKICAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9p
bnQgbG9jYWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUg
b2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7
CiAKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVy
bGF5Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwot
ICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50
JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7Ci0KICAgICB2b2lkIHVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwogICAgIHZvaWQgYXV0b3Nj
cm9sbChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKQEAg
LTU1Niw5ICs0ODQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlv
dXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAg
ICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29s
IGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAg
ICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5h
dGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRl
ckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUg
bW9kZSkgY29uc3QKQEAgLTYzOCw2ICs1NjMsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIq
IGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24oUG9zaXRpb25UeXBlKSBjb25zdDsKICAgICAK
ICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkg
Y29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENy
b3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJh
bWVSZW5kZXJMYXllcigpIGNvbnN0OwogCiAgICAgLy8gVGhlIGxheWVyIHJlbGF0aXZlIHRvIHdo
aWNoIGNsaXBwaW5nIHJlY3RzIGZvciB0aGlzIGxheWVyIGFyZSBjb21wdXRlZC4KICAgICBSZW5k
ZXJMYXllciogY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKSBjb25zdDsKQEAgLTY5OSw3ICs2MjYs
NiBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51
bGxwdHIsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gPSB7IH0sIFNlY3VyaXR5T3JpZ2luUGFp
bnRQb2xpY3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4sIEV2ZW50UmVn
aW9uQ29udGV4dCogPSBudWxscHRyKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwotICAgIHZv
aWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCog
c3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRl
eHQgewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RM
YXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXpl
UmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxv
d0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNzg1LDExICs3MTEsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7
IG1fc3RhdGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhdGlj
QmxvY2tQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3NpdGlv
biA9IHBvc2l0aW9uOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQotI2VuZGlmCi0KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJl
bmRlcmVyKCkuaGFzVHJhbnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zv
cm0gaGFzIHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4KiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpA
QCAtODU5LDE2ICs3ODAsMTEgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5z
dXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ry
b3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGlj
YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNj
cm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9s
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3Qg
ZmluYWw7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBz
ZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xs
aW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21w
b3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAorICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdDsKKwogICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Nj
b3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBm
b3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3Jv
bGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KICAgICBP
cHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQpAQCAtODg2LDExICs4MDIsNiBAQCBw
dWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0
ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5
b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5k
KCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9p
ZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMp
IHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0K
LQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVz
RnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOSw4ICs4MzAsNiBAQCBw
dWJsaWM6CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3Rv
cigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFy
T25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2ltdWxhdGVGcmVxdWVudFBhaW50KCk7CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBj
b25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHko
KTsgfQogCkBAIC05MzEsNyArODQwLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRS
ZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUs
IE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2
ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0
aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsK
IAogcHJpdmF0ZToKIApAQCAtMTAxMSw5ICs5MjAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1
cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0
ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRp
b25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0g
MSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEg
PDwgMSwKQEAgLTEwMzksOCArOTQ1LDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNl
dDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwogCi0gICAgU2Ny
b2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0Owot
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25z
dCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7
CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlz
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
LmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDU0LDYgKzk1OCw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBlbnN1cmVMYXllckZpbHRlcnMoKTsKICAgICB2b2lkIGNsZWFyTGF5ZXJG
aWx0ZXJzKCk7CiAKKyAgICB2b2lkIHVwZGF0ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB2
b2lkIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJz
KiBmaWx0ZXJzRm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9uU2V0PFBhaW50TGF5
ZXJGbGFnPikgY29uc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzZXR1cEZpbHRlcnMoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9u
U2V0PFBhaW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QsIE9w
dGlvbmFsPExheW91dFJlY3Q+JiByb290UmVsYXRpdmVCb3VuZHMpOwogICAgIHZvaWQgYXBwbHlG
aWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0LCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgY29uc3QgTGF5ZXJGcmFnbWVudHMm
KTsKQEAgLTExMDAsNjQgKzEwMDcsMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICBib29sIGhpdFRl
c3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdEZp
bHRlcikgY29uc3Q7CiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVudHMoY29uc3Qg
TGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyLCBib29sJiBpbnNpZGVDbGlwUmVj
dCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQmIHBvaW50SW5G
cmFnbWVudCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RUcmFuc2Zvcm1lZExheWVy
SW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5l
ckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAogICAgICAgICBj
b25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgY29u
c3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSogek9mZnNldCA9
IG51bGxwdHIpOwogCiAgICAgYm9vbCBsaXN0QmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5S
ZWN0KGNvbnN0IExheWVyTGlzdCYsIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIHZv
aWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB2b2lkIGNvbXB1dGVIYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxv
dygpIGNvbnN0OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OwotCi0gICAg
Ym9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKLQogICAgIGJvb2wgc2hvdWxkQmVT
ZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJm
YWNlCi0gICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50
UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3Qg
SW50UmVjdCYpIGZpbmFsOwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Ny
b2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAg
SW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9s
bGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgY29udmVy
dEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Ny
b2xsT2Zmc2V0JikgZmluYWw7Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChW
aXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJl
aGF2aW9yKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKLSAg
ICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7Ci0gICAg
SW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBu
dWxscHRyKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0g
ICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0jZW5kaWYKLSAg
ICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGxv
Z01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7Ci0K
LSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICAvLyBOT1RFOiBUaGlzIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJv
bSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9u
Jik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0KLSAg
ICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKLSAgICAK
LSAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOwotICAg
IAogICAgIGJvb2wgYWxsb3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0OwogCiAgICAgdm9pZCBkaXJ0
eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwpAQCAtMTE5NywxNCArMTA1
Myw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFic29sdXRlIGNvb3Jk
cyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50CiAgICAg
TGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7
CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7Ci0g
ICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQgY2xlYXJTY3JvbGxD
b3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgIHZvaWQgY2xlYXJS
ZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7Ci0KICAgICB2b2lk
IHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRpbmdEZXNjZW5k
YW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBiOyB9CkBAIC0xMjEz
LDExICsxMDYxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEluZGlyZWN0Q29tcG9zaXRpbmdS
ZWFzb24oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiByZWFzb24pIHsgbV9pbmRpcmVjdENvbXBv
c2l0aW5nUmVhc29uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlYXNvbik7IH0KICAgICBib29s
IG11c3RDb21wb3NpdGVGb3JJbmRpcmVjdFJlYXNvbnMoKSBjb25zdCB7IHJldHVybiBtX2luZGly
ZWN0Q29tcG9zaXRpbmdSZWFzb247IH0KIAotICAgIExheW91dFVuaXQgb3ZlcmZsb3dUb3AoKSBj
b25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7Ci0gICAgTGF5b3V0
VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93UmlnaHQo
KSBjb25zdDsKLQogICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7CiAgICAgICAgIElu
dFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICAgICAgSW50UmVjdCB2ZXJ0aWNhbFNjcm9s
bGJhcjsKQEAgLTEyMzAsOCArMTA3Myw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBPdmVyZmxv
d0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKIAotICAgIGJvb2wg
b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBj
b25zdDsKLQogICAgIE9wdGlvblNldDxDb21wb3NpdGluZz4gbV9jb21wb3NpdGluZ0RpcnR5Qml0
czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7CkBAIC0xMjQ4LDcg
KzEwODksNiBAQCBwcml2YXRlOgogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIGxh
eWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSByZXNpemluZyB0
byBzdGFydCBhbmQgc3RvcC4KICAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsKIAotICAgIGJv
b2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1NlbGZQYWludGlu
Z0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBkZXNjZW5kYW50
cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFpbnRpbmcuIFRo
aXMgY2FuIGxlYWQgdG8KQEAgLTEyNjAsMTQgKzExMDAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5nIHRoaXMgbGF5
ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFpbnRpbmdJbnNp
ZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdlIGFyZSBwYWlu
dGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVsYXlvdXQgOiAx
OwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRTdGF0dXMKIAog
ICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFz
VmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFudFN0YXR1c0Rp
cnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwotICAgIGJvb2wg
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0ZpeGVkSW50ZXJz
ZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6IDE7CiAKQEAg
LTEyNzgsNyArMTExNiw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faGFzQ29tcG9zaXRlZE5v
bkNvbnRhaW5lZERlc2NlbmRhbnRzIDogMTsKICAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yIDogMTsgLy8gSW4gdGhlIGxheWVyLW9yZGVyIHRyZWUuCi0gICAgYm9vbCBt
X2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgOiAxOwogCiAgICAgYm9vbCBtX2hhc1Ry
YW5zZm9ybWVkQW5jZXN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXMzRFRyYW5zZm9ybWVkQW5jZXN0
b3IgOiAxOwpAQCAtMTI4OCwxNyArMTEyNSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9p
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
bgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24g
OiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgogCi0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29s
IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKLSNlbmRp
ZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOwotI2VuZGlm
Ci0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsK
LSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKLSAgICBib29s
IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAg
ICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpAQCAtMTMzOSwy
NSArMTE2NSwxMSBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRoL2hlaWdodAog
ICAgIEludFNpemUgbV9sYXllclNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBv
c2l0aW9uOwotICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbjsKLQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEu
Ci0gICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3Zl
cmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRyPFNjcm9sbGJh
cj4gbV9oQmFyOwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAgIHN0ZDo6dW5p
cXVlX3B0cjxDbGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKLSAgICAKLSAgICBJbnRQ
b2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKICAgICBNYXJrYWJsZTxTY3Jv
bGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1f
Ym94U2Nyb2xsaW5nU2NvcGU7CiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFs
TWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2Nv
cGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJxdWVlOyAvLyBV
c2VkIGZvciA8bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBmbG93IHZhbHVl
cyBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBsZWZ0L3RvcCB2
YWx1ZXMuCiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwogICAgIExheW91
dFVuaXQgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2NywxMCArMTE3OSw2IEBAIHByaXZh
dGU6CiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSByZXBsaWNhcyAo
d2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5kZXJSZXBsaWNh
PiBtX3JlZmxlY3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIgY3VzdG9tIHNj
cm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBh
cnQ+IG1fc2Nyb2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBt
X3Jlc2l6ZXI7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVuZGVyTGF5ZXIg
dGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFyZSBub3QgcGFn
aW5hdGVkLgogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFnaW5hdGlvbkxh
eWVyOwogCkBAIC0xMzc4LDYgKzExODYsNyBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlckxheWVyRmlsdGVycz4gbV9maWx0ZXJzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2luZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYT4gbV9zY3JvbGxhYmxlQXJlYTsKICAgICAKICAgICBQYWludEZy
ZXF1ZW5jeVRyYWNrZXIgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXI7CiB9OwpAQCAtMTQ1MCw2ICsx
MjU5LDMgQEAgdm9pZCBzaG93UGFpbnRPcmRlclRyZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyTGF5
ZXIqKTsKIHZvaWQgc2hvd0xheWVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3QqKTsK
ICNlbmRpZgogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlbmRlckxh
eWVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJl
YSYgYXJlYSkgeyByZXR1cm4gYXJlYS5pc1JlbmRlckxheWVyKCk7IH0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKaW5kZXggMTFkOTRhMTFlOGNmLi45ZGQxNjI3ODgwMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01OCw4ICs1
OCw5IEBACiAjaW5jbHVkZSAiUmVuZGVySFRNTENhbnZhcy5oIgogI2luY2x1ZGUgIlJlbmRlcklG
cmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXJD
b21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRl
by5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQxOCwxMSArNDE5LDEzIEBAIHN0YXRp
YyBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFnZSBjb21wdXRlT3ZlcmZsb3dUaWxlZEJhY2tpbmdD
b3ZlcmFnZShjb25zdCBSZW5kCiAgICAgVGlsZWRCYWNraW5nOjpUaWxlQ292ZXJhZ2UgdGlsZUNv
dmVyYWdlID0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZpc2libGVBcmVhOwogICAgIGJvb2wg
dXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSA9IGZyYW1lVmlldy5pbkxpdmVSZXNpemUo
KTsKICAgICBpZiAoIXVzZU1pbmltYWxUaWxlc0R1cmluZ0xpdmVSZXNpemUpIHsKLSAgICAgICAg
aWYgKGxheWVyLmhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKLSAgICAgICAgICAg
IHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9s
bGluZzsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFi
bGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0g
VGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CiAKLSAgICAgICAg
aWYgKGxheWVyLmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0
aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5n
OworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSkKKyAgICAgICAgICAgICAgICB0aWxlQ292ZXJhZ2UgfD0gVGlsZWRCYWNraW5n
OjpDb3ZlcmFnZUZvclZlcnRpY2FsU2Nyb2xsaW5nOworICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiB0aWxlQ292ZXJhZ2U7CiB9CkBAIC0xMjI4LDkgKzEyMzEsMTIgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJMYXllckJhY2tpbmc6OmNvbXB1dGVQYXJlbnRHcmFwaGljc0xheWVyUmVjdChjb25zdCBS
ZW5kZXJMYXllcioKICAgICB9CiAKICAgICBpZiAoY29tcG9zaXRlZEFuY2VzdG9yLT5oYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUNv
bXBvc2l0ZWRBbmNlc3RvciA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsYWJsZUFyZWEoKTsK
KyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVDb21wb3NpdGVkQW5jZXN0b3IpOworCiAgICAgICAg
IExheW91dFJlY3QgYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzID0gYW5jZXN0b3JCYWNraW5nLT5j
b21wb3NpdGVkQm91bmRzKCk7CiAgICAgICAgIExheW91dFJlY3Qgc2Nyb2xsQ29udGFpbmVyQm94
ID0gc2Nyb2xsQ29udGFpbmVyTGF5ZXJCb3goYW5jZXN0b3JSZW5kZXJCb3gpOwotICAgICAgICBT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxPZmZz
ZXQoKTsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVDb21w
b3NpdGVkQW5jZXN0b3ItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICBwYXJlbnRHcmFwaGljc0xh
eWVyUmVjdCA9IExheW91dFJlY3QoKHNjcm9sbENvbnRhaW5lckJveC5sb2NhdGlvbigpIC0gdG9M
YXlvdXRTaXplKGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcy5sb2NhdGlvbigpKSAtIHRvTGF5b3V0
U2l6ZShzY3JvbGxPZmZzZXQpKSwgc2Nyb2xsQ29udGFpbmVyQm94LnNpemUoKSk7CiAgICAgfQog
CkBAIC0xMzY3LDcgKzEzNzMsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdl
b21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgICAgIG1f
c2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsQ29udGFp
bmVyQm94LmxvY2F0aW9uKCkgLSBwYXJlbnRMYXllckJvdW5kcy5sb2NhdGlvbigpKSk7CiAgICAg
ICAgIG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPnNldFNpemUocm91bmRlZEludFNpemUoTGF5b3V0
U2l6ZShzY3JvbGxDb250YWluZXJCb3gud2lkdGgoKSwgc2Nyb2xsQ29udGFpbmVyQm94LmhlaWdo
dCgpKSkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBtX293bmluZ0xh
eWVyLnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293
bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5
ZXIpOworCisgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbE9mZnNldCgpOwogICAgICAgICB1cGRhdGVTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KTsKIAogICAgICAgICBGbG9hdFNpemUgb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgPSBtX3Nj
cm9sbENvbnRhaW5lckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKQEAgLTEzODEsNyArMTM5
MCw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBSZW5k
ZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogCiAgICAgICAgIGJvb2wgcGFkZGluZ0JveE9m
ZnNldENoYW5nZWQgPSBvbGRTY3JvbGxpbmdMYXllck9mZnNldCAhPSBtX3Njcm9sbENvbnRhaW5l
ckxheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKTsKIAotICAgICAgICBJbnRTaXplIHNjcm9sbFNp
emUobV9vd25pbmdMYXllci5zY3JvbGxXaWR0aCgpLCBtX293bmluZ0xheWVyLnNjcm9sbEhlaWdo
dCgpKTsKKyAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplOworICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICAgICAgc2Nyb2xsU2l6ZSA9IEludFNpemUoc2Nyb2xsYWJsZUxheWVy
LT5zY3JvbGxXaWR0aCgpLCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKTsKICAgICAg
ICAgaWYgKHNjcm9sbFNpemUgIT0gbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNpemUoKSB8fCBw
YWRkaW5nQm94T2Zmc2V0Q2hhbmdlZCkKICAgICAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIApAQCAtMTQ5MCwxNCArMTUwMSwxNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6c2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoU2Nyb2xsT2Zm
c2V0IHNjcm9sbE9mZnNldAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xs
T2Zmc2V0KFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQpCiB7Ci0gICAgaWYgKG1fb3duaW5nTGF5
ZXIuY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFT
U0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgaWYgKHNjcm9sbGFibGVMYXllci0+Y3VycmVu
dFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSB7CiAgICAgICAgIC8vIElmIHNjcm9s
bGluZyBpcyBoYXBwZW5pbmcgZXh0ZXJuYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUg
bGF5ZXIgYm91bmRzIG9yaWdpbiBoZXJlIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlIGppdHRlci4K
ICAgICAgICAgc2V0TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3Jv
bGxpbmdMYXllclBvc2l0aW9uQWN0aW9uOjpTeW5jKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5z
ZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24odHJ1ZSk7CisgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRy
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBpbXBsZW1lbnQgdGhl
IGNvbnRlbnRzIG9mZnNldCB2aWEgdGhlIGJvdW5kcyBvcmlnaW4gb24gdGhpcyBsYXllciwgcmF0
aGVyIHRoYW4gYSBwb3NpdGlvbiBvbiB0aGUgc3VibGF5ZXIuCiAgICAgICAgIHNldExvY2F0aW9u
T2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFj
dGlvbjo6U2V0KTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFJl
cXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CiAgICAgfQogCiAgICAg
QVNTRVJUKG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5wb3NpdGlvbigpLmlzWmVybygpKTsKQEAg
LTE5MDksNyArMTkyMyw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDbGlwcGlu
Z1N0YWNrTGF5ZXJHZW9tZXRyeShMYXllckFuY2VzdG9yQ2xpcHBpbmdTCiAgICAgICAgIGVudHJ5
LmNsaXBwaW5nTGF5ZXItPnNldFNpemUoc25hcHBlZENsaXBwaW5nTGF5ZXJSZWN0LnNpemUoKSk7
CiAKICAgICAgICAgaWYgKGVudHJ5LmNsaXBEYXRhLmlzT3ZlcmZsb3dTY3JvbGwpIHsKLSAgICAg
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBlbnRyeS5jbGlwRGF0YS5jbGlwcGlu
Z0xheWVyID8gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCkgOiBT
Y3JvbGxPZmZzZXQoKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQ7Cisg
ICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW50cnkuY2xpcERhdGEuY2xp
cHBpbmdMYXllciA/IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVh
KCkgOiBudWxscHRyKQorICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgICAgIGVudHJ5LmNsaXBwaW5nTGF5ZXIt
PnNldEJvdW5kc09yaWdpbihzY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAgbGFzdENsaXBMYXll
clJlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQpOwpAQCAtMjAxMSwxMiArMjAyNywxNiBAQCBib29s
IFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihTY3JvbGxiYXIq
IHNjcm9sbGJhcikgY29uc3QKIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzSG9y
aXpvbnRhbFNjcm9sbGJhckxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXll
ckZvclNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Nyb2xsYWJsZUxh
eWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9v
bCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVzVmVydGljYWxTY3JvbGxiYXJMYXllcigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIobV9vd25pbmdMYXll
ci52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICByZXR1cm4gcmVxdWlyZXNM
YXllckZvclNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkpOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnJlcXVpcmVz
U2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdApAQCAtMjAyNCwxMiArMjA0NCwxNiBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CiAgICAg
aWYgKCFpczxSZW5kZXJCb3g+KG1fb3duaW5nTGF5ZXIucmVuZGVyZXIoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3duaW5nTGF5ZXIub3ZlcmZs
b3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBp
ZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBj
b3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3Jv
bGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgaWYgKGNvcm5lclJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gbV9v
d25pbmdMYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVy
dGljYWxTY3JvbGxiYXIgPyB2ZXJ0aWNhbFNjcm9sbGJhciA6IG1fb3duaW5nTGF5ZXIuaG9yaXpv
bnRhbFNjcm9sbGJhcigpOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxhYmxl
TGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgYXV0byBzY3JvbGxiYXIgPSB2ZXJ0aWNh
bFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCk7CiAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoc2Ny
b2xsYmFyKTsKIH0KIApAQCAtMjA2NSwxMCArMjA4OSwxMiBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNj
cm9sbAogICAgIGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZv
clNjcm9sbENvcm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3Ju
ZXIiKTsKIAogICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5
ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKGhvcml6b250
YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBI
b3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJD
aGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVh
U2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgVmVydGljYWxTY3JvbGxiYXIp
OworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3Jv
bGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9sbGJhckxheWVy
Q2hhbmdlZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJs
ZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUxheWVyLCBIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdl
ZCkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFT
Y3JvbGxiYXJMYXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUxheWVyLCBWZXJ0aWNhbFNjcm9sbGJh
cik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKQEAgLTIw
NzYsNyArMjEwMiw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0Nv
bnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAKIHZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHNMYXllcnMoKQogewotICAgIGlmICgh
bV9vd25pbmdMYXllci5oYXNTY3JvbGxiYXJzKCkpCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxh
eWVyIHx8ICFzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGJhcnMoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCBkbyBkZXZpY2UtcGl4ZWwgc25hcHBpbmcuCkBAIC0y
MDk4LDE2ICsyMTI1LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwb3NpdGlvbk92ZXJm
bG93Q29udHJvbHNMYXllcnMoKQogICAgIH07CiAKICAgICAvLyBUaGVzZSByZWN0cyBhcmUgcmVs
YXRpdmUgdG8gdGhlIGJvcmRlckJveFJlY3QuCi0gICAgYXV0byByZWN0cyA9IG1fb3duaW5nTGF5
ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KKyAgICBhdXRvIHJlY3RzID0gc2Nyb2xsYWJs
ZUxheWVyLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKICAgICBpZiAoYXV0byogbGF5ZXIgPSBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJh
ckxheWVyKCpsYXllciwgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhciwgcGFkZGluZ0JveEluc2V0
KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVyLmhvcml6b250
YWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOworICAgICAgICBs
YXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1
dG8qIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0
aW9uU2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhciwgcGFkZGlu
Z0JveEluc2V0KTsKLSAgICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChtX293bmluZ0xheWVy
LnZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAg
ICAgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Ny
b2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAgICBp
ZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CkBAIC0zMDg2LDcgKzMx
MTIsMTAgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZERpc3BsYXlJ
blJlY3QoY29uc3QgTGF5b3V0UmVjdCYgciwgR3JhcGgKIAogICAgIGlmIChtX3Njcm9sbGVkQ29u
dGVudHNMYXllciAmJiBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+ZHJhd3NDb250ZW50KCkpIHsK
ICAgICAgICAgRmxvYXRSZWN0IGxheWVyRGlydHlSZWN0ID0gcGl4ZWxTbmFwcGVkUmVjdEZvclBh
aW50aW5nOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX3Njcm9sbGVkQ29udGVudHNM
YXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xheW91dFNpemUobV9vd25pbmdMYXllci5z
Y3JvbGxPZmZzZXQoKSkgLSBtX3N1YnBpeGVsT2Zmc2V0RnJvbVJlbmRlcmVyKTsKKyAgICAgICAg
U2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldDsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9s
bE9mZnNldCA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGxheWVy
RGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVy
ZXIoKSArIHRvTGF5b3V0U2l6ZShzY3JvbGxPZmZzZXQpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21S
ZW5kZXJlcik7CiAgICAgICAgIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QsIHNob3VsZENsaXApOwogICAgIH0KIH0KQEAgLTMxMzIs
NyArMzE2MSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25z
dCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgICAgIGlmICgmbGF5ZXIg
PT0gJm1fb3duaW5nTGF5ZXIpIHsKICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50
cyhjb250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MpOwogCi0gICAgICAgICAgICBpZiAo
bGF5ZXIuY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29u
dGV4dCkKKyAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFi
bGVBcmVhKCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyICYmIHNjcm9sbGFibGVM
YXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29u
dGV4dCkKICAgICAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzIHwgUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQ
YWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBs
YXllci5wYWludExheWVyV2l0aEVmZmVjdHMoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBwYWludEZs
YWdzKTsKQEAgLTM0MTgsMTcgKzM0NDgsMjYgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBh
aW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcGgKICAg
ICAgICAgICAgIHBhaW50RGVidWdPdmVybGF5cyhncmFwaGljc0xheWVyLCBjb250ZXh0KTsKIAog
ICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkgewotICAgICAgICBwYWludFNjcm9sbGJhcihtX293bmluZ0xheWVyLmhvcml6b250YWxT
Y3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQo
c2Nyb2xsYWJsZUxheWVyKTsKKworICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxlTGF5
ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVs
c2UgaWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0g
ICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSwg
Y29udGV4dCwgZGlydHlSZWN0KTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9v
d25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxh
eWVyKTsKKworICAgICAgICBwYWludFNjcm9sbGJhcihzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2Fs
U2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFwaGlj
c0xheWVyID09IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgYXV0byBjb3JuZXJS
ZWN0ID0gbV9vd25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJP
clJlc2l6ZXJSZWN0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7
CisKKyAgICAgICAgYXV0byBjb3JuZXJSZWN0ID0gc2Nyb2xsYWJsZUxheWVyLT5vdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICAgICAgY29udGV4
dC50cmFuc2xhdGUoLWNvcm5lclJlY3QubG9jYXRpb24oKSk7CiAgICAgICAgIExheW91dFJlY3Qg
dHJhbnNmb3JtZWRDbGlwID0gTGF5b3V0UmVjdChjbGlwKTsKICAgICAgICAgdHJhbnNmb3JtZWRD
bGlwLm1vdmVCeShjb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwotICAgICAgICBtX293bmluZ0xheWVy
LnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRSZWN0KHRy
YW5zZm9ybWVkQ2xpcCkpOwotICAgICAgICBtX293bmluZ0xheWVyLnBhaW50UmVzaXplcihjb250
ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIEludFBvaW50KCksIHNuYXBwZWRJbnRSZWN0
KHRyYW5zZm9ybWVkQ2xpcCkpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhaW50UmVzaXpl
cihjb250ZXh0LCBJbnRQb2ludCgpLCB0cmFuc2Zvcm1lZENsaXApOwogICAgIH0KICNpZm5kZWYg
TkRFQlVHCiAgICAgcmVuZGVyZXIoKS5wYWdlKCkuc2V0SXNQYWludGluZyhmYWxzZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCmlu
ZGV4IGNmYzRhYjE1Mjg4Ni4uYTQyYTk2MTQ2ZTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNTUsNiArNTUsNyBAQAog
I2luY2x1ZGUgIlJlbmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJW
aWRlby5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ2NTcsOCArNDY1OCwxMSBAQCBT
Y3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2Rl
Rm9yVmlld3BvcnRDb25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnBhcmVudFJlbGF0aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBj
b25zdCBSZW5kZXJMYXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTog
YW5jZXN0b3JMYXllciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNv
bWUgYSByZWZlcmVuY2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlm
ICghYW5jZXN0b3JMYXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkp
CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0
UmVjdCh7IH0sIExheW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUo
KSkpOworICAgIH0KIAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlz
PFJlbmRlckJveD4obGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00Njc4LDExICs0NjgyLDE0IEBAIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9s
bGluZ05vZGVJRCBub2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5
ZXIoKSwgY2xpcExheWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFt
ZVZpZXcubGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllcik7CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7
CiAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJh
Y2tpbmcuZ3JhcGhpY3NMYXllcigpLAogICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWlu
ZXJMYXllcigpLCBiYWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAg
bnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpLCBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAg
ICB9CiB9CiAKQEAgLTQ3MjAsOCArNDcyNywxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQog
ICAgICAgICBpZiAoY2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAg
ICAgICAgICAgICB1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpz
Y3JvbGxpbmdDb29yZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkK
LSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xs
YWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMg
JiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBh
cmVudE5vZGVJRCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPnNldFNjcm9sbGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgKnNj
cm9sbGFibGVMYXllcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlE
OwpAQCAtNDg5Niw3ICs0OTA1LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW4KICAgICBpZiAo
bm9kZUlEID09IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxpbmdOb2RlSUQoKSkKICAg
ICAgICAgcmV0dXJuICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKLSAgICByZXR1cm4gbV9z
Y3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsKKyAgICByZXR1cm4gbV9z
Y3JvbGxpbmdOb2RlVG9MYXllck1hcC5nZXQobm9kZUlEKS0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0K
IAogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldp
dGhCYWNraW5nKFJlbmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5n
KQpAQCAtNTAzNSwxMSArNTA0NCwxNCBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVy
Q29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIGF1
dG8qIGJhY2tpbmcgPSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwogCi0g
ICAgYm9vbCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5ZXIuaG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAh
bGF5ZXIudmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJs
ZUxheWVyKTsKKworICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9sbGFi
bGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKKyAgICBib29sIGFs
bG93VmVydGljYWxTY3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50LmFkZE9yVXBkYXRlU2Nyb2xs
aW5nTGF5ZXIobGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbENvbnRh
aW5lckxheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsZWRDb250ZW50c0xh
eWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIucmVhY2hhYmxlVG90YWxDb250
ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xs
YmFyKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6
ZSgpLCBhbGxvd0hvcml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVydGljYWxTY3JvbGxiYXIpOwog
fQogCiB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlZ2lzdGVy
QWxsU2Nyb2xsaW5nTGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCAwNTJhOWM3NWU2MzUuLmM3ZmM2NmM3MDEz
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmNwcApAQCAtMTc2LDggKzE3Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAob2xkU3R5
bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRhdGUoKm9s
ZFN0eWxlLCBuZXdTdHlsZSkpIHsKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5kZXJMYXll
ciA9IGxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFwT2Zmc2V0
cygpOwotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwor
ICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyTGF5ZXItPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlU2Nyb2xs
U25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1bWVudEVs
ZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHZp
ZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVTbmFwT2Zmc2V0
cygpOwpAQCAtMTk1LDggKzE5Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAgICAgICAg
IGlmIChzY3JvbGxTbmFwQm94ICYmIHNjcm9sbFNuYXBCb3gtPmxheWVyKCkpIHsKICAgICAgICAg
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHNjcm9sbFNuYXBCb3gtPnN0eWxlKCk7CiAg
ICAgICAgICAgICBpZiAoc3R5bGUuc2Nyb2xsU25hcFR5cGUoKS5zdHJpY3RuZXNzICE9IFNjcm9s
bFNuYXBTdHJpY3RuZXNzOjpOb25lKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+
bGF5ZXIoKS0+dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFw
Qm94LT5sYXllcigpLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxTbmFwQm94LT5sYXllcigpLT5lbnN1cmVMYXll
clNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRh
dGVTbmFwT2Zmc2V0cygpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3gtPmlz
Qm9keSgpIHx8IHNjcm9sbFNuYXBCb3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKICAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygpLnVwZGF0
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFm
MmI5NDllMDAwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcApAQCAtMCwwICsxLDE4MzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqIEFs
dGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIg
dGhlIHRlcm1zCisgKiBvZiBlaXRoZXIgdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lv
biAxLjEsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8gKHRoZSAiTVBM
Iikgb3IgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBWZXJzaW9uIDIuMCwgZm91
bmQgYXQgaHR0cDovL3d3dy5mc2Yub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKiAodGhlICJHUEwi
KSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTVBMIG9yIHRoZSBHUEwgYXJl
CisgKiBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBh
bGxvdyB1c2Ugb2YgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seSB1bmRlciB0aGUg
dGVybXMgb2Ygb25lIG9mIHRob3NlIHR3bworICogbGljZW5zZXMgKHRoZSBNUEwgb3IgdGhlIEdQ
TCkgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhp
cyBmaWxlIHVuZGVyIHRoZSBMR1BMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CisgKiBkZWxl
dGluZ3RoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNl
IGFuZAorICogb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgTVBMIG9yIHRoZSBHUEws
IGFzIHRoZSBjYXNlIG1heSBiZS4KKyAqIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNp
b25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBm
aWxlIHVuZGVyIGFueSBvZiB0aGUgTEdQTCwgdGhlIE1QTCBvciB0aGUgR1BMLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYgbGF5ZXIpCisgICAgOiBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2Up
CisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKKyAgICAsIG1faGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3Vj
aEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlv
bihmYWxzZSkKKyAgICAsIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAg
ICwgbV9sYXllcihsYXllcikKK3sKK30KKworUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7
CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworI2VuZGlmCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5k
ZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3Np
dGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKworICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRh
bFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisK
KyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxE
ZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMpOworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsK
KyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5y
ZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChtX2xheWVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5k
IHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVz
IGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5z
YXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9u
LmlzWmVybygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRp
b24obV9zY3JvbGxQb3NpdGlvbik7CisgICAgfQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVj
dGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdlIGhhdmUgYWNj
ZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVkIG91dHNpZGUg
b2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBh
dXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmVs
ZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50
SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCkucmVt
b3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOworfQorCitib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25z
dAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdAor
eworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAg
aWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGlu
Z05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChh
dXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKKyNlbmRpZgor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zZXR0aW5ncygpLnNjcm9s
bGluZ1BlcmZvcm1hbmNlVGVzdGluZ0VuYWJsZWQoKTsKK30KKworLy8gRklYTUU6IHRoaXMgaXMg
b25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllci5jb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcihtX2xheWVy
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRQb3N0TGF5b3V0U2Ny
b2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQoreworICAgIGlm
ICghcG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3Jv
bGxQb3NpdGlvbigpOworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IGZh
bHNlOworICAgIH0KKworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb24u
dmFsdWUoKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNldCA9IHRydWU7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNl
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJv
bVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7CisgICAgbV9wb3N0TGF5b3V0
U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1fcG9zdExheW91dFNjcm9s
bFBvc2l0aW9uU2V0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQoreworICAgIFNjcm9s
bFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgpKTsKKyAgICBzZXRTY3Jv
bGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQg
eSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3Jv
bGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlv
biwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xs
OjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisgICAgZWxzZQor
ICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24p
LCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9s
bE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0
d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBT
Y3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xh
bXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBMT0df
V0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisg
ICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0aW9u
VXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlmCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBl
IHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGlmIChjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRp
dmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygp
OworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkg
OiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Ny
b2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcHJldmlvdXNTY3JvbGxU
eXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3Jv
bGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9s
bE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJl
aGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlw
ZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNl
dCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0
Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3JvbGxPZmZzZXQgbmV3U2Ny
b2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNj
cm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZp
b3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24p
CisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOworICAgIGlmIChu
ZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0KTsKKwor
ICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24m
IHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsK
KyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyAi
IDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNl
ciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8
PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKKyAg
ICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRo
ZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3Zl
cmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUg
aXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3Zl
ZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0lu
dChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNl
dCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7CisgICAgICAgICAgICBp
bnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xs
WE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBzY3Jv
bGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZz
ZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9u
LngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJl
dFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKKyAg
ICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNl
dCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmIChtX3Njcm9sbFBvc2l0aW9u
ID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9s
bEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAgICAvLyBGSVhNRTogTm90
aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBhbiB1bmNoYW5nZWQgcG9z
aXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAgICAgLy8gVGhlIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2UgdGhlIG1haW4gdGhyZWFk
IHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJlc1Njcm9sbFBvc2l0aW9u
UmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0
aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJz
QWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyLnZpZXco
KTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlm
IG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3Jv
bGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ug
d2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9y
LgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRy
ZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91
dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KKyAg
ICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7CisKKyAgICAg
ICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOworCisg
ICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgeworICAgICAgICAgICAgLy8g
QXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNr
LCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAgICAvLyBwb3NpdGlvbnMu
IFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1k
YXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUg
c3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcg
bGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29tcGxldGVzLgorICAgICAg
ICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworCisgICAgICAgICAg
ICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29t
cG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAor
ICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUg
c3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQg
PSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAgICAgICAgICBwYWludFBh
cmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNh
bCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgcmVnaW9ucywg
c2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1bGFyIHJlZ2lvbi4KKyAg
ICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVn
aW9ucygpOworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyLmZy
YW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRlcmVyLmZyYW1lKCk7Cisg
ICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyLmNv
bnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBp
bnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJl
dFJlY3ROZWVkc1VwZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJl
bmRlcmVyLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIucmVwYWludExheW91dFJl
Y3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VN
b3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAgIGlmIChyZXBhaW50Q29u
dGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRh
aW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKyAg
ICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1
YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29sIHJlcXVpcmVzUmVwYWlu
dCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAgICAgICAg
bV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9s
YXllci5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2Fs
KCk7CisgICAgICAgIHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFja2luZygpLT5uZWVkc1Jl
cGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAvLyBKdXN0IHNjaGVkdWxl
IGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJlcXVpcmVzUmVwYWludCkK
KyAgICAgICAgcmVuZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IHJlY3RGb3JSZXBhaW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9s
bC1yZWxhdGVkIERPTSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRkUGVuZGluZ1Njcm9s
bEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSkKKyAg
ICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKKworICAgIHZp
ZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKKyAgICBmcmFtZS5lZGl0
b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCkKK3sK
KyAgICBpZiAobV9sYXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJz
KCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRv
IGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCisgICAgICAgIC8v
IHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4K
KyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gbV9sYXllci5z
dGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7CisgICAgICAg
ICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgICAgICBtX2xh
eWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0
ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgYmUgbmljZSB0byBv
bmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZlY3RlZCBieSBzY3JvbGxp
bmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+c2V0RGVzY2VuZGFudHNO
ZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgICAg
IG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5n
VXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsK
KyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygp
OworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFk
IHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsV2lkdGg7Cit9
CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQoKSBjb25zdAor
eworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRp
bmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7CisgICAgaWYgKCFtX21h
cnF1ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3b3VsZCBsaWtlIHRvIHVz
ZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBiaXRmaWVsZHMuCisgICAg
Ym9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b247CisgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7CisgICAgbV9tYXJxdWVl
LT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9u
ID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLmlzSFRNTE1hcnF1ZWUo
KSAmJiByZW5kZXJlci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlv
cjo6Tm9uZSAmJiByZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlmICghbV9tYXJxdWVlKQor
ICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPigmbV9sYXll
cik7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxlKCk7CisgICAgfSBlbHNl
IGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRl
ckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93KCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNv
bnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9v
bCBpc1Zpc2libGUgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5
OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFzeW5jT3ZlcmZsb3dTY3Jv
bGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJm
bG93KCkgJiYgIW1fbGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0KCk7CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQorICAg
IHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgKHJlbmRlcmVyLnN0eWxl
KCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyLnNldHRpbmdzKCkuYWx3
YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZh
bHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKHNj
cm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Nyb2xsaW5nTm9kZUlEIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2xheWVyLmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBtX2xheWVyLmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29y
ZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4gZ2VzdHVy
ZVN0YXRlKQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIGlm
ICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgeworICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdD
b29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5o
YW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgp
LCBnZXN0dXJlU3RhdGUpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFNjcm9sbGFibGVB
cmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIGdlc3R1cmVTdGF0
ZSk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRl
bnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9s
bGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Cit7CisgICAg
SW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkg
JiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQorICAgICAgICBzY3Jv
bGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisgICAgYXV0byB2aXNpYmxlU2l6
ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7CisgICAgcmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwg
eyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgo
KSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVp
Z2h0KCkpIH0gfTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVy
aGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuc2V0
dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAgICAv
LyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8g
U2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9m
ZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBhdXRvIHJlYWNoYWJsZVNp
emUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlmIChzY3JvbGxPZmZzZXQu
eSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4g
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkKKyAgICAgICAgc3RyZXRj
aC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0g
dmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCisgICAg
ICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7CisgICAgZWxzZSBpZiAocmVh
Y2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndp
ZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxP
ZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7CisK
KyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIEludFNpemUoKTsKKyNlbmRp
ZgorfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENvcm5lclJl
Y3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxD
b3JuZXI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJlcigpLmlzQm94
KCkpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1wdHkoKTsKK30KKworSW50
UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNj
cm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUo
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVy
LCByZWN0KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIudmlldygp
LmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJl
ciwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBv
aW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0
RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHBvaW50KTsKK30KKworSW50
UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmll
d1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
cGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBwYXJlbnRQb2lu
dCk7CisgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJl
dHVybiBwb2ludDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNp
YmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIudmlzaWJsZVNpemUoKTsKK30K
KworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUoKSBjb25z
dAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNjcm9sbEhlaWdodCgpKTsK
K30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWFjaGFibGVUb3RhbENv
bnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5j
b250ZW50c1NpemUoKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXpl
LndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOworCisgICAgaWYgKCFoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0
ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwor
CisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJl
YXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXpl
Q2hhbmdlZChyZWFzb24pOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxi
YXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKSkKKyAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcikuc2V0U2hvdWxkRm9yY2VS
ZWxheW91dENoaWxkcmVuKHRydWUpOworICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dCgp
OworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNw
ZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5z
aG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkU3RhcnRTY3JvbGwoKQor
eworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dT
Y3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3Jv
bGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZEVuZE92ZXJm
bG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBk
YXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Ny
b2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgorICAgIG1f
bGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChDaHJvbWVDbGllbnQ6OlNj
cm9sbCk7Cit9CisjZW5kaWYKKworUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Cit7
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKGlz
PFJlbmRlckJveD4ocmVuZGVyZXIpKTsKKyAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxS
ZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJv
cmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25h
cHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkp
OworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gbV9oQmFyID8gbV9oQmFy
LT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID0gbV92QmFy
ID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25PdmVybGF5U2Nyb2xsYmFy
ID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsKKyAgICB9OworCisgICAg
Ym9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3Jv
bGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVybGF5VmVydGljYWxTY3Jv
bGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICBib29sIHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Nyb2xsYmFyc0F2b2lkQ29y
bmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAmJiBoYXZlTm9uT3Zlcmxh
eVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhhdmVOb25PdmVybGF5SG9y
aXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSk7CisK
KyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikg
eworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJlc2VudCwgdGhlIGNvcm5l
ciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXplIHsKKyAgICAgICAgICAg
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIDogaG9yaXpv
bnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxTY3JvbGxiYXJXaWR0aAor
ICAgICAgICB9OworICAgIH0KKworICAgIFJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0
cyByZXN1bHQ7CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGJhclJlY3Quc2hpZnRZRWRn
ZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7CisgICAgICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgICAgIGlmIChwbGFjZVZlcnRp
Y2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRn
ZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7
CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJl
Y3Q7CisgICAgfQorCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBhdXRvIGJhclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBpZiAocGxhY2VWZXJ0aWNh
bFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGlj
YWxTY3JvbGxiYXJXaWR0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJhclJlY3Quc2hp
ZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisKKyAg
ICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIGJhclJlY3QuY29u
dHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAgcmVzdWx0LnZlcnRpY2Fs
U2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0o
SW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFy
T25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxv
d0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIu
eSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5t
YXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CisKKyAg
ICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVy
ID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKKworICAgIGlmIChoYXZlUmVzaXplcikgeworICAg
ICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgcmVzdWx0LnJlc2l6
ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFy
VGhpY2tuZXNzKCk7CisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBz
Y3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25z
dAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlm
ICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIGlmICgmc2Nyb2xsYmFy
ID09IG1faEJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9u
dGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZh
bGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKKyAgICAgICAgaWYg
KEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Cisg
ICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAg
ICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsK
KyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVudCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworICAgIGVsc2UKKyAgICAg
ICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigp
KTsKKworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxSZWN0OworICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKKyAgICBib3gtPnJlcGFpbnRSZWN0YW5n
bGUocmVwYWludFJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlu
dmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKEdy
YXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgeworICAgICAgICBs
YXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVw
YWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6
ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK3N0YXRpYyBib29sIHNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgcmV0dXJuIHNjcm9sbGJh
ciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jpem9udGFsU2Nyb2xsYmFy
KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5
U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyRWxl
bWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVy
ZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsK
KyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5n
U2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNo
YWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jv
b3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAm
cmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZWZQdHI8U2Nyb2xs
YmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKSk7
CisgICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIpOworICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBpczxSZW5kZXJCb3g+KGFj
dHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5zdHls
ZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOworICAgIGlmIChoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3duY2FzdDxSZW5kZXJCb3g+
KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOworICAgIGVsc2UgeworICAgICAgICB3aWRnZXQg
PSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIFNj
cm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKKyAgICAgICAgZGlkQWRkU2Nyb2xsYmFyKHdp
ZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOworICAgICAgICBpZiAobV9sYXllci5wYWdlKCkuaXNN
b25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0
V2hlZWxFdmVudFRlc3RNb25pdG9yKG1fbGF5ZXIucGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRv
cigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3
aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIg
PSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwor
ICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNjcm9sbGJh
ci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3Jv
bGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKworICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBh
cmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJh
cikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAgICAgICBtX2hC
YXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJV
QkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93
KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJl
Z2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3Rp
Y2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3Ry
b3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJv
eWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0
byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidz
IHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihi
b29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsK
KyAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJT
Y3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBT
Y3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAg
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJC
RVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBE
ZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29y
bmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xs
YmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5n
ZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwor
fQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5n
U2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIHJldHVybiAmcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIHJldHVybiByZW5kZXJlci5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBtX2xh
eWVyLmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZ
ZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgaWYgKG5l
eHRMYXllci0+cmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAo
IW1fdkJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwg
KG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGlu
ZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsK
K30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAorewor
ICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAg
ICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5I
aXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9oQmFyLT5o
ZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oQmFyIHx8IG1fdkJhciB8fCBtX3Nj
cm9sbENvcm5lciB8fCBtX2xheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21Sb290KQoreworICAgIGlm
ICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9sYXllci5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKG1f
dkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21S
b290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxi
YXIpOworICAgIH0KKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgcmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV9oQmFyLT5zZXRGcmFt
ZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfQorCisgICAgaWYgKG1fc2Ny
b2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNj
cm9sbENvcm5lcik7CisKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAgICBtX3Jlc2l6ZXItPnNl
dEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3gg
PSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+
bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Cit9CisKK0xheW91dFVuaXQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAoreworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92
ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgp
OworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93TGVm
dCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOwor
ICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwor
ICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92
ZXJmbG93UmVjdC54KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7
CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQoreworICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisKKyAgICBtX3Njcm9sbFdpZHRoID0gcm91
bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSk7CisgICAgbV9zY3JvbGxI
ZWlnaHQgPSByb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVyZmxvd1RvcCgpKTsKKwor
ICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQo
KSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlv
blNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZl
cnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0g
cm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7CisgICAgc2V0U2Ny
b2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRv
cE92ZXJmbG93KSk7CisKKyAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21w
b3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgJiYgKGhhc1Njcm9sbGFi
bGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygp
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlSG9y
aXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJm
bG93KCkgJiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WCgpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVyZmxvdygpICYmIG1fbGF5
ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFT
U0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0dXJuIHNjcm9sbFdpZHRo
KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBj
b25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0
dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGll
bnRIZWlnaHQoKSk7Cit9CisKK3N0YXRpYyBib29sIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAg
IE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpv
bnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Cisg
ICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93
OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYm
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJl
dHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVyZmxvd1Njcm9sbEFjdHNM
aWtlQXV0bzsKK30KKworc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFy
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKK3sK
KyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhv
cml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgp
OworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVy
Zmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFy
KSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAg
ICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3ZlcmZsb3dTY3JvbGxBY3Rz
TGlrZUF1dG87Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVu
ZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5k
bGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
CisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFz
SG9yaXpvbnRhbE92ZXJmbG93KCk7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhp
cy0+aGFzVmVydGljYWxPdmVyZmxvdygpOworCisgICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMg
YSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChtX2hCYXIgJiYg
c3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xs
YmFyKSkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6b250YWxPdmVyZmxvdyk7
CisgICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxl
KCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKGhhc1Zl
cnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1dG8gYmVoYXZpb3Ig
bWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBhZGRlZCBvciByZW1v
dmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNI
b3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBib29sIGF1dG9WZXJ0aWNh
bFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhh
dmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRpY2FsT3ZlcmZsb3cp
OworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8fCBhdXRvVmVydGlj
YWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhhc0hvcml6b250YWxTY3Jv
bGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlmIChib3gtPmhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAgICAgbV9sYXllci51cGRh
dGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnQoKTsKKwor
ICAgICAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0
byB8fCByZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpBdXRvKSB7Cisg
ICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7CisgICAgICAgICAgICAgICAg
bV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLnNl
dE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRl
ckJsb2NrPihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2Vk
LCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKKyAgICAgICAgICAgICAgICAgICAgYmxv
Y2subGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyLmxheW91dCgpOworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxv
d1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBS
ZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyLnBhcmVudCgpOworICAgICAgICBpZiAocGFy
ZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVyLmlzQm94KCkpCisgICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRN
YWluU2l6ZUZvckNoaWxkKCptX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICB9CisKKyAgICAvLyBT
ZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgaWYgKG1faEJh
cikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lk
dGgoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50
V2lkdGgpOworICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFByb3BvcnRpb24oY2xpZW50
V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOworICAgIH0KKyAgICBpZiAobV92QmFyKSB7CisgICAgICAg
IGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Cisg
ICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBw
YWdlU3RlcCk7CisgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1f
c2Nyb2xsSGVpZ2h0KTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSk7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9y
ZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBt
X2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Nyb2xsT2Zmc2V0IG9yaWdp
bmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBjb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOworICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0IG9mZnNl
dHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBjaGFuZ2Vz
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU5NjQK
KyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBpZiAoIWJveC0+aXNIVE1M
TWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgJiYgIWlzVXNlclNjcm9sbElu
UHJvZ3Jlc3MoKSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJlIGF0IGFu
IGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAorICAgICAgICAv
LyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1c2ggdGhl
bSB1cCB0byB0aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZz
ZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7CisjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBjYXJldCBh
ZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRlZCBlbnRy
eSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFuIGlzc3Vl
IHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJhd24gb24g
dGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNvbnRlbnQg
b3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3PiBmb3Ig
bW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xs
T2Zmc2V0KCkpCisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0
KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNldCAhPSBz
Y3JvbGxPZmZzZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKElu
dFBvaW50KHNjcm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAobV9sYXllci5pc0NvbXBvc2l0ZWQo
KSkgeworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgp
OworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRl
KCk7CisgICAgfQorCisgICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAg
ICAgbV9sYXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOworCisgICAg
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxi
YXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMg
YXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAgIGF1dG8mIHJlbmRlcmVy
ID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlw
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBh
IHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFp
bnQKKyAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3Jt
YWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMKKyAgICAvLyB3aWxsIGJl
IGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJl
IGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKKyAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4g
VGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRv
IHJ1biwKKyAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhl
IG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUKKyAgICAvLyBzZWNvbmQgcGFz
cyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0
LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250
cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9m
ZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBw
YXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgorICAgICAgICBpZiAoKG1f
aEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXll
ckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBJ
bnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAgICAgbG9jYWxEYW1nZVJl
Y3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0lu
dGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBtX2xheWVyLmVuY2xvc2luZ0NvbXBvc2l0
aW5nTGF5ZXIoKTsKKyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisgICAgICAgICAgICBwYWlu
dGluZ1Jvb3QgPSByZW5kZXJlci52aWV3KCkubGF5ZXIoKTsKKworICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMo
dHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNoZWNrIGlzIHJl
cXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xsYmFycyB0d2ljZS4KKyAg
ICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBw
YWludE9mZnNldDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCisgICAgICAgIGFk
anVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAg
ICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuIFdlIG5vcm1hbGx5
IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1dCBzb21ldGltZXMKKyAg
ICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3VycmluZyAobW9zdCBub3Rh
Ymx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAvLyBjb250YWlucyBmaXhl
ZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHModG9J
bnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1
cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KKyAg
ICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAg
bV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBpZiAobV92QmFyICYmICFs
YXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4
dCwgZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRl
IGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0
byB0aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRTY3JvbGxDb3JuZXIoY29u
dGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisKKyAgICAvLyBQYWludCBv
dXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5l
ci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdl
UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRTY3JvbGxD
b3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZz
ZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50UmVjdCBhYnNSZWN0ID0g
c2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAg
ICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAg
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRv
UmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29ybmVyIGlmIHdlIGhhdmUg
b3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8gdG8gc2VlIHdoYXQgaXMg
YmVoaW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAgICAgICAgU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgYWJzUmVjdCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXpl
ckNvcm5lclJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAgICBGbG9hdFNpemUgY29y
bmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJl
c2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFy
ZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFn
ZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0g
cmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUuc2Nh
bGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElt
YWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNl
KCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5l
ckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNp
emUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKworICAgIGlmIChzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgY29udGV4dC5z
YXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJDb3JuZXJSZWN0LngoKSAr
IGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJSZWN0LnkoKSArIHJlc2l6
ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUuaGVpZ2h0KCkpOworICAg
ICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsKKyAgICAgICAgaWYgKHJl
c2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNv
cm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJSZXNpemVyU2l6ZSkpOwor
ICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpLCByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VSZWN0KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVy
KCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgPT0gUmVzaXplOjpOb25lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVjdHMucmVzaXplcjsKKyAg
ICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlmICghcmVzaXplckFi
c1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAgICAgICAgdXBkYXRlUmVz
aXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZXNpemVy
KSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNl
dCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZHJhd1Bs
YXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKworICAgIC8vIERy
YXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFy
ZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBwaW5nIHdpbGwgZXhjbHVkZSB0
aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgorICAgIGlmICghaGFzT3Zl
cmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworICAgICAgICBjb250ZXh0
LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRSZWN0IGxhcmdlckNvcm5lciA9
IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIuc2V0U2l6ZShMYXlvdXRTaXpl
KGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVyLmhlaWdodCgpICsgMV9s
dSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JBPHVpbnQ4X3Q+IHsgMjE3
LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7
CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChsYXJnZXJDb3JuZXIpKTsK
KyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJm
bG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJlc2l6
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHls
ZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgeworICAgICAgICBpZiAocmVjdHMucmVzaXpl
ci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFu
ZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgorICAgIGlmIChtX3ZCYXIgJiYgbV92
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAgICAg
cmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRh
bFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAgICAgICAgcmVzdWx0LnNl
dFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5wYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtub3duTW91
c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIo
KS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxpbmdXaGVlbEV2ZW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXIucmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU25hcE9m
ZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBiZXlvbmQgSFRNTEVsZW1l
bnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgp
KSB8fCAhbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgp
LT5yZW5kZXJCb3goKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNjcm9sbGFibGVBcmVhKCp0
aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJlY3QoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNv
bnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0
b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0g
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3It
PmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRp
ZgorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmxheVNjcm9sbGJh
cnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBz
dWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9s
bGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVyOjpMYXllclBhaW50aW5n
SW5mbyBwYWludGluZ0luZm8oJm1fbGF5ZXIsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCks
IHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7CisgICAgbV9s
YXllci5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUmVuZGVyTGF5ZXI6OlBhaW50
TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKworICAgIG1fY29udGFpbnNE
aXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50
cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9u
LCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAoreworICAgIGlmIChsYXllckZy
YWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IHNu
YXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLmJvcmRlckJveFJlY3Qo
KSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgYXV0
byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5k
cywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJl
c2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7
IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAt
IEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkg
fTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJv
cmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3Ju
ZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXpl
clJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25zdCBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAgICBhdXRvIHJlc2l6ZXJS
ZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdt
ZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAgIGlmIChmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJ
bkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKKyAg
ICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9u
LnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/
IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxw
dHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmJhY2tp
bmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBu
dWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjps
YXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2lu
ZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRy
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ01heVJldmVh
bEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KKyAgICBS
ZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFy
cyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoYm94LT5z
dHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOworICAgIE92
ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKKworICAgIC8vIFRv
IGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3
ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHBy
ZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJm
bG93Q2xpcCgpICYmICgoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9t
YXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwor
ICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkg
JiYgKCh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJh
cihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9s
bGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7CisgICAgc2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOworICAgIHNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgLy8gV2l0aCBub24t
b3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1
dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1
ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCisgICAgaWYgKG1f
aEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUt
Pm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93
OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKworICAgIGlmICht
X3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+
b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6
OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKCFt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQo
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5k
ZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9
IHJlbmRlcmVyLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAoSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQorICAgICAg
ICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRl
cmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wgaXNTY3JvbGxhYmxlID0g
aGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJvb2wgYWRkZWRPclJlbW92
ZWQgPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBm
cmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAoaXNTY3Jv
bGxhYmxlKSB7CisgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAg
ICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRo
aXMpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAg
ICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlz
KTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsKKyAgICB9CisK
KyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsK
KyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
KQorICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2gg
bGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBi
ZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEg
dG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAgICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5V
U0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKK3sKKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJFbGVtZW50KiBhY3R1
YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBhdXRvIGNv
cm5lciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxS
ZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFjb3JuZXIpIHsKKyAgICAg
ICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3ZlKCpj
b3JuZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQg
b2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVy
ZXIpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBl
bHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpjb3JuZXIpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcigp
Cit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Ny
b2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3JvbGxDb3JuZXIgPSBudWxs
cHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6ZXJT
dHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAg
UmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5k
ZXJlcik7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBh
Y3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVy
IH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFyZXNp
emVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVz
aXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBv
ZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIpOwor
ICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAg
ICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIoKQoreworICAgIGlmICghbV9yZXNp
emVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7
CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKQoreworICAgIGlmIChtX2hC
YXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHls
ZSgpOworICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworfQorCisjaWYgRU5BQkxFKElPU19UT1VD
SF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8vIElmIHdl
IGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBoYW5kbGVk
IG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5hZGRU
b3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Ny
b2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXI7CisgICAg
aWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVu
dCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1f
cmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gZmFsc2U7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKKy8vIEZJWE1FOiB0aGlzIGlzIG9u
bHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9sYXllci5pc0NvbXBvc2l0ZWQoKSAmJiBtX2xheWVyLmJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5n
TGF5ZXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQg
YmVnaW5uaW5nRGVsdGEpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJl
Zm94J3MuCisgICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29s
a2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCisgICAgY29uc3QgaW50IHNwZWVk
UmVkdWNlciA9IDEyOworCisgICAgaW50IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAv
IHNwZWVkUmVkdWNlcjsKKyAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEpCisgICAgICAgIGFkanVz
dGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19j
YXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7CisgICAgZWxzZSBpZiAoYWRqdXN0ZWRE
ZWx0YSA8IC0xKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1
c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsg
MTsKKworICAgIHJldHVybiBhZGp1c3RlZERlbHRhOworfQorCitzdGF0aWMgaW5saW5lIEludFNp
emUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0YSkKK3sKKyAgICByZXR1
cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNj
cm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50JiBzb3VyY2VQb2ludCkK
K3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0gbV9sYXllci5yZW5kZXJl
cigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQb3NpdGlvbigpOworCisg
ICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBp
cyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3cs
IHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGljIEludFBvaW50IHByZXZpb3Vz
TW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8
IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNlCisgICAgICAgIHByZXZp
b3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247CisKKyAgICBJbnRTaXpl
IGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OworCisgICAgaWYg
KGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8g
YXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgorICAgICAgICBkZWx0
YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3
Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOworCisgICAg
c2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Cit9CisKK09w
dGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9s
bFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yLCBjb25zdCBMYXlvdXRSZWN0JiByZXZl
YWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpCit7CisgICAgQVNTRVJU
KG1fbGF5ZXIuYWxsb3dzQ3VycmVudFNjcm9sbCgpKTsKKworICAgIFJlbmRlckJveCogYm94ID0g
bV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIGF1dG8gc2hvdWxk
VXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVudCwgU2Nyb2xsQmVoYXZp
b3IgYmVoYXZpb3IpCisgICAgeworICAgICAgICBib29sIHVzZUFuaW1hdGVkU2Nyb2xsaW5nID0g
IW1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblBy
b2dyZXNzKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnQgJiYgdXNlU21vb3RoU2Nyb2xsaW5nKGJl
aGF2aW9yLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHVzZUFuaW1hdGVkU2Nyb2xsaW5nID8g
QW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKKyAgICB9OworCisgICAg
U2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlv
bigpKSk7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwg
Y3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5v
dEluQW5pbWF0aW9uKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBz
Y3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byBhbmltYXRlZCA9IHNob3VsZFVzZUFuaW1hdGVk
U2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBiZWhhdmlvcik7CisgICAgICAgIHNldFNjcm9sbFBvc2l0
aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgU2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwor
ICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xsT2Zm
c2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OworCisgICAgICAgIGF1dG8gbG9jYWxFeHBvc2VSZWN0U2Ny
b2xsZWQgPSBsb2NhbEV4cG9zZVJlY3Q7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVk
Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVj
dChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9z
ZVJlY3RTY3JvbGxlZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFi
bGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7Cisg
ICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIu
cGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci5wYXJl
bnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci5o
YXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNj
cm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAg
ICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xs
ZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8g
SWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1
cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xs
T2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgh
cmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyLnBhcmVudCgpKSB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAg
ICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHko
cmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZW5kZXJlci5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3Jv
bGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgd2Ug
YXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3Jh
bW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAgICAgICAgLy8gaGF2ZSBhbiBvdmVy
ZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNh
biBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnNjcm9s
bEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAgICAgICAgICAgICpzY3Jv
bGxlZEFyZWEgPSAmcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgICAgIC8vIEZJ
WE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5
IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/CisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAgIH0KK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1l
bnRTY3JvbGwoKQoreworICAgIEFTU0VSVCgmbV9sYXllciA9PSBtX2xheWVyLnJlbmRlcmVyKCku
dmlldygpLmxheWVyKCkpOworCisgICAgTE9HKFNjcm9sbGluZywgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOworCisg
ICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgbV9s
YXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRl
ck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChV
c2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAoJm1fbGF5ZXIgIT0gbV9sYXllci5yZW5kZXJlcigpLnZp
ZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFwcGluZ3NUb0FuY2VzdG9y
KG1fbGF5ZXIucGFyZW50KCksIG51bGxwdHIpOworCisgICAgLy8gRklYTUU6IHdoeSBpcyBpdCBP
SyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRvCisg
ICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3RvciBh
bmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KKyAgICBtX2xheWVyLnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwLCBSZW5kZXJMYXllcjo6
SXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIERlcHJlY2F0ZWRH
bG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIG1fbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6
OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKK30KKworU3RyaW5nIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42YWIxMDA1
MDBlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYS5oCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKiBBbHRlcm5hdGl2
ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cworICogb2YgZWl0aGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBm
b3VuZCBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvICh0aGUgIk1QTCIpIG9yIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgVmVyc2lvbiAyLjAsIGZvdW5kIGF0IGh0
dHA6Ly93d3cuZnNmLm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICogKHRoZSAiR1BMIiksIGluIHdo
aWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIE1QTCBvciB0aGUgR1BMIGFyZQorICogYXBw
bGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNl
IG9mIHlvdXIKKyAqIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9m
IG9uZSBvZiB0aG9zZSB0d28KKyAqIGxpY2Vuc2VzICh0aGUgTVBMIG9yIHRoZSBHUEwpIGFuZCBu
b3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1
bmRlciB0aGUgTEdQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmd0aGUg
cHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAq
IG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIE1QTCBvciB0aGUgR1BMLCBhcyB0aGUg
Y2FzZSBtYXkgYmUuCisgKiBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92
ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyCisgKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRl
ciBhbnkgb2YgdGhlIExHUEwsIHRoZSBNUEwgb3IgdGhlIEdQTC4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJNYXJxdWVlOworCitjbGFz
cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVh
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJik7CisgICAgdmlydHVhbCB+UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCisgICAgUmVuZGVyTGF5ZXImIGxheWVyKCkgeyBy
ZXR1cm4gbV9sYXllcjsgfQorCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQgdXBkYXRlTWFycXVlZVBvc2l0aW9u
KCk7CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisKKyAgICB2b2lkIHN0b3Jl
U2Nyb2xsUG9zaXRpb24oKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHZv
aWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgIHZvaWQg
dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKwor
ICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0
aW9uPik7CisgICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7
CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkg
Y29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwor
CisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhl
aXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUm
IGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBT
Y3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNj
cm9sbENsYW1waW5nOjpDbGFtcGVkKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRv
T2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Ny
b2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpD
bGFtcGVkKTsKKworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUs
IFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xs
ID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5
LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBB
bmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5n
ID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3Jv
bGw6Ok5vKTsKKworICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KKyAgICB2
b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQo
eCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxD
bGFtcGluZzo6VW5jbGFtcGVkKTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7
IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3Jv
bGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9CisKKyAg
ICBib29sIHNjcm9sbHNPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVy
biBob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIGJv
b2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3Jv
bGxiYXIoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKGJvb2wpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7CisKKyAg
ICBSZWY8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwor
ICAgIHZvaWQgZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisKKyAgICBi
b29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9CisgICAgdm9pZCBzZXRS
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2ls
aWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9
IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRo
ZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hl
dGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgorICAgIGJvb2wgY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVu
IHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0
byBiZSB1cC10by1kYXRlKS4KKyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0K
KworICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVs
ZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCBob3Jp
em9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworCisgICAgYm9vbCBoYXNPdmVyZmxvd0Nv
bnRyb2xzKCkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIGJvb2wgaGl0VGVzdFJl
c2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OworCisgICAgdm9pZCBw
YWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0g
ZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50
UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwor
CisgICAgdm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKKworICAgIGJvb2wgc2Ny
b2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIg
PSAxKTsKKworcHVibGljOgorICAgIC8vIEFsbCBtZXRob2RzIGluIHRoaXMgc2VjdGlvbiBvdmVy
cmlkZSBTY3JvbGxhYmxlYUFyZWEgbWV0aG9kcyAoZmluYWwpLgorICAgIHZvaWQgYXZhaWxhYmxl
Q29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOworCisg
ICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisK
KyAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fc2Nyb2xsUG9zaXRpb247IH0KKworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQorICAgIFNjcm9sbGJhciog
dmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0K
KyAgICBTY3JvbGxhYmxlQXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5h
bDsKKworICAgIGJvb2wgaGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmLCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4pIGZpbmFsOwor
ICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOworICAgIGJvb2wg
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOworICAgIGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQorICAgIHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBi
b29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Cisj
ZW5kaWYKKworICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZEVu
ZFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkVXBkYXRlU2Nyb2xsKCkgZmluYWw7CisjZW5k
aWYKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IGZpbmFsOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigp
IGNvbnN0IGZpbmFsOworCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisKKyAg
ICBib29sIHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBm
aW5hbDsKKworICAgIGJvb2wgaXNSZW5kZXJMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0
IEludFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNv
bnN0IEludFJlY3QmKSBmaW5hbDsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IGNvbnZlcnRGcm9t
U2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0
JikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYpIGZpbmFsOworICAgIFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2Rl
SUQoKSBjb25zdCBmaW5hbDsKKworICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJu
YWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJl
Y3RCZWhhdmlvcikgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNv
bnN0IGZpbmFsOworICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIGlzSGFuZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwor
ICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVk
ID0gbnVsbHB0cikgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNz
KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJm
b3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5hbDsKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQ
KQorICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisgICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFs
OworCisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKworICAgIElu
dFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6
ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNv
bnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOworCisgICAgYm9vbCBj
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5z
RGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQorICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJs
YXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9CisKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CisgICAg
dm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIHZvaWQgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGNsZWFyU2Nyb2xsQ29y
bmVyKCk7CisgICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKKworICAgIHZvaWQgdXBkYXRlQWxsU2Ny
b2xsYmFyUmVsYXRlZFN0eWxlKCk7CisKKyAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFn
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7
CisKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBv
dmVyZmxvd0JvdHRvbSgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7CisKKyAgICBSZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3Q7
CisKKyAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJlY3Qm
IGxvY2FsUmVjdCkgY29uc3Q7CisKKyAgICBib29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tncm91
bmQoKSBjb25zdDsKKworICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICB2
b2lkIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CisKKyAgICBib29s
IGhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzVmVydGljYWxPdmVy
ZmxvdygpIGNvbnN0OworCisgICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsK
KworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlk
ZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgorICAgIHZvaWQgc2Nyb2xs
VG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzQWZ0ZXJTY3JvbGwoKTsKKworICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNj
cm9sbGJhciYpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29s
IGhhc092ZXJmbG93KTsKKworICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25z
dCBTY3JvbGxPZmZzZXQmKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlck92ZXJmbG93U2Nyb2xsKCk7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVy
RG9jdW1lbnRTY3JvbGwoKTsKKworICAgIE9wdGlvbmFsPExheW91dFJlY3Q+IHVwZGF0ZVNjcm9s
bFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yLCBjb25zdCBMYXlvdXRSZWN0JiByZXZlYWxSZWN0LCBj
b25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpOworCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgdXBk
YXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwor
Citwcml2YXRlOgorICAgIC8vIE1pbmltdW0gcGFkZGluZyBvbiB4ODZfNjQgKDQgYnl0ZXMpLCBh
ZnRlciBtX3Njcm9sbEhlaWdodCkKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDog
MTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJ
T1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3Np
dGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwor
ICAgIGJvb2wgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQgOiAxOworCisgICAgLy8gVGhl
IHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3JvbGxXaWR0
aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKKyAgICBSZW5kZXJMYXllciYgbV9sYXllcjsK
KyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIFNjcm9sbFBvc2l0aW9u
IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOworCisgICAgLy8gRm9yIGxheWVycyB3aXRoIG92
ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBvZiBzY3JvbGxiYXJzLgorICAgIFJlZlB0cjxTY3JvbGxi
YXI+IG1faEJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CisKKyAgICBJbnRQb2lu
dCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CisKKyAgICAvLyBSZW5kZXJlcnMgdG8g
aG9sZCBvdXIgY3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCisgICAgUmVuZGVyUHRy
PFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOworICAgIFJlbmRlclB0cjxSZW5k
ZXJTY3JvbGxiYXJQYXJ0PiBtX3Jlc2l6ZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
TWFycXVlZT4gbV9tYXJxdWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKaW5kZXggNzM0NDA2YzQzMDVkLi4yNWFkZTQxZjlmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
aXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Nj
cm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJv
dW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxm
LCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJv
eDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04OTIsNyArODk3LDEwIEBAIGJv
b2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCiAKIGJvb2wg
UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCiB7
Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzU2Ny
b2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKworICAgIHJldHVybiBmYWxzZTsK
IH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJv
b2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCmlu
ZGV4IDc2ZTIzZTRkMDk5Ni4uN2I0ZTc2ZGM1N2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwCkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6OlJl
bmRlck1hcnF1ZWUoUmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAg
ICAsIG1fdGltZXIoKnRoaXMsICZSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAgIGxh
eWVyLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgQVNT
RVJUKGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFyZWEo
KS0+c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBSZW5k
ZXJNYXJxdWVlOjp+UmVuZGVyTWFycXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3MSwxMSArMTcyLDE0
IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6c3RhcnQoKQogICAgIGlmIChtX3RpbWVyLmlzQWN0aXZl
KCkgfHwgbV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKS5pc1pl
cm8oKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9s
YXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwog
ICAgIGlmICghbV9zdXNwZW5kZWQgJiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jp
em9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZz
ZXQobV9zdGFydCwgMCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6
OlVuY2xhbXBlZCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0
KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3Jv
bGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXll
ci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFydCksIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdG9wcGVk
ID0gZmFsc2U7CkBAIC0yNDMsMTMgKzI0NywxNiBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVy
RmlyZWQoKQogewogICAgIGlmIChtX2xheWVyLT5yZW5kZXJlcigpLnZpZXcoKS5uZWVkc0xheW91
dCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIp
OworCiAgICAgaWYgKG1fcmVzZXQpIHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZz
ZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNl
dChtX3N0YXJ0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9Z
T2Zmc2V0KG1fc3RhcnQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lP
ZmZzZXQobV9zdGFydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIsNyAr
Mjc5LDcgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9vbCBw
b3NpdGl2ZSA9IHJhbmdlID4gMDsKICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jpem9u
dGFsKCkgPyByb3VuZFRvSW50KG1fbGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSA6
IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAg
ICAgIGludCBpbmNyZW1lbnQgPSBhYnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVuZGVy
ZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAgICBp
bnQgY3VycmVudFBvcyA9IChpc0hvcml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgp
LngoKSA6IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJyZW50
UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54
KCkgOiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5ld1Bv
cyA9ICBjdXJyZW50UG9zICsgKGFkZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQp
OwogICAgICAgICBpZiAocG9zaXRpdmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1pbihu
ZXdQb3MsIGVuZFBvaW50KTsKQEAgLTI4OSw5ICsyOTYsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6
OnRpbWVyRmlyZWQoKQogICAgIH0KICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAg
ICAgIG1fbGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFRvWE9mZnNldChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXll
ci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggN2E1MWNmODcwNmI0Li41
Y2I5YzAyN2QxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6
Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGljIHZv
aWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgc3Ry
ZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5l
LWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGlu
ZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIs
IChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAgc3Ry
ZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgp
ZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9u
KFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxlQXJl
YSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAgICBz
dHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNiwxMCArMTExNiwxNCBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBtYXJr
LCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAgaWYg
KGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8ICJM
IjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3duY2Fz
dDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwogCiAg
ICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGQ1Y2VkOGEwMjhiMy4uNWQ3YzY3Mzkw
NDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0xMDAsNiAr
MTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hlZEltYWdlQ2xpZW50LCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmllbmQgY2xhc3MgUmVuZGVy
QmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50OwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBzaG91bGQgcGFzcyB0aGUg
ZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVuIGF1dG9tYXRpY2FsbHkg
YmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25zdHJ1Y3Rvci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKaW5kZXggYTA3NTA4MWY1NjVjLi4yNTdhZmJlMTkwNDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxi
YXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
QEAgLTM5NywxOSArMzk4LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
ZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1l
bnQqKiBzdG9wRWxlbWVudCwgUmVuZGVyQm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdo
ZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQogewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
ayogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0byog
cmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJl
bmRlcmVyLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJs
ZSA9IHJlbmRlcmVyLT5sYXllcigpID8gcmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBi
b3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50LCBz
dGFydEJveCwgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIs
IEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5l
clRleHRFbGVtZW50KCktPnJlbmRlcmVyKCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxh
eWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSks
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9sbGFi
bGUgPSBsYXllciA/IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRy
OworICAgIGlmIChib3hMYXllclNjcm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3Jv
bGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRl
ckJsb2NrRmxvdzo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyLCBzdG9wRWxlbWVudCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAKaW5kZXggN2MwMWYwMjBmZTgyLi41OTIwZDU4ZjIwYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1
ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgpAQCAt
NjAwLDIwICs2MDEsMjQgQEAgc3RhdGljIHZvaWQgd3JpdGVMYXllcihUZXh0U3RyZWFtJiB0cywg
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBMYXlvdXRSZWMKICAgICB9CiAKICAgICBp
ZiAobGF5ZXIucmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkgewotICAgICAgICBpZiAobGF5
ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwg
bGF5ZXIuc2Nyb2xsT2Zmc2V0KCkueCgpOwotICAgICAgICBpZiAobGF5ZXIuc2Nyb2xsT2Zmc2V0
KCkueSgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxZICIgPDwgbGF5ZXIuc2Nyb2xsT2Zm
c2V0KCkueSgpOwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChs
YXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSkgIT0gbGF5ZXIuc2Nyb2xsV2lkdGgoKSkK
LSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBsYXllci5zY3JvbGxXaWR0aCgp
OwotICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5k
ZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IGxheWVyLnNjcm9sbEhlaWdodCgpKQotICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8PCBsYXllci5zY3JvbGxIZWlnaHQoKTsKKyAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkp
IHsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSkK
KyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFkgIiA8PCBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgIGlmIChsYXllci5y
ZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgp
KSAhPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFdpZHRoKCkpCisgICAgICAgICAgICAgICAgdHMg
PDwgIiBzY3JvbGxXaWR0aCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lkdGgoKTsKKyAg
ICAgICAgICAgIGlmIChsYXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRl
ckJveCgpLT5jbGllbnRIZWlnaHQoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQo
KSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdodCAiIDw8IHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsSGVpZ2h0KCk7CisgICAgICAgIH0KICNpZiBQTEFURk9STShNQUMpCiAgICAg
ICAgIFNjcm9sbGJhclRoZW1lJiBzY3JvbGxiYXJUaGVtZSA9IFNjcm9sbGJhclRoZW1lOjp0aGVt
ZSgpOwotICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYgbGF5ZXIu
aGFzVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgU2Nyb2xsYmFyVGhlbWVNYWMm
IG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRoZW1lTWFjKj4oJnNjcm9sbGJhclRo
ZW1lKTsKLSAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJUTCgqbGF5
ZXIudmVydGljYWxTY3JvbGxiYXIoKSkpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxi
YXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKCFzY3JvbGxi
YXJUaGVtZS5pc01vY2tUaGVtZSgpICYmIHNjcm9sbGFibGVMYXllci0+aGFzVmVydGljYWxTY3Jv
bGxiYXIoKSkgeworICAgICAgICAgICAgICAgIFNjcm9sbGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9
ICpzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+KCZzY3JvbGxiYXJUaGVtZSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1hY1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpzY3JvbGxhYmxl
TGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgICAgICAgICB0cyA8PCAi
IHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICNlbmRpZgogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKaW5kZXggYjEwMzNkYTA3OTMwLi5mZjQyMjIwNzMyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSGl0
VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMzLDEwIEBAIHZvaWQg
UmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSZWN0KHNu
YXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
KTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5jYW5SZXNpemUoKSkK
LSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5k
ZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIGlm
IChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChs
YXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0KIH0KIAogdm9pZCBS
ZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVybGFwcGVkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDdiYTY4ZDRkMDJjNC4uY2JkODRjNTMy
OGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgpAQCAtMTgzOCw3ICsxODM5LDggQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3Jv
bGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVsZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAg
aWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsKKyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKQEAgLTI4NTksOCArMjg2MSwx
MCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxlQXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFy
ZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RC
b3g+KHJlbmRlckJveCkpCiAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxS
ZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChyZW5kZXJCb3gubGF5ZXIoKSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YSA9IHJlbmRlckJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAg
fSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggOWYzYjZlMGVhM2EyLi5kMGNjMDdi
ZjA4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAy
MC0xMi0xMSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKwor
ICAgICAgICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVy
TGF5ZXI6CisgICAgICAgIFRoZSBnb2FsIGlzIHRvIG1vdmUgYWxsIHNjcm9sbGluZy9vdmVyZmxv
dyBoYW5kbGluZworICAgICAgICBvdXQgb2YgUmVuZGVyTGF5ZXIsIHRvIHN0cmVhbWxpbmUgaXRz
IGludGVyZmFjZSBhbmQKKyAgICAgICAgbWFrZSBpdCByZS11c2FibGUgZm9yIGxheWVyIHR5cGVz
IHRoYXQgZG8gbm90IG5lZWQKKyAgICAgICAgbm9yIHN1cHBvcnQgc2Nyb2xsaW5nL292ZXJmbG93
LiAKKyAKKyAgICAgICAgU3F1YXNoZWQgZm9yIEVXUyB0ZXN0aW5nLgorCisgICAgICAgICogRE9N
L0RPTUhUTUwubW06CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9sbFhPZmZzZXRdKToK
KyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2Nyb2xsWU9mZnNldF0pOgorICAgICAgICAoLVtE
T01IVE1MRWxlbWVudCBzZXRTY3JvbGxYT2Zmc2V0OnNjcm9sbFlPZmZzZXQ6YWRqdXN0Rm9ySU9T
Q2FyZXQ6XSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOl0pOgorICAgICAgICAoLVtXZWJGcmFtZSBf
c2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6d2l0aEluc2V0Ol0pOgorCiAyMDIwLTEyLTExICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJFR1JFU1NJT04g
KHIyNzAzMTUpOiBXZWJLaXRMZWdhY3kgYnVpbGRzIGZhaWwgd2l0aCAidW5pZmRlZiIgZXJyb3Ig
bWVzc2FnZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbQppbmRleCA4NTg0YzIz
MWZlZjguLmNiYzU2N2UzYmU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwu
bW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzgsMTQgQEAKICAg
ICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhh
c092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBkb3duY2Fz
dDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCku
eCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVu
ZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOwogfQogCiAtIChpbnQpc2Nyb2xsWU9mZnNl
dApAQCAtOTEsNyArOTksMTQgQEAKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJl
bmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlciku
bGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8
V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNj
cm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOwog
fQogCiAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5
CkBAIC0xMTEsMTEgKzEyNiwxNCBAQAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvKiBsYXll
ciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpOworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAgIGlmIChhZGp1c3RGb3JJ
T1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
Zyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29yZTo6U2Nyb2xsT2Zmc2V0
KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFdlYkNvcmU6OlNjcm9s
bENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsK
ICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9CiAKIC0gKHZvaWQpYWJz
b2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3IDooaW50ICopaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggM2ZlYTE2MDgz
OTJmLi4xMmQxNTllYzhmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRl
eHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
TGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldp
ZGdldC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBAIC03
MzgsOSArNzM5LDEwIEBAIHN0YXRpYyBOU1VSTCAqY3JlYXRlVW5pcXVlV2ViRGF0YVVSTCgpOwog
I2Vsc2UKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVyKCktPmVuY2xv
c2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAgbGF5ZXItPnNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c2Nyb2xsUmVj
dFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCksIGluc2lkZUZp
eGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2ViQ29yZTo6U2Ny
b2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jvc3NPcmlnaW5T
Y3JvbGxpbmc6OlllcyB9KTsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAg
ICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnVwZGF0ZUFwcGVhcmFu
Y2UoKTsKICAgICAgICAgfQpAQCAtNzU4LDkgKzc2MCwxMCBAQCBzdGF0aWMgTlNVUkwgKmNyZWF0
ZVVuaXF1ZVdlYkRhdGFVUkwoKTsKICAgICBpZiAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZS0+cmVu
ZGVyZXIoKSkgewogICAgICAgICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+
ZW5jbG9zaW5nTGF5ZXIoKTsKICAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBsYXll
ci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAg
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3Jv
bGxSZWN0VG9WaXNpYmxlKFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5z
aWRlRml4ZWQsIHsgV2ViQ29yZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3Jl
OjpTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFs
aWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09y
aWdpblNjcm9sbGluZzo6WWVzfSk7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKIAogICAgICAgICAgICAg
YXV0byBjb3JlRnJhbWUgPSBjb3JlKHNlbGYpOwogICAgICAgICAgICAgaWYgKGNvcmVGcmFtZSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGVmYjhlMjg3YzVmNC4uODZjYTIwM2Zk
ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAt
MTItMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgU2VwYXJhdGUgc2Nyb2xsaW5nIGNvZGUgb3V0IG9mIFJlbmRlckxheWVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDMwNQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE92ZXJoYXVsIFJlbmRlckxh
eWVyOgorICAgICAgICBUaGUgZ29hbCBpcyB0byBtb3ZlIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cg
aGFuZGxpbmcKKyAgICAgICAgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4g
CisgCisgICAgICAgIFNxdWFzaGVkIGZvciBFV1MgdGVzdGluZy4KKworICAgICAgICAqIFdlYlZp
ZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6Z2VzdHVyZSk6CisKIDIwMjAtMTItMDkgIENhdGhp
ZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFN1cHBvcnQgb3ZlcnNj
cm9sbC1iZWhhdmlvciBwYXJzaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4
IDVkMzFjNzU2M2I5OC4uYzQ1YzllZTkxMjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3B1cE1lbnVXaW4u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+
CkBAIC0yMDQ4LDggKzIwNDksMTEgQEAgYm9vbCBXZWJWaWV3OjpnZXN0dXJlKFdQQVJBTSB3UGFy
YW0sIExQQVJBTSBsUGFyYW0pCiAgICAgICAgICAgICAvLyBXZSBtaWdodCBkaXJlY3RseSBoaXQg
dGhlIGRvY3VtZW50IHdpdGhvdXQgaGl0dGluZyBhbnkgbm9kZXMKICAgICAgICAgICAgIGNvcmVG
cmFtZS0+dmlldygpLT5zY3JvbGxCeShsb2dpY2FsU2Nyb2xsRGVsdGEpOwogICAgICAgICAgICAg
c2Nyb2xsZWRBcmVhID0gY29yZUZyYW1lLT52aWV3KCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KGxvZ2ljYWxTY3JvbGxE
ZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
IXNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9sbERlbHRhLCAmc2Nyb2xsZWRBcmVhKTsK
KyAgICAgICAgfQogCiAgICAgICAgIGlmICghKFVwZGF0ZVBhbm5pbmdGZWVkYmFja1B0cigpICYm
IEJlZ2luUGFubmluZ0ZlZWRiYWNrUHRyKCkgJiYgRW5kUGFubmluZ0ZlZWRiYWNrUHRyKCkpKSB7
CiAgICAgICAgICAgICBDbG9zZUdlc3R1cmVJbmZvSGFuZGxlUHRyKCkoZ2VzdHVyZUhhbmRsZSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416978</attachid>
            <date>2021-01-05 02:02:19 -0800</date>
            <delta_ts>2021-01-13 15:27:52 -0800</delta_ts>
            <desc>Patch, v19</desc>
            <filename>bug-60305-20210105110217.patch</filename>
            <type>text/plain</type>
            <size>295757</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI1NmYyZWEzNTRkYjE5
NGM1YTY3MDJkMjJmM2U4MGM2YTIzNmFiMi4uOWI2MzU5Njk3ZmNlN2Y1NTI3YTg2YWNjNjA1OWIy
Njk4MWIzYzc0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAyMS0wMS0wNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXIsIGJ5IG1v
dmluZyBhbGwgc2Nyb2xsaW5nL292ZXJmbG93CisgICAgICAgIGhhbmRsaW5nIG91dCBvZiBSZW5k
ZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0
IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Ig
c3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpn
ZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyBjb25zdCk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2Nyb2xsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVl
IGNvbnN0KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNlbGVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3gpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9s
bFRvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRl
bnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdl
ZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9s
bFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpy
ZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Ny
b2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRl
QmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRp
b25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVy
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFt
ZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZp
c2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om9m
ZnNldEZyb21SZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9sbGJhcnMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9s
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50
R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJl
c1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZs
b3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05v
ZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Ny
b2xsaW5nTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
c092ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVX
aGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENv
cm5lclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
VmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJP
ZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0
aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhh
c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJm
bG93TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpz
dHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RL
bm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5G
cmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5
ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y2xlYXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OiBjb25zdCk6CisKIDIwMjAtMTItMzEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTEZDXVtJRkNdIEhvcml6b250YWwgcGFkZGluZy9ib3JkZXIgbWFrZXMgdGhl
IGlubGluZSBib3ggbm9uLWVtcHR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZTEw
YjRkYjAzMTA2ZTY4ZjU0MTIzYmNlODY2YWU2YjQzMDkzM2JlOC4uNThkYjBhMTIwZjFkZWRlZTRj
Nzg4NWEyMWZiMGM2MDdlNDMzNTg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDIxLTAxLTA1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBS
ZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPdmVyaGF1bCBSZW5kZXJMYXllciwgYnkgbW92aW5nIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cK
KyAgICAgICAgaGFuZGxpbmcgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICAqIERPTS9ET01IVE1MLm1tOiBBZGFwdCB0byBSZW5kZXJMYXllci9SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhIGludGVyZmFjZSBjaGFuZ2VzLgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzY3JvbGxYT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9s
bFlPZmZzZXRdKToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2V0U2Nyb2xsWE9mZnNldDpz
Y3JvbGxZT2Zmc2V0OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3
aXRoSW5zZXQ6XSk6CisKIDIwMjAtMTItMTkgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNb3ZlIEZyYW1lTG9hZGVyOjphcmVQbHVnaW5zRW5hYmxlZCB0byBGcmFtZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGY2NjQxYjM4YzJlYjc5YjQ1ODdjM2YxZWE1
MzFlYmRlNjVkMWMyMjguLmE1MTg2ZDgzZmMzMzliYWZhOTZiNTRkNDU4YzZlNGZmYzVjZGE1ODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wMS0w
NSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXIs
IGJ5IG1vdmluZyBhbGwgc2Nyb2xsaW5nL292ZXJmbG93CisgICAgICAgIGhhbmRsaW5nIG91dCBv
ZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBt
YWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAg
ICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDogQWRhcHQgdG8gUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBpbnRlcmZh
Y2UgY2hhbmdlcy4KKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIxLTAxLTAyICBG
dWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5d
W0R1bXBSZW5kZXJUcmVlXSBTb21lIEpTIHRlc3RzIGFyZSB0aW1pbmcgb3V0IG9ubHkgaW4gRGVi
dWcgYnVpbGRzIHNpbmNlIHIyNjkxNTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDAyMzAwZDk4
Nzg1MWFiYTA0ZDdkMzNkNTZkMDBiYzY5MDBmZTVhY2MuLjQ2MGU2NWZiNzhhM2JjNTVlOTYxMTdh
MDlhODM5ODhlYmZiZjU5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtODMsNiArODMsNyBA
QAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zOTA2LDcgKzM5MDcs
NyBAQCBTY3JvbGxhYmxlQXJlYSogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xs
YWJsZUFyZWFJZlNjcm9sbGFibGUoKSBjb25zdAogICAgIGlmICghYm94LmNhbkJlU2Nyb2xsZWRB
bmRIYXNTY3JvbGxhYmxlQXJlYSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBib3gubGF5ZXIoKTsKKyAgICByZXR1cm4gYm94LmxheWVyKCkgPyBib3gubGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdApAQCAtMzkxOSw3
ICszOTIwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1F
OiBpcyBwb2ludCBhIFNjcm9sbE9mZnNldCBvciBTY3JvbGxQb3NpdGlvbj8gVGVzdCBpbiBSVEwg
b3ZlcmZsb3cuCi0gICAgYm94LmxheWVyKCktPnNjcm9sbFRvT2Zmc2V0KHBvaW50KTsKKyAgICBi
b3gubGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChw
b2ludCk7CiB9CiAKICNpZiBFTkFCTEUoTUFUSE1MKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IDljYWEzYzhlNmVmN2Y2ZWQ5ZjJkNjMzZDc0Mjc3YWNjMTM5YTIzYjguLjhkNzExYjY1NGZkNmVh
ZjJjNzk0MGM0Y2YwZGY5ZjY5NmYzZGQxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTky
LDYgKzkyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRl
ci5oIgpAQCAtMTMzNSw4ICsxMzM2LDggQEAgdm9pZCBFbGVtZW50OjpzZXRTY3JvbGxMZWZ0KGlu
dCBuZXdMZWZ0KQogICAgICAgICBpbnQgY2xhbXBlZExlZnQgPSBjbGFtcFRvSW50ZWdlcihuZXdM
ZWZ0ICogcmVuZGVyZXItPnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgQW5pbWF0
ZWRTY3JvbGwgYW5pbWF0ZWQgPSB1c2VTbW9vdGhTY3JvbGxpbmcoU2Nyb2xsQmVoYXZpb3I6OkF1
dG8sIHRoaXMpID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsKICAg
ICAgICAgcmVuZGVyZXItPnNldFNjcm9sbExlZnQoY2xhbXBlZExlZnQsIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVkKTsKLSAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyZXItPmxheWVyKCkpCi0gICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/
IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cikKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1
ZSk7CiAgICAgfQogfQogCkBAIC0xMzU5LDggKzEzNjAsOCBAQCB2b2lkIEVsZW1lbnQ6OnNldFNj
cm9sbFRvcChpbnQgbmV3VG9wKQogICAgICAgICBpbnQgY2xhbXBlZFRvcCA9IGNsYW1wVG9JbnRl
Z2VyKG5ld1RvcCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAg
IEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5nKFNjcm9sbEJlaGF2
aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmltYXRlZFNjcm9sbDo6
Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxUb3AoY2xhbXBlZFRvcCwgU2Nyb2xsVHlw
ZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgYW5pbWF0ZWQpOwotICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSByZW5kZXJlci0+bGF5ZXIoKSkKLSAgICAg
ICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZSh0
cnVlKTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlcmVyLT5sYXll
cigpID8gcmVuZGVyZXItPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQorICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRTY3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0
ZSh0cnVlKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggOWI2N2QyOTdlMTkxZjJlNGNjNmYzYmRkZmUzMTFmMmQ2NTM1MDAyNS4uODRk
ZTk4YzhiYWU2NDJkYjc3MjkyNzczYWQ3MDQ5MzY2NGY4ODkyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgpAQCAtMjM5MSw5ICsyMzkyLDEwIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJldmVhbFNl
bGVjdGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlIHJldmVhbE1vZGUsIGNvbnN0IFNjcm9sCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0
YXJ0LmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkpIHsKICAg
ICAgICAgICAgIGlmICghbV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KSB7Ci0gICAgICAgICAgICAg
ICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAg
ICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwogICAgICAgICAgICAgICAgIGxheWVyLT5z
Y3JvbGxSZWN0VG9WaXNpYmxlKHJlY3QsIGluc2lkZUZpeGVkLCB7IHJldmVhbE1vZGUsIGFsaWdu
bWVudCwgYWxpZ25tZW50LCBTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7
Ci0gICAgICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwogICAgICAgICAgICAgICAgIHVwZGF0ZUFwcGVh
cmFuY2UoKTsKICAgICAgICAgICAgICAgICBpZiAobV9kb2N1bWVudC0+cGFnZSgpKQogICAgICAg
ICAgICAgICAgICAgICBtX2RvY3VtZW50LT5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLm5vdGlm
eVJldmVhbGVkU2VsZWN0aW9uQnlTY3JvbGxpbmdGcmFtZSgqbV9kb2N1bWVudC0+ZnJhbWUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKaW5kZXggMGFkZjdk
MTY0ZTJlNGUyYjBmYjExM2YwM2ExYmQzYTczYzI3MTI3NS4uMmY4Y2I2OWJlMzcwZjRmYjZhMjRk
ZDYwMzAyNDg1NzhjNzUwODM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWFycXVlZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVF
bGVtZW50LmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2lu
Y2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJx
dWVlLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KIApAQCAtMTc1LDcgKzE3
NiwxMCBAQCBSZW5kZXJNYXJxdWVlKiBIVE1MTWFycXVlZUVsZW1lbnQ6OnJlbmRlck1hcnF1ZWUo
KSBjb25zdAogewogICAgIGlmICghcmVuZGVyZXIoKSB8fCAhcmVuZGVyZXIoKS0+aGFzTGF5ZXIo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHJlbmRlckJveE1vZGVsT2Jq
ZWN0KCktPmxheWVyKCktPm1hcnF1ZWUoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBy
ZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlm
ICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
c2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCAyZGU0M2Rh
ZDVhOWZiNmQ4YzU5MWQ3ZmZmZDQ0ZTFjNDQyNjc4NmEzLi5jMDJhOGQ3NmMyMTBlMjc5NDczNWQx
ZWQzMWEyYWUwM2YzOTMwZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjUzLDkgKzI1NCwxMSBAQCB2b2lkIFRleHRG
aWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJMYXllcikKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYXV0byogaW5uZXJMYXllclNjcm9sbGFibGUgPSBpbm5lckxh
eWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICBib29sIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KCpyZW5k
ZXJlcikuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgU2Nyb2xsT2Zmc2V0
IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlubmVyTGF5ZXItPnNj
cm9sbFdpZHRoKCksIDApOwotICAgIGlubmVyTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9m
ZnNldCk7CisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uID8gMCA6IGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxXaWR0aCgpLCAwKTsKKyAgICBp
bm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0KTsKIAogI2lm
IEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNsb3NlU3VnZ2VzdGlvbnMoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBjODJmZjdjNWQzZjZiYzg4NDU4Mjk0YmZm
MWI3MDBhMzFlMGJmYTFlLi4xNTFlNzVhNTc2YWY5ZWM1MGY3MzI2Y2EyMTY1MDVkMDYxNThlNDdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04MCw2ICs4MCw3IEBACiAj
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xNTAxLDcgKzE1MDIsNyBA
QCBPcHRpb25hbDxDdXJzb3I+IEV2ZW50SGFuZGxlcjo6c2VsZWN0Q3Vyc29yKGNvbnN0IEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgYm9vbCBzaAogICAgICAgICAgICAgaWYgKGF1dG8qIGxheWVyID0g
ZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgaW5SZXNpemVyID0gbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wo
cm91bmRlZEludFBvaW50KHJlc3VsdC5sb2NhbFBvaW50KCkpKTsKICAgICAgICAgICAgICAgICBp
ZiAoaW5SZXNpemVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSA/IHNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpIDogc291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsYXllci0+cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkgPyBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTE4NTEsOSArMTg1Miw5IEBAIFNjcm9s
bGFibGVBcmVhKiBFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKSkgewotICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVy
Vmlld0xheWVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAg
ICAgICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IGxheWVyLT5lbmNsb3Np
bmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpObykpIHsKKyAgICAgICAgICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBlbmNs
b3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTI5ODAsNyArMjk4MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2
ZW50SW5BcHByb3ByaWF0ZUVuY2xvc2luZ0JveChOb2RlKiBzdGFydE5vZGUsIGNvCiAKICAgICBS
ZW5kZXJCb3gqIGN1cnJlbnRFbmNsb3NpbmdCb3ggPSAmaW5pdGlhbEVuY2xvc2luZ0JveDsKICAg
ICB3aGlsZSAoY3VycmVudEVuY2xvc2luZ0JveCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIq
IGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAo
YXV0byogYm94TGF5ZXIgPSBjdXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpID8gY3VycmVudEVu
Y2xvc2luZ0JveC0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAg
ICAgICAgIGF1dG8gcGxhdGZvcm1FdmVudCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3Jt
RXZlbnQoKTsKICAgICAgICAgICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKICAgICAgICAg
ICAgIGlmIChwbGF0Zm9ybUV2ZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXgg
ZWVkNDUzYTYzZTJmYmE0ZDhiNWUyOTliZTk3MjI4NGU1OWQ5MjcwOC4uNWJkMWVhMTk5ODI2YWZm
YjllNjk3OGY4N2JmNzFhOGEwOWRmNjE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApA
QCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jvb3QuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJT
Y3JvbGxiYXJQYXJ0LmgiCkBAIC0yNTkzLDcgKzI1OTQsOCBAQCB2b2lkIEZyYW1lVmlldzo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbGluZygpCiAgICAgaWYgKCFsYXlvdXRDb250ZXh0
KCkuaXNMYXlvdXROZXN0ZWQoKSAmJiBoYXNWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cygpKSB7
CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gdGhpcy0+cmVuZGVyVmlldygp
KSB7CiAgICAgICAgICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAgICAgICAgICAgIHJl
bmRlclZpZXctPmxheWVyKCktPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpOworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHJlbmRlclZpZXct
PmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxh
eWVyLT51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTMyMDgsNiArMzIxMCwxMCBAQCB2b2lkIEZyYW1lVmlldzo6c2Nyb2xs
VG9BbmNob3IoKQogCiAgICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICIg
YW5jaG9yIG5vZGUgcmVjdCAiIDw8IHJlY3QpOwogCisgICAgYXV0byogZW5jbG9zaW5nTGF5ZXIg
PSBhbmNob3JOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOworICAgIGlmIChlbmNs
b3NpbmdMYXllciAmJiAhZW5jbG9zaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IGVuY2xvc2luZ0xheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBT
Y3JvbGwgbmVzdGVkIGxheWVycyBhbmQgZnJhbWVzIHRvIHJldmVhbCB0aGUgYW5jaG9yLgogICAg
IC8vIEFsaWduIHRvIHRoZSB0b3AgYW5kIHRvIHRoZSBjbG9zZXN0IHNpZGUgKHRoaXMgbWF0Y2hl
cyBvdGhlciBicm93c2VycykuCiAgICAgaWYgKGFuY2hvck5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKQEAgLTM4NjAsNyArMzg2NiwxMSBAQCBTY3Jv
bGxhYmxlQXJlYSogRnJhbWVWaWV3OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIElu
dFJlY3QgRnJhbWVWaWV3OjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApA
QCAtNDMyNCw4ICs0MzM0LDExIEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgICAgIHJl
bmRlcmVyID0gcmVuZGVyZXItPnBhcmVudCgpOwogCiAgICAgcm9vdExheWVyLT5wYWludChjb250
ZXh0LCBkaXJ0eVJlY3QsIExheW91dFNpemUoKSwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlciwg
eyB9LCBzZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID09IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3k6OkFueU9yaWdpbiA/IFJlbmRlckxheWVyOjpTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4gOiBSZW5kZXJMYXllcjo6U2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QWNjZXNz
aWJsZU9yaWdpbk9ubHksIGV2ZW50UmVnaW9uQ29udGV4dCk7Ci0gICAgaWYgKHJvb3RMYXllci0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIWV2ZW50UmVnaW9uQ29udGV4dCkK
LSAgICAgICAgcm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZVJvb3RMYXllciA9IHJvb3RMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZVJvb3RMYXllci0+Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkg
JiYgIWV2ZW50UmVnaW9uQ29udGV4dCkKKyAgICAgICAgICAgIHNjcm9sbGFibGVSb290TGF5ZXIt
PnBhaW50T3ZlcmxheVNjcm9sbGJhcnMoY29udGV4dCwgZGlydHlSZWN0LCBtX3BhaW50QmVoYXZp
b3IsIHJlbmRlcmVyKTsKKyAgICB9CiAKICAgICBkaWRQYWludENvbnRlbnRzKGNvbnRleHQsIGRp
cnR5UmVjdCwgcGFpbnRpbmdTdGF0ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5h
dmlnYXRpb24uY3BwCmluZGV4IDM4ZmI0OTcxZDJhMzI5NDM3ZTc0NDAzNzI0YThkMjFiZjFkN2Uy
ZWEuLjgwOWJjMTkxMzQ3MDA3ODc0MzU5MzY4NDViNmNkYTU5MzVlNWExZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5NCw3ICszOTUsOCBA
QCBib29sIHNjcm9sbEluRGlyZWN0aW9uKE5vZGUqIGNvbnRhaW5lciwgRm9jdXNEaXJlY3Rpb24g
ZGlyZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsQnlSZWN1
cnNpdmVseShJbnRTaXplKGR4LCBkeSkpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gY29udGFpbmVyLT5yZW5kZXJCb3goKS0+ZW5jbG9zaW5nTGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVs
eShJbnRTaXplKGR4LCBkeSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMzJkMzJlNTliMjQyNjUyODY3MTBhNWYzZjcw
NTNlMTgxNmFkOWUzYi4uOGE0Y2E3YmNkMDQxZWZmYmI2ZjAxMzkxNzUyN2NmYmY1OGUzMWQ1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTU3LDYgKzU3LDcgQEAKICNpbXBv
cnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5oIgogI2ltcG9ydCAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW1wb3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2lt
cG9ydCAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgpAQCAtODE5LDE0ICs4MjAsMTUgQEAgdm9p
ZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFz
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRv
d25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0
byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXll
cigpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCk7CiAKLSAgICBhdXRvIG9sZFNjcm9sbFR5cGUgPSBsYXllci5jdXJyZW50U2Ny
b2xsVHlwZSgpOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/
IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOwotICAgIGxheWVy
LnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7Ci0gICAgbGF5ZXIuc2V0
Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CisgICAgYXV0byBvbGRTY3JvbGxUeXBl
ID0gc2Nyb2xsYWJsZUxheWVyLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNjcm9sbGFibGVM
YXllci0+c2V0Q3VycmVudFNjcm9sbFR5cGUoaXNVc2VyU2Nyb2xsID8gU2Nyb2xsVHlwZTo6VXNl
ciA6IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYyk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0Q3VycmVudFNjcm9sbFR5cGUob2xkU2Nyb2xsVHlwZSk7CiAKLSAgICBsYXllci5kaWRF
bmRTY3JvbGwoKTsgLy8gRklYTUU6IFNob3VsZCB3ZSBhbHdheXMgY2FsbCB0aGlzPworICAgIHNj
cm9sbGFibGVMYXllci0+ZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlz
IGNhbGwgdGhpcz8KIH0KIAogdm9pZCBGcmFtZTo6cmVzZXRBbGxHZW9sb2NhdGlvblBlcm1pc3Np
b24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IGY2
NDhkNmUyMmIxNzZiMzk3MjI2YmY2OTk0Y2M2Yjg0ZDAyMmU4ZmMuLjFkNGM4NjExNzZmZWRlZjIw
NjRlMjIwMjM2MzkwMTQ1NjM4NDFkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVu
dEhhbmRsZXJNYWMubW0KQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckxheWVyLmgiCisjaW1w
b3J0ICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJMaXN0Qm94
LmgiCiAjaW1wb3J0ICJSZW5kZXJWaWV3LmgiCiAjaW1wb3J0ICJSZW5kZXJXaWRnZXQuaCIKQEAg
LTc5MSw3ICs3OTIsMTIgQEAgc3RhdGljIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYUZv
ckJveChSZW5kZXJCb3gmIGJveCkKICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4oYm94KSkKICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RCb3g+KCZib3gpOwogCi0gICAgcmV0dXJu
IGJveC5sYXllcigpOworICAgIGlmIChib3gubGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
ICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OwogfQogCiAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSB3cml0dGVuIGluIHRlcm1zIG9mIFNjcm9s
bGFibGVBcmVhOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggOGNhYjc2YWZlNTdkMDdmYTdkNmJiNmE0MTM5YjNl
OTUzY2ExY2YzNy4uZmIzYjFkMjk0NmQzYzMxOTI1NjM3NTBlMjNmN2U5MmJlZTIzMmE3OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC01OSw2ICs1OSw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtMTExMiw4ICsx
MTEzLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAvLyB6LWluZGV4LiBXZSBwYWludCBh
ZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xs
YmFycyB3aWxsCiAgICAgLy8gc2l0IGFib3ZlIHRoZSBiYWNrZ3JvdW5kL2JvcmRlci4KICAgICBp
ZiAoKHBoYXNlID09IFBhaW50UGhhc2U6OkJsb2NrQmFja2dyb3VuZCB8fCBwaGFzZSA9PSBQYWlu
dFBoYXNlOjpDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXIoKQotICAgICAgICAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRoaXMpICYmICFwYWludElu
Zm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0KSwgc25hcHBlZEludFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKKyAgICAgICAg
JiYgbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlICYmIHBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QoKnRo
aXMpICYmICFwYWludEluZm8ucGFpbnRSb290QmFja2dyb3VuZE9ubHkoKSkKKyAgICAgICAgbGF5
ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKHBhaW50SW5mby5j
b250ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgc25hcHBlZElu
dFJlY3QocGFpbnRJbmZvLnJlY3QpKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDb250
ZW50cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQpAQCAtMjAwNiw3ICsyMDA3LDEyIEBAIGJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvCiAgICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50
KGxvY2F0aW9uSW5Db250YWluZXIgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7
CisgICAgQVNTRVJUKGxheWVyKCkpOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhpdFRlc3RPdmVy
Zmxvd0NvbnRyb2xzKHJlc3VsdCwgcm91bmRlZEludFBvaW50KGxvY2F0aW9uSW5Db250YWluZXIg
LSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKSk7CiB9CiAKIE5vZGUqIFJlbmRlckJs
b2NrOjpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CkBAIC0yNTAyLDEwICsyNTA4LDIzIEBAIGludCBS
ZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBi
b29sIGZpcnN0TGluZSwgTGluCiAgICAgICAgIC8vICh0aGUgY29udGVudCBpbnNpZGUgdGhlbSBt
b3ZlcykuICBUaGlzIG1hdGNoZXMgV2luSUUgYXMgd2VsbCwgd2hpY2gganVzdCBib3R0b20tYWxp
Z25zIHRoZW0uCiAgICAgICAgIC8vIFdlIGFsc28gZ2l2ZSB1cCBvbiBmaW5kaW5nIGEgYmFzZWxp
bmUgaWYgd2UgaGF2ZSBhIHZlcnRpY2FsIHNjcm9sbGJhciwgb3IgaWYgd2UgYXJlIHNjcm9sbGVk
CiAgICAgICAgIC8vIHZlcnRpY2FsbHkgKGUuZy4sIGFuIG92ZXJmbG93OmhpZGRlbiBibG9jayB0
aGF0IGhhcyBoYWQgc2Nyb2xsVG9wIG1vdmVkKS4KLSAgICAgICAgYm9vbCBpZ25vcmVCYXNlbGlu
ZSA9IChsYXllcigpICYmIChsYXllcigpLT5tYXJxdWVlKCkgfHwgKGRpcmVjdGlvbiA9PSBIb3Jp
em9udGFsTGluZSA/IChsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNj
cm9sbE9mZnNldCgpLnkoKSAhPSAwKQotICAgICAgICAgICAgOiAobGF5ZXIoKS0+aG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IGxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKSAhPSAwKSkpKSB8fCAo
aXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkpOwotICAgICAgICAKLSAgICAgICAg
T3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2VsaW5lID8gT3B0aW9uYWw8aW50
PigpIDogaW5saW5lQmxvY2tCYXNlbGluZShkaXJlY3Rpb24pOworICAgICAgICBhdXRvIGlnbm9y
ZUJhc2VsaW5lID0gW3RoaXMsIGRpcmVjdGlvbl0oKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlm
IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIo
KSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgICAgICAgICAgaWYg
KCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExp
bmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3Jv
bGxiYXIoKSB8fCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICAgICAgfTsKKworICAgICAgICBP
cHRpb25hbDxpbnQ+IGJhc2VsaW5lUG9zID0gaWdub3JlQmFzZWxpbmUoKSA/IE9wdGlvbmFsPGlu
dD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKSB7CiAgICAgICAgICAgICAvLyBIaXN0b3Jp
Y2FsbHksIHdlIGRpZCB0aGlzIGNoZWNrIGZvciBhbGwgYmFzZWxpbmVzLiBCdXQgd2UgY2FuJ3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggMjEz
Y2VlM2RlZWFjYjQyNWY2MTYyZTQ0MjAyNDdlNjVhYTlmNzE4YS4uNWM5MWYzZGE1ZTY5NzQyMWQ5
MjE5NjQxNWRlNDJlNzY1ZDVhZGVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKQEAgLTM0OSw3ICszNDksOCBAQCB2b2lkIFJlbmRlckJsb2NrRmxv
dzo6Y29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdp
ZHRoLAogCiAgICAgaWYgKCFzdHlsZSgpLmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5JbmxpbmUoKSkg
ewogICAgICAgICAvLyBBIGhvcml6b250YWwgbWFycXVlZSB3aXRoIGlubGluZSBjaGlsZHJlbiBo
YXMgbm8gbWluaW11bSB3aWR0aC4KLSAgICAgICAgaWYgKGxheWVyKCkgJiYgbGF5ZXIoKS0+bWFy
cXVlZSgpICYmIGxheWVyKCktPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCisgICAgICAgIGF1
dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgp
IDogbnVsbHB0cjsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5
ZXItPm1hcnF1ZWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFs
KCkpCiAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSAwOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCBlZDlmYTM0OTg2MWY2ZWEwOWMxY2FlMDdh
YjlmOGI0Y2VhY2JiY2I4Li42Mzc1OTFhYjIyOGU2YjYwYjgyYjcyOTBmNjA4ZTAxMzc4YTNmYTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtNjMsNiArNjMsNyBA
QAogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNs
dWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKQEAgLTMxOSwxMCArMzIwLDEyIEBAIHZvaWQgUmVuZGVyQm94OjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgLy8g
SWYgb3VyIHpvb20gZmFjdG9yIGNoYW5nZXMgYW5kIHdlIGhhdmUgYSBkZWZpbmVkIHNjcm9sbExl
ZnQvVG9wLCB3ZSBuZWVkIHRvIGFkanVzdCB0aGF0IHZhbHVlIGludG8gdGhlCiAgICAgLy8gbmV3
IHpvb21lZCBjb29yZGluYXRlIHNwYWNlLgogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSAmJiBs
YXllcigpICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gbmV3U3R5
bGUuZWZmZWN0aXZlWm9vbSgpKSB7Ci0gICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uID0gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgZmxvYXQgem9vbVNjYWxl
RmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24uc2NhbGUoem9vbVNjYWxlRmFjdG9yKTsKLSAg
ICAgICAgbGF5ZXIoKS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9u
KTsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkpIHsKKyAgICAgICAgICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uID0g
c2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOworICAgICAgICAgICAgZmxvYXQgem9v
bVNjYWxlRmFjdG9yID0gbmV3U3R5bGUuZWZmZWN0aXZlWm9vbSgpIC8gb2xkU3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKKyAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpvb21TY2FsZUZh
Y3Rvcik7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBPdXIg
b3BhcXVlbmVzcyBtaWdodCBoYXZlIGNoYW5nZWQgd2l0aG91dCB0cmlnZ2VyaW5nIGxheW91dC4K
QEAgLTU3MSwxMiArNTc0LDE0IEBAIGludCBSZW5kZXJCb3g6OnNjcm9sbEhlaWdodCgpIGNvbnN0
CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbExlZnQoKSBjb25zdAogewotICAgIHJldHVybiBoYXNP
dmVyZmxvd0NsaXAoKSAmJiBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKS54KCkg
OiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICByZXR1cm4gKGhhc092ZXJmbG93Q2xpcCgpICYm
IHNjcm9sbGFibGVMYXllcikgPyBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueCgp
IDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsVG9wKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbFBvc2l0aW9u
KCkueSgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuIChoYXNPdmVyZmxvd0Ns
aXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlv
bigpLnkoKSA6IDA7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpyZXNldExvZ2ljYWxIZWlnaHRCZWZv
cmVMYXlvdXRJZk5lZWRlZCgpCkBAIC01OTAsMzEgKzU5NSwzOCBAQCBzdGF0aWMgdm9pZCBzZXR1
cFdoZWVsRXZlbnRNb25pdG9yKFJlbmRlckxheWVyJiBsYXllcikKICAgICBQYWdlJiBwYWdlID0g
bGF5ZXIucmVuZGVyZXIoKS5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLmlzTW9uaXRvcmluZ1doZWVs
RXZlbnRzKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBsYXllci5zY3JvbGxBbmltYXRvcigpLnNl
dFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFT
U0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgYXV0byYgc2Nyb2xsQW5pbWF0b3IgPSBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbEFuaW1hdG9yKCk7CisgICAgc2Nyb2xsQW5pbWF0b3Iuc2V0V2hl
ZWxFdmVudFRlc3RNb25pdG9yKHBhZ2Uud2hlZWxFdmVudFRlc3RNb25pdG9yKCkpOwogfQogCiB2
b2lkIFJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCwgU2Nyb2xsVHlwZSBzY3Jv
bGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQp
CiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0
dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAg
ICBsYXllcigpLT5zY3JvbGxUb1hQb3NpdGlvbihuZXdMZWZ0LCBzY3JvbGxUeXBlLCBjbGFtcGlu
ZywgYW5pbWF0ZWQpOworICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YUG9zaXRpb24obmV3
TGVmdCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJC
b3g6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKIHsKICAgICBpZiAo
IWhhc092ZXJmbG93Q2xpcCgpIHx8ICFsYXllcigpKQogICAgICAgICByZXR1cm47CisgICAgYXV0
byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
OwogICAgIHNldHVwV2hlZWxFdmVudE1vbml0b3IoKmxheWVyKCkpOwotICAgIGxheWVyKCktPnNj
cm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
KyAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWVBvc2l0aW9uKG5ld1RvcCwgc2Nyb2xsVHlw
ZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbFBv
c2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCiB7
CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAgICAgcmV0dXJu
OworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigpKTsKLSAgICBs
YXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFBvc2l0aW9uKHBvc2l0
aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckJv
eDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0CkBAIC04MjYsMTIgKzgzOCwxOCBAQCBib29sIFJl
bmRlckJveDo6aW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgY29uc3QKIAogaW50IFJl
bmRlckJveDo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlu
Y2x1ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IGxheWVyKCktPnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVy
KCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVy
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5jbHVkZVZlcnRpY2FsU2Nyb2xsYmFy
U2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOwog
fQogCiBpbnQgUmVuZGVyQm94Ojpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaW5jbHVkZUhvcml6b250YWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigpLT5o
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBp
ZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1
ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSgpID8gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCkgOiAwOwogfQogCiBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3Jv
bGxiYXJMb2dpY2FsV2lkdGgoKSBjb25zdApAQCAtODM5LDEzICs4NTcsMTYgQEAgaW50IFJlbmRl
ckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKICAgICBpZiAoIWhh
c092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsK
ICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewot
ICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxlTGF5ZXIsIHNjcm9sbGFibGVMYXll
cik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXItPmhhc1ZlcnRpY2FsU2Nyb2xsYmFy
KCkpOwogICAgICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOwogICAgIH0KIAog
ICAgIGlmICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiAoc3R5bGUoKS5vdmVyZmxvd1go
KSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpKSkgewot
ICAgICAgICBBU1NFUlQobGF5ZXIoKSAmJiBsYXllcigpLT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNjcm9sbGFibGVMYXllciwgc2Nyb2xsYWJsZUxh
eWVyKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllci0+aGFzSG9yaXpvbnRhbFNjcm9s
bGJhcigpKTsKICAgICAgICAgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKICAg
ICB9CiAKQEAgLTg1NCw4ICs4NzUsOCBAQCBpbnQgUmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxi
YXJMb2dpY2FsV2lkdGgoKSBjb25zdAogCiBib29sIFJlbmRlckJveDo6c2Nyb2xsTGF5ZXIoU2Ny
b2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkKIHsKLSAgICBSZW5kZXJMYXll
ciogYm94TGF5ZXIgPSBsYXllcigpOwotICAgIGlmIChib3hMYXllciAmJiBib3hMYXllci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKSB7CisgICAgYXV0byogYm94
TGF5ZXJTY3JvbGxhYmxlID0gbGF5ZXIoKSA/IGxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXll
clNjcm9sbGFibGUtPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkg
ewogICAgICAgICBpZiAoc3RvcEVsZW1lbnQpCiAgICAgICAgICAgICAqc3RvcEVsZW1lbnQgPSBl
bGVtZW50KCk7CiAKQEAgLTg4NywxMiArOTA4LDEzIEBAIGJvb2wgUmVuZGVyQm94Ojpsb2dpY2Fs
U2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGwgPSBsYXllcigpOwogICAgIGlmIChsKSB7CisgICAg
ICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGwtPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgLy8gT24gTWFjIG9ubHkgd2UgcmVz
ZXQgdGhlIGlubGluZSBkaXJlY3Rpb24gcG9zaXRpb24gd2hlbiBkb2luZyBhIGRvY3VtZW50IHNj
cm9sbCAoZS5nLiwgaGl0dGluZyBIb21lL0VuZCkuCiAgICAgICAgIGlmIChncmFudWxhcml0eSA9
PSBTY3JvbGxCeURvY3VtZW50KQotICAgICAgICAgICAgc2Nyb2xsZWQgPSBsLT5zY3JvbGwobG9n
aWNhbFRvUGh5c2ljYWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNj
cm9sbEJ5RG9jdW1lbnQsIG11bHRpcGxpZXIpOworICAgICAgICAgICAgc2Nyb2xsZWQgPSBib3hM
YXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChTY3JvbGxJbmxpbmVEaXJl
Y3Rpb25CYWNrd2FyZCwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgU2Nyb2xsQnlEb2N1bWVudCwgbXVsdGlwbGllcik7CiAj
ZW5kaWYKLSAgICAgICAgaWYgKGwtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24s
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKKyAgICAgICAgaWYgKGJveExheWVy
U2Nyb2xsYWJsZS0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNjcm9sbGVkKSB7CkBAIC05MjEsNiArOTQzLDI3IEBAIGJv
b2wgUmVuZGVyQm94Ojppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAg
ICByZXR1cm4gY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wg
UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAg
ICAvLyBUaGUgUmVuZGVyVmlldyBpcyBhbHdheXMgZXhwZWN0ZWQgdG8gYmUgcG90ZW50aWFsbHkg
c2Nyb2xsYWJsZS4KKyAgICBpZiAoaXNSZW5kZXJWaWV3KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRS
ZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE92ZXJmbG93IGhhbmRs
aW5nIG5lZWRzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuCisgICAgaWYgKHNjcm9sbHNPdmVy
ZmxvdygpIHx8IGhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBSZXNpemUgaGFuZGxpbmcgbmVlZHMg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICBpZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBS
ZXNpemU6Ok5vbmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTWFycXVlZSBoYW5k
bGluZyBuZWVkcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLgorICAgIGlmIChpc0hUTUxNYXJx
dWVlKCkgJiYgc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5v
bmUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBG
SVhNRTogVGhpcyBpcyBiYWRseSBuYW1lZC4gb3ZlcmZsb3c6aGlkZGVuIGNhbiBiZSBwcm9ncmFt
bWF0aWNhbGx5IHNjcm9sbGVkLCB5ZXQgdGhpcyByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZS4K
IGJvb2wgUmVuZGVyQm94OjpjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIHsK
QEAgLTk5Nyw4ICsxMDQwLDggQEAgUmVuZGVyQm94KiBSZW5kZXJCb3g6OmZpbmRBdXRvc2Nyb2xs
YWJsZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogCiB2b2lkIFJlbmRlckJveDo6cGFuU2Nyb2xs
KGNvbnN0IEludFBvaW50JiBzb3VyY2UpCiB7Ci0gICAgaWYgKGxheWVyKCkpCi0gICAgICAgIGxh
eWVyKCktPnBhblNjcm9sbEZyb21Qb2ludChzb3VyY2UpOworICAgIGlmIChhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIp
CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFuU2Nyb2xsRnJvbVBvaW50KHNvdXJjZSk7CiB9
CiAKIGJvb2wgUmVuZGVyQm94OjpjYW5Vc2VPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0CkBAIC0x
MDI3LDcgKzEwNzAsMTEgQEAgU2Nyb2xsUG9zaXRpb24gUmVuZGVyQm94OjpzY3JvbGxQb3NpdGlv
bigpIGNvbnN0CiAgICAgICAgIHJldHVybiB7IDAsIDAgfTsKIAogICAgIEFTU0VSVChoYXNMYXll
cigpKTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Ny
b2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4geyAwLCAwIH07CisKKyAgICByZXR1cm4gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxQb3NpdGlvbigpOwogfQogCiBMYXlvdXRTaXplIFJlbmRlckJv
eDo6Y2FjaGVkU2l6ZUZvck92ZXJmbG93Q2xpcCgpIGNvbnN0CkBAIC0xNTkxLDkgKzE2MzgsMTAg
QEAgYm9vbCBSZW5kZXJCb3g6OmNvbXB1dGVCYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmYKICAgICBpZiAoIWdldEJhY2tncm91bmRQYWludGVk
RXh0ZW50KHBhaW50T2Zmc2V0LCBiYWNrZ3JvdW5kUmVjdCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPnNjcm9sbGluZ01heVJldmVhbEJh
Y2tncm91bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikgeworICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxpbmdNYXlSZXZlYWxCYWNr
Z3JvdW5kKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIHJldHVybiBm
b3JlZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoYmFja2dyb3VuZFJlY3QsIGJhY2tncm91
bmRPYnNjdXJhdGlvblRlc3RNYXhEZXB0aCk7CiB9CiAKQEAgLTE5MTAsMTAgKzE5NTgsMTAgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3g6Om92ZXJmbG93Q2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQm
IGxvY2F0aW9uLCBSZW5kZXJGcmFnbWUKICAgICBjbGlwUmVjdC5zZXRTaXplKGNsaXBSZWN0LnNp
emUoKSAtIExheW91dFNpemUoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwgYm9yZGVyVG9w
KCkgKyBib3JkZXJCb3R0b20oKSkpOwogCiAgICAgLy8gU3VidHJhY3Qgb3V0IHNjcm9sbGJhcnMg
aWYgd2UgaGF2ZSB0aGVtLgotICAgIGlmIChsYXllcigpKSB7CisgICAgaWYgKGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikgewogICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKQotICAgICAgICAgICAgY2xpcFJlY3QubW92ZShsYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKHJlbGV2YW5jeSksIDApOwotICAgICAgICBjbGlwUmVjdC5jb250cmFjdChsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKHJlbGV2YW5jeSksIGxheWVyKCktPmhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CisgICAgICAgICAgICBjbGlwUmVjdC5tb3ZlKHNj
cm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKKyAg
ICAgICAgY2xpcFJlY3QuY29udHJhY3Qoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKHJlbGV2YW5jeSksIHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodChyZWxldmFuY3kpKTsKICAgICB9CiAKICAgICByZXR1cm4gY2xpcFJlY3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKaW5kZXggOTZlNzJkNGY4NWJjNDkzZmI0NzIwYmNjMmUx
ODUwZTQwOGI0MWM4NC4uOGIyMzg5NDhiY2JlMzFmMTM1MDkzZmVhMDFmMzY4MTY3MjkxYWQ2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaApAQCAtNTYsNiArNTYsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB8fCAhc3R5bGUoKS5oYXNBdXRvVXNlZFpJbmRleCgpIHx8IGhhc1J1
bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKKyAgICBib29sIHJlcXVpcmVz
TGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdDsKICAgICBib29sIGJhY2tncm91bmRJc0tu
b3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0IGZp
bmFsOwogICAgIAogICAgIC8vIFJldHVybnMgZmFsc2UgZm9yIHRoZSBib2R5IHJlbmRlcmVyIGlm
IGl0cyBiYWNrZ3JvdW5kIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIHJvb3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAppbmRleCA4MzgyNTZj
MTFlZjI0ZmU0YmZkY2E3ZDZkZjEzNjk0ZGJmZWQ4ZmQwLi41YTI1OTE2MWIxZGNhNjEzNmY4YTY5
YmQ3Mzc4ZTI2YTczMjllYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3cuaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00ODksOCArNDkwLDEw
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0
cmFpbnRzKFN0aWNreVBvc2l0aW9uVmlld3BvCiAgICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVy
TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgPSBjb250YWluZXJSZWN0UmVsYXRp
dmVUb1Njcm9sbGluZ0FuY2VzdG9yLmxvY2F0aW9uKCkgLQogICAgICAgICAgICAgRmxvYXRTaXpl
KGVuY2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94
LnBhZGRpbmdMZWZ0KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJU
b3AoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgm
ZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgY29u
dGFpbmVyTG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xp
cHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBp
bmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yICs9IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5z
Y3JvbGxPZmZzZXQoKTsKKyAgICAgICAgfQogICAgICAgICBjb250YWluZXJSZWN0UmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yLnNldExvY2F0aW9uKGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVU
b1Njcm9sbGluZ0FuY2VzdG9yKTsKICAgICB9CiAgICAgY29uc3RyYWludHMuc2V0Q29udGFpbmlu
Z0Jsb2NrUmVjdChjb250YWluZXJSZWN0UmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yKTsKQEAg
LTUwNyw4ICs1MTAsMTAgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29tcHV0ZVN0aWNr
eVBvc2l0aW9uQ29uc3RyYWludHMoU3RpY2t5UG9zaXRpb25WaWV3cG8KICAgICBpZiAoZW5jbG9z
aW5nQ2xpcHBpbmdMYXllcikgewogICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3Jv
bGxpbmdBbmNlc3RvciAtPSBGbG9hdFNpemUoZW5jbG9zaW5nQ2xpcHBpbmdCb3guYm9yZGVyTGVm
dCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFkZGluZ0xlZnQoKSwKICAgICAgICAgICAgIGVu
Y2xvc2luZ0NsaXBwaW5nQm94LmJvcmRlclRvcCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdCb3gucGFk
ZGluZ1RvcCgpKTsKLSAgICAgICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWlu
aW5nQmxvY2spCi0gICAgICAgICAgICBzdGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdB
bmNlc3RvciArPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCZlbmNsb3NpbmdDbGlwcGluZ0JveCAhPSBjb250YWluaW5nQmxvY2spIHsKKyAgICAg
ICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc3Rp
Y2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICB9CiAgICAgfQogICAg
IC8vIEZJWE1FOiBGb3Igbm93LCBhc3N1bWUgdGhhdCB8dGhpc3wgaXMgbm90IHRyYW5zZm9ybWVk
LgogICAgIHN0aWNreUJveFJlbGF0aXZlVG9TY3JvbGxpbmdBbmVjc3Rvci5zZXRMb2NhdGlvbihz
dGlja3lMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CkBAIC01NDcsMTEgKzU1
MiwxNCBAQCBGbG9hdFJlY3QgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnN0cmFpbmluZ1JlY3RG
b3JTdGlja3lQb3NpdGlvbigpIGNvbnN0CiAKICAgICAgICAgRmxvYXRSZWN0IGNvbnN0cmFpbmlu
Z1JlY3QgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJl
Y3QoY2xpcFJlY3QpLCAmdmlldygpKS5ib3VuZGluZ0JveCgpOwogCi0gICAgICAgIEZsb2F0UG9p
bnQgc2Nyb2xsT2Zmc2V0ID0gRmxvYXRQb2ludCgpICsgZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGlu
Z0xheWVyID0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAg
ICAgRmxvYXRQb2ludCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChzY3JvbGxhYmxlRW5jbG9z
aW5nQ2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQo
KSArIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKIAog
ICAgICAgICBmbG9hdCBzY3JvbGxiYXJPZmZzZXQgPSAwOwotICAgICAgICBpZiAoZW5jbG9zaW5n
Q2xpcHBpbmdCb3guaGFzTGF5ZXIoKSAmJiBlbmNsb3NpbmdDbGlwcGluZ0JveC5zaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJP
ZmZzZXQgPSBlbmNsb3NpbmdDbGlwcGluZ0JveC5sYXllcigpLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKKyAgICAgICAgaWYgKGVuY2xvc2luZ0Ns
aXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xpcHBpbmdCb3guc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpICYmIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlw
cGluZ0xheWVyKQorICAgICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gc2Nyb2xsYWJsZUVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpOwogCiAgICAgICAgIGNvbnN0cmFpbmluZ1JlY3Quc2V0TG9jYXRpb24oRmxv
YXRQb2ludChzY3JvbGxPZmZzZXQueCgpICsgc2Nyb2xsYmFyT2Zmc2V0LCBzY3JvbGxPZmZzZXQu
eSgpKSk7CiAgICAgICAgIHJldHVybiBjb25zdHJhaW5pbmdSZWN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMjQ5M2VmODY0ZGE0M2E3ODAyODYzMWU4NzJh
MzMwZDU0MDhhZjcyMy4uMTBkNzFhZDUwMWM0ODg0MzcxNTI2MmQxMjAzNjg0NDZkNTg0ZTFlNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC0xLDYgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFy
ZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24u
CiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
RmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNs
dWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzAxLDE4ICszMDMsMTUgQEAgUmVuZGVy
TGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJN
b2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0cnVlKQogICAgICwgbV9o
YWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBtX2luUmVzaXplTW9kZShmYWxzZSkK
LSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAgLCBtX2hhc1NlbGZQYWlu
dGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2VsZlBhaW50aW5nTGF5ZXJE
ZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3BhcmVuY3koZmFsc2UpCiAg
ICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAgICAsIG1faW5PdmVyZmxv
d1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5lZWRzTm9ybWFsUmVwYWlu
dCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNW
aXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0
eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFsc2UpCi0gICAgLCBtX3Jl
Z2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNGaXhlZEludGVyc2VjdGlu
Z1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChmYWxzZSkKICAgICAsIG1f
M0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQpAQCAtMzIwLDIxICszMTks
MTEgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJl
bmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faGFzQ29tcG9zaXRpbmdEZXNjZW5kYW50
KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMoZmFs
c2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcihmYWxzZSkKLSAgICAs
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKICAgICAsIG1faGFzVHJh
bnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9y
KGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZhbHNlKQogICAgICwgbV9p
bmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihJbmRpcmVjdENv
bXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENv
bXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgLCBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNlbmRpZgotICAgICwgbV9h
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fcmVx
dWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQotICAgICwgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3VwZGF0aW5nTWFycXVlZVBv
c2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBtX2xheWVyTGlzdE11dGF0
aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTgsMTYgKzM0Nyw2IEBAIFJlbmRlckxheWVy
OjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxP
YmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSA9IGZhbHNlOwogICAg
ICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHlsZSgpLnZpc2liaWxpdHko
KSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8gV2Ugc2F2ZSBhbmQgcmVz
dG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNjcm9sbCB2YWx1ZXMgYXJl
IHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRlckJveCgpKSB7Ci0gICAgICAgICAgICBt
X3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7Ci0g
ICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpCi0gICAgICAgICAgICAg
ICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9u
KEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCkBA
IC0zNzUsMjkgKzM1NCwxMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxheWVyKCkKICAgICBpZiAo
aW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9s
bGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQot
ICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVTY3JvbGxhYmxlQXJl
YSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0gICAgaWYgKEVsZW1l
bnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+c2V0
U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotCi0gICAgZGVzdHJv
eVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0cm95U2Nyb2xsYmFyKFZl
cnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlzKTsKLQogICAg
IGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rpb24oKTsKIAotICAgIGNs
ZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0KKyAgICBjbGVhckxheWVy
U2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVyRmlsdGVycygpOwogCiAgICAgaWYgKHBh
aW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAtOTQ2LDcgKzkwNiw4IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0
aW5nU3VidHJlZSwgYm9vCiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+IGZsYWdzKQogewogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oJmZsYWdzKTsKLSAg
ICBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmFwcGx5UG9zdExheW91dFNj
cm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKIAogICAgIGlmIChnZW9tZXRyeU1hcCkKICAgICAgICAg
Z2VvbWV0cnlNYXAtPnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IodGhpcywgcGFyZW50KCkpOwpAQCAt
OTU0LDcgKzkxNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJl
bmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgLy8gQ2xlYXIgb3Vy
IGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAgY2xlYXJDbGlwUmVjdHMoKTsKIAot
ICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKICAgICAgICAg
TGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAgaWYgKGdlb21ldHJ5TWFwKQogICAg
ICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXplKHRvRmxvYXRTaXplKGdlb21ldHJ5
TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsKQEAgLTk2Myw3ICs5MjQsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCog
Z2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJv
bUFuY2VzdG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAg
IG9mZnNldEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0K
LSAgICAgICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZy
b21Sb290KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyhyb3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0
ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAzOSwxNCArMTAwMCw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9t
ZXRyeU1hcCwgT3B0aW9uU2V0CiAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGls
ZC0+dXBkYXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAotICAgIC8vIFdp
dGggYWxsIG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlm
IHdlIG5lZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291
bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0
ZmllbGRzLgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9
IHRydWU7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAg
ICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlv
bjsKLSAgICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNG
aXhlZFBvc2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNl
Y3RzVmlld3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgq
dGhpcyk7CkBAIC0xMTI2LDI3ICsxMDgxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBh
aW50UmVjdHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0K
IAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsKCkKLXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsK
LQotICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlckRvY3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1h
cChVc2VUcmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZn
ZW9tZXRyeU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlN
YXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5
ZXIoKSkKLSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQo
KSwgbnVsbHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0
aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXpl
IHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0
b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJT
Y3JvbGwoJmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCog
Z2VvbWV0cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxh
Zz4gZmxhZ3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0
IHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTE5OSwxMiArMTEzMyw4IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVy
R2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRl
clJlcGxpY2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIg
cG9zaXRpb24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUp
IHsKLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdN
YXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVl
OwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBt
X3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0g
ICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFw
cGluZ3MpCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50
KCkpOwpAQCAtMTY5NSw4ICsxNjI1LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAg
UmVuZGVyTGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3Rv
ckZvclBvc2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAg
Ly8gRm9yIHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBw
b3NpdGlvbmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQ
YXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBv
aW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlw
KCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFy
ZWEgPSBwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAg
IGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJl
YS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChw
b3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJl
bmRlcklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAg
IExheW91dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFy
ZW50LT5yZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDYsOCArMTYzOCwxMCBAQCBib29sIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVu
dHNTY3JvbGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0
aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9IGVsc2UgaWYgKGF1
dG8qIHBhcmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5y
ZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0
b0xheW91dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBpZiAocGFy
ZW50TGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvKiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0gcGFyZW50TGF5ZXItPnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFy
ZW50TGF5ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KIAog
ICAgICAgICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAg
ICAgICAgIG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxp
bmdTY29wZSgpOwpAQCAtMTgzOSw5ICsxNzczLDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjplbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVy
TGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVy
OjplbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAgICBhdXRvKiBvd25lckVs
ZW1lbnQgPSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAg
YXV0byogb3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
OwogICAgIGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAt
MTg1MiwxNSArMTc4NiwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVu
ZGVyTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJldHVybiBvd25lclJlbmRl
cmVyLT5lbmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFt
ZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNy
b3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxh
eWVyLmVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRv
KiBhbmNlc3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQogICAg
ICAgICByZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0g
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gZW5j
bG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKQEAgLTE4NzQs
NyArMTgwOCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgaWYgKGluY2x1ZGVTZWxm
ID09IEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFi
bGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMp
OwogICAgIAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Js
b2NrTGF5ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1l
Qm91bmRhcmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5
ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVC
b3VuZGFyaWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExh
eWVyKSkKICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAgfQpAQCAtMTg4Miw1MCAr
MTgxNiw2IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9
CiAKLUludFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsK
LSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoYXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGlu
YXRvcigpKSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5p
bWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVy
Ojppc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCi0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnVi
YmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Nj
cm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJC
YW5kSW5Qcm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyTGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1h
bmNlVGVzdGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5z
Y3JvbGxpbmdQZXJmb3JtYW5jZVRlc3RpbmdFbmFibGVkKCk7Ci19Ci0KIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CiB7CiAgICAg
UmVuZGVyTGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAgLTI0NTEsMTkgKzIzNDEsNiBAQCBMYXlv
dXRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIq
IGFuY2VzdG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUoY29udmVydFRvTGF5
ZXJDb29yZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykp
OwogfQogCi1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29u
c3QKLXsKLSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygp
LmFzeW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpc1Zpc2li
bGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCkKLSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5k
ZXJlcigpLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCku
c2V0dGluZ3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQogYm9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRv
dWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDkzLDI4OSArMjM3MCw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCiB9
CiAjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAKLS8vIEZJWE1FOiB0aGlzIGlz
IG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzQ29tcG9zaXRl
ZCgpICYmIGJhY2tpbmcoKS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKLX0KLQotLy8gRklYTUU6IHRo
aXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KLWJvb2wgUmVuZGVyTGF5
ZXI6OnVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXBvc2l0b3Io
KS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKCp0aGlzKTsKLX0KLQotc3RhdGljIGlu
bGluZSBpbnQgYWRqdXN0ZWRTY3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCi17Ci0gICAg
Ly8gVGhpcyBpbXBsZW1lbnRpb24gbWF0Y2hlcyBGaXJlZm94J3MuCi0gICAgLy8gaHR0cDovL214
ci5tb3ppbGxhLm9yZy9maXJlZm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93
c2VyLnhtbCM4NTYuCi0gICAgY29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOwotCi0gICAgaW50
IGFkanVzdGVkRGVsdGEgPSBiZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKLSAgICBpZiAo
YWRqdXN0ZWREZWx0YSA+IDEpCi0gICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxp
bnQ+KGFkanVzdGVkRGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0
YSkpKSAtIDE7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQotICAgICAgICBhZGp1
c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNf
Y2FzdDxkb3VibGU+KC1hZGp1c3RlZERlbHRhKSkpICsgMTsKLQotICAgIHJldHVybiBhZGp1c3Rl
ZERlbHRhOwotfQotCi1zdGF0aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShj
b25zdCBJbnRTaXplJiBkZWx0YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9s
bERlbHRhKGRlbHRhLndpZHRoKCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgp
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQ
b2ludCYgc291cmNlUG9pbnQpCi17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlv
biA9IHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0
aW9uKCk7Ci0gICAgCi0gICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBt
b3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0
IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIElu
dFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3Np
dGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNl
Ci0gICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247
Ci0KLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBv
aW50OwotCi0gICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNj
cm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNv
bgotICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgp
KSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVp
Z2h0KDApOwotCi0gICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRl
bHRhKSk7Ci19Ci0KLS8vIEZJWE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxl
KCkgY29kZSBiZWxvdy4KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29u
c3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAg
IGlmIChkZWx0YS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmlj
dGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAg
ICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxl
KCkubGluZUNsYW1wKCkuaXNOb25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxv
d0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNl
dCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3Jv
bGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQot
ICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBs
YXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNh
biBzY3JvbGwgdG8gdHJ5Ci0gICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0g
bmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5n
U2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNs
dWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0g
ICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFp
bmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIo
KS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUg
Y2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxl
ZCwgYnV0IGRvZXNuJ3QKLSAgICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBt
ZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAg
ICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAg
ICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5k
ZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlk
bid0IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRo
ZSBmcmFtZXMgb3duZXJFbGVtZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0
aW9uKQotewotICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQo
KQotewotICAgIGlmICghbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb24gPSBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBv
c2l0aW9uKGludCB4LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1w
aW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3Np
dGlvbih4LCBtX3Njcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9z
aXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNj
cm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCkKLXsKLSAgICBT
Y3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngoKSwgeSk7Ci0gICAgc2V0
U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAgaWYgKGFuaW1hdGVkID09
IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGlu
Zyk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci19Ci0KLVNjcm9sbE9mZnNl
dCBSZW5kZXJMYXllcjo6Y2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldC5jb25zdHJhaW5lZEJl
dHdlZW4oSW50UG9pbnQoKSwgbWF4aW11bVNjcm9sbE9mZnNldCgpKTsKLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9u
JiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGlu
ZykKLXsKLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIExPR19XSVRIX1NUUkVBTShT
Y3JvbGxpbmcsIHN0cmVhbSA8PCAqdGhpcyA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZSAiIDw8IHBvc2l0aW9uKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsaW5n
Q29vcmRpbmF0b3ItPnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSgqdGhpcywgcG9zaXRpb24s
IHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKLSNlbmRpZgotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3Jv
bGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcp
Ci17Ci0gICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3Io
KS5jYW5jZWxBbmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9m
ZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxP
ZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9s
bE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1
cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwotCi0gICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQp
LCBzY3JvbGxUeXBlLCBjbGFtcGluZykpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zmc2V0LCBjbGFtcGluZyk7Ci0gICAgc2V0U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKLQotICAg
IHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQm
IG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykK
LXsKLSAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0g
ICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQg
bmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBj
bGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OwotICAgIGlmIChjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmlt
YXRpb24pCi0gICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotICAg
IGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Nyb2xsT2Zmc2V0
KTsKLQotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlwZSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlv
bikKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0g
PDwgIlJlbmRlckxheWVyOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1f
c2Nyb2xsUG9zaXRpb24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5
cGUoKSA9PSBTY3JvbGxUeXBlOjpVc2VyKSA8PCAiKSIpOwotCi0gICAgU2Nyb2xsUG9zaXRpb24g
bmV3UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7
Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQg
aWYgdGhleSBuZWVkIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCi0gICAgICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKGFkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQn
cyBub3QgY2xlYXIgd2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVt
cyByZWFzb25hYmxlIHdpdGggaXQgcmVtb3ZlZC4KLSAgICAgICAgICAgIGludCBtYXhPZmZzZXQg
PSBzY3JvbGxXaWR0aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAg
ICAgICAgU2Nyb2xsT2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihu
ZXdQb3NpdGlvbik7Ci0gICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54
KCk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lk
dGgpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsWE9mZnNldCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9s
bFhPZmZzZXQgPCBtX3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCi0gICAgICAgICAg
ICAgICAgc2Nyb2xsWE9mZnNldCAtPSBjYXJldFdpZHRoOwotCi0gICAgICAgICAgICBuZXdPZmZz
ZXQuc2V0WChzY3JvbGxYT2Zmc2V0KTsKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xs
UG9zaXRpb25Gcm9tT2Zmc2V0KG5ld09mZnNldCk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0K
LSAgICAKLSAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50
U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5Bbmlt
YXRpb24pIHsKLSAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBz
Y3JvbGxUbygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2Vy
IGdlc3R1cmUuCi0gICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBu
ZWVkcyB0byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgotICAg
ICAgICBpZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKLSAgICAg
ICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICAgICAg
dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Njcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci0K
LSAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIoKS52aWV3KCk7Ci0KLSAgICAvLyBVcGRh
dGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBm
aXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KLSAgICAvLyBXZSBk
b24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBk
ZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KLSAgICBpZiAoIXZpZXcu
ZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKLSAg
ICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBk
YXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmluaXNoZWQuCi0gICAgICAgIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3
KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLQotICAgICAgICBpZiAoIW1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKLSAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNv
bXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1
cGRhdGluZyBsYXllcgotICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBw
b3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMs
IGFuZAotICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRo
ZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgotICAg
ICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRlcy4KLSAgICAgICAgICAgIGlmICh1c2VzQ29t
cG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAgICAgICAgICAgc2V0TmVlZHNDb21wb3NpdGlu
Z0dlb21ldHJ5VXBkYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24g
Y2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3NpdGVkIGRlc2NlbmRhbnQgKHdoaWNo
IG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCi0gICAgICAgICAgICAgICAgLy8gc28gdHJp
Z2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFja2luZyBjb250ZXh0LgotICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IHN0YWNraW5nQ29udGV4dCgpKQotICAg
ICAgICAgICAgICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBVcGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2Yg
YSBwYXJ0aWN1bGFyIHJlZ2lvbi4KLSAgICAgICAgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmludmFs
aWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25zKCk7Ci0gICAgICAgIERlYnVnUGFnZU92ZXJs
YXlzOjpkaWRMYXlvdXQocmVuZGVyZXIoKS5mcmFtZSgpKTsKLSAgICB9Ci0KLSAgICBGcmFtZSYg
ZnJhbWUgPSByZW5kZXJlcigpLmZyYW1lKCk7Ci0gICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciA9IHJlbmRlcmVyKCkuY29udGFpbmVyRm9yUmVwYWludCgpOwotICAg
IC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFsaWRhdGVkIGFmdGVyIHNjcm9sbGlu
ZwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVjdE5lZWRzVXBkYXRlKCk7Ci0gICAg
Ci0gICAgTGF5b3V0UmVjdCByZWN0Rm9yUmVwYWludCA9IHJlbmRlcmVyKCkuaGFzUmVwYWludExh
eW91dFJlY3RzKCkgPyByZW5kZXJlcigpLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJl
Y3QgOiByZW5kZXJlcigpLmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250
YWluZXIpOwotCi0gICAgRmxvYXRRdWFkIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9h
dFF1YWQocmVjdEZvclJlcGFpbnQpOwotICAgIGlmIChyZXBhaW50Q29udGFpbmVyKQotICAgICAg
ICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fi
c29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKLSAgICBmcmFtZS5ldmVudEhh
bmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VN
b3VzZU1vdmVFdmVudCk7Ci0KLSAgICBib29sIHJlcXVpcmVzUmVwYWludCA9IHRydWU7Ci0gICAg
aWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3Np
dGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgIHNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0g
YmFja2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKLSAgICB9Ci0KLSAg
ICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAgaWYg
KHJlcXVpcmVzUmVwYWludCkKLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50VXNpbmdDb250YWlu
ZXIocmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwotCi0gICAgLy8gU2NoZWR1bGUg
dGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJlbGF0ZWQgRE9NIGV2ZW50cy4KLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7Ci0KLSAgICBpZiAo
c2Nyb2xsc092ZXJmbG93KCkpCi0gICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Ny
b2xsT2Zmc2V0KCk7Ci0KLSAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFu
Z2VkKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwoKnRoaXMpOwot
fQotCiBzdGF0aWMgaW5saW5lIGJvb2wgZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbChI
VE1MRnJhbWVFbGVtZW50QmFzZSogZnJhbWVFbGVtZW50QmFzZSwgRnJhbWVWaWV3JiBmcmFtZVZp
ZXcpCiB7CiAgICAgLy8gSWYgc2Nyb2xsYmFycyBhcmVuJ3QgZXhwbGljaXRseSBmb3JiaWRkZW4s
IHBlcm1pdCBzY3JvbGxpbmcuCkBAIC0yODIwLDcgKzI0MTQsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9v
bCBpbnNpZAogCiAgICAgTGF5b3V0UmVjdCBuZXdSZWN0ID0gYWJzb2x1dGVSZWN0OwogICAgIEZy
YW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0gICAg
YXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywg
Q3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBwYXJlbnRMYXllciA9IGVuY2xv
c2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CiAKICAg
ICBhdXRvIHNob3VsZFVzZUFuaW1hdGVkU2Nyb2xsID0gW3RoaXNdKEVsZW1lbnQqIGVsZW1lbnQs
IFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yKQogICAgIHsKQEAgLTI4MzAsNiArMjQyNCw4IEBAIHZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJz
b2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgfTsKIAogICAgIGlmIChhbGxvd3NDdXJyZW50U2Ny
b2xsKCkpIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5zdXJlTGF5ZXJTY3Jv
bGxhYmxlQXJlYSgpOworCiAgICAgICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3Zl
cmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAg
cHJvcGVydHkuCiAgICAgICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IHVzIGZyb20gcmV2ZWFsaW5n
IHRleHQgaGlkZGVuIGJ5IHRoZSBzbGlkZXIgaW4gU2FmYXJpIFJTUy4KICAgICAgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKQEAgLTI4NDAsMjQgKzI0MzYsMTcgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJl
Y3QsIGJvb2wgaW5zaWQKICAgICAgICAgLy8gYm9yZGVyIGVkZ2UuIE1ha2UgdGhlIHJlY3Rhbmds
ZSByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhLgogICAgICAgICBsb2NhbEV4cG9zZVJl
Y3QubW92ZUJ5KC1MYXlvdXRQb2ludChib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJUb3Ao
KSkpOwogCi0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25M
ZWZ0KCkpIHsKKyAgICAgICAgaWYgKGJveC0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7CiAgICAgICAgICAgICAvLyBGb3IgZGlyZWN0aW9uOiBydGw7IHdyaXRp
bmctbW9kZTogaG9yaXpvbnRhbC10YiBib3gsIHRoZSBzY3JvbGwgYmFyIGlzIG9uIHRoZSBsZWZ0
IHNpZGUuIFRoZSB2aXNpYmxlIHJlY3QKICAgICAgICAgICAgIC8vIHN0YXJ0cyBmcm9tIHRoZSBy
aWdodCBzaWRlIG9mIHNjcm9sbCBiYXIuIFNvIHRoZSB4IG9mIGxvY2FsRXhwb3NlUmVjdCBzaG91
bGQgc3RhcnQgZnJvbSB0aGUgc2FtZSBwb3NpdGlvbiB0b28uCi0gICAgICAgICAgICBsb2NhbEV4
cG9zZVJlY3QubW92ZUJ5KExheW91dFBvaW50KC12ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCksIDAp
KTsKKyAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXNjcm9s
bGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpLCAwKSk7CiAgICAgICAgIH0KICAg
ICAgICAgTGF5b3V0UmVjdCBsYXllckJvdW5kcygwX2x1LCAwX2x1LCBib3gtPmNsaWVudFdpZHRo
KCksIGJveC0+Y2xpZW50SGVpZ2h0KCkpOwogICAgICAgICBleHBhbmRTY3JvbGxSZWN0VG9WaXNp
YmxlVGFyZ2V0UmVjdFRvSW5jbHVkZVNjcm9sbFBhZGRpbmcoYm94LCBsYXllckJvdW5kcywgbG9j
YWxFeHBvc2VSZWN0KTsKICAgICAgICAgTGF5b3V0UmVjdCByZXZlYWxSZWN0ID0gZ2V0UmVjdFRv
RXhwb3NlKGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QsIGluc2lkZUZpeGVkLCBvcHRpb25z
LmFsaWduWCwgb3B0aW9ucy5hbGlnblkpOwogCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVk
U2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkgKyB0b0ludFNp
emUocm91bmRlZEludFJlY3QocmV2ZWFsUmVjdCkubG9jYXRpb24oKSkpOwotICAgICAgICBpZiAo
Y2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJyZW50U2Nyb2xsQmVo
YXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsK
LSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KTsKLSAgICAgICAgICAgIGF1dG8gYW5pbWF0ZWQgPSBzaG91bGRVc2VBbmltYXRlZFNjcm9sbChi
b3gtPmVsZW1lbnQoKSwgb3B0aW9ucy5iZWhhdmlvcik7Ci0gICAgICAgICAgICBzZXRTY3JvbGxQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCksIFNj
cm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIGFuaW1hdGVk
KTsKLSAgICAgICAgICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRT
Y3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Ci0gICAgICAgICAgICBsb2NhbEV4cG9zZVJl
Y3QubW92ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7Ci0gICAgICAgICAgICBuZXdSZWN0ID0g
TGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChs
b2NhbEV4cG9zZVJlY3QpKSwgVXNlVHJhbnNmb3JtcykuYm91bmRpbmdCb3goKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3Jv
bGxQb3NpdGlvbihvcHRpb25zLmJlaGF2aW9yLCByZXZlYWxSZWN0LCBsb2NhbEV4cG9zZVJlY3Qp
KQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAo
IXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCkBAIC0yODcxLDcg
KzI0NjAsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExh
eW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50
IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRT
Y29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAg
ICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qg
dmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIGVs
ZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3duZXJFbGVtZW50LT5j
b250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVudC0+cmVuZGVyQm94
KCkgOiBudWxscHRyOwpAQCAtMjk0OCwyMyArMjUzNyw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGlu
c2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250
ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFp
bmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQg
bWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5n
IGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5n
QW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigp
KSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdV
cGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2Ug
dG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Ny
b2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRh
bnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAg
ICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRh
dGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4
cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhw
b3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgs
IGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYg
ZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBAIC0zMTExLDcgKzI2
ODMsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQtPnNldE1pbmltdW1T
aXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91dFNpemUgYWRqdXN0
ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwg
b2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5kZXJlci0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgIG5ld09mZnNl
dC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1c3RlZE9sZE9mZnNl
dC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAgfQpAQCAtMzEyOSwx
MDg1ICsyNzAxLDE2NSBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgICAgICAgICAgc3R5
bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0
LCByZW5kZXJlci0+bWFyZ2luUmlnaHQoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1Nf
UFgpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFVuaXQgYmFzZVdpZHRoID0gcmVuZGVyZXIt
PndpZHRoKCkgLSAoaXNCb3hTaXppbmdCb3JkZXIgPyAwX2x1IDogcmVuZGVyZXItPmhvcml6b250
YWxCb3JkZXJBbmRQYWRkaW5nRXh0ZW50KCkpOwotICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lk
dGggLyB6b29tRmFjdG9yOwotICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5j
ZS53aWR0aCgpKSwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgfQotCi0gICAgaWYgKHJlc2l6
ZSAhPSBSZXNpemU6Okhvcml6b250YWwgJiYgZGlmZmVyZW5jZS5oZWlnaHQoKSkgewotICAgICAg
ICBpZiAoaXM8SFRNTEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAg
ICAvLyBNYWtlIGltcGxpY2l0IG1hcmdpbnMgZnJvbSB0aGUgdGhlbWUgZXhwbGljaXQgKHNlZSA8
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU0Nz4pLgotICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
blRvcCwgcmVuZGVyZXItPm1hcmdpblRvcCgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7Ci0gICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCByZW5kZXJlci0+bWFyZ2luQm90dG9tKCkgLyB6b29t
RmFjdG9yLCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKLSAgICAgICAgfQotICAgICAgICBMYXlvdXRV
bml0IGJhc2VIZWlnaHQgPSByZW5kZXJlci0+aGVpZ2h0KCkgLSAoaXNCb3hTaXppbmdCb3JkZXIg
PyAwX2x1IDogcmVuZGVyZXItPnZlcnRpY2FsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAg
ICAgICAgYmFzZUhlaWdodCA9IGJhc2VIZWlnaHQgLyB6b29tRmFjdG9yOwotICAgICAgICBzdHls
ZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCByb3Vu
ZFRvSW50KGJhc2VIZWlnaHQgKyBkaWZmZXJlbmNlLmhlaWdodCgpKSwgQ1NTVW5pdFR5cGU6OkNT
U19QWCk7Ci0gICAgfQotCi0gICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7Ci0KLSAgICAvLyBG
SVhNRSAoUmFkYXIgNDExODU2NCk6IFdlIHNob3VsZCBhbHNvIGF1dG9zY3JvbGwgdGhlIHdpbmRv
dyBhcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgcG9pbnQgdW5kZXIgdGhlIGN1cnNvciBpbiB2aWV3
LgotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zm
c2V0JiBvZmZzZXQpCi17Ci0gICAgc2Nyb2xsVG8oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KG9m
ZnNldCkpOwotfQotCi1TY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ05vZGVJ
RCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpc0NvbXBvc2l0ZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENv
b3JkaW5hdGlvblJvbGU6OlNjcm9sbGluZyk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRs
ZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2
ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4gZ2VzdHVyZVN0YXRlKQotewot
ICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQotICAgIGlmICh1c2VzQXN5bmNT
Y3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQoKSkgewotICAgICAgICBpZiAoYXV0byogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAg
ICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNj
cm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSwgZ2VzdHVyZVN0YXRlKTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVu
dEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBnZXN0dXJlU3RhdGUpOwotfQotCi1JbnRSZWN0IFJl
bmRlckxheWVyOjp2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJ
bmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFySW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RC
ZWhhdmlvcikgY29uc3QKLXsKLSAgICBJbnRTaXplIHNjcm9sbGJhclNwYWNlOwotICAgIGlmIChz
aG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBzY3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNj
cm9sbGJhcnMpCi0gICAgICAgIHNjcm9sbGJhclNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7
Ci0gICAgCi0gICAgYXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7Ci0gICAg
cmV0dXJuIHsgc2Nyb2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0
aCgpIC0gc2Nyb2xsYmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhl
aWdodCgpIC0gc2Nyb2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKLX0KLQotSW50U2l6ZSBSZW5k
ZXJMYXllcjo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAotewotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLSAgICBpZiAoIXJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3Vi
U2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0K
LSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxP
ZmZzZXQoKSwgb3IganVzdCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCi0gICAgU2Nyb2xs
T2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3Np
dGlvbigpKTsKLSAgICBhdXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpOwotICAgIGlmIChzY3JvbGxPZmZzZXQueSgpIDwgMCkKLSAgICAgICAgc3RyZXRjaC5z
ZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5o
ZWlnaHQoKSAmJiBzY3JvbGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZp
c2libGVIZWlnaHQoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0Lnko
KSAtIChyZWFjaGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7Ci0KLSAgICBp
ZiAoc2Nyb2xsT2Zmc2V0LngoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xs
T2Zmc2V0LngoKSk7Ci0gICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9s
bE9mZnNldC54KCkgPiByZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKLSAg
ICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUu
d2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLSNlbHNl
Ci0gICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgotfQotCi1ib29sIFJlbmRlckxheWVyOjpp
c0FjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5p
c0FjdGl2ZSgpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxDb3JuZXJSZWN0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVy
OwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbENvcm5lclZpc2libGUoKSBjb25zdAot
ewotICAgIEFTU0VSVChyZW5kZXJlcigpLmlzQm94KCkpOwotICAgIHJldHVybiAhc2Nyb2xsQ29y
bmVyUmVjdCgpLmlzRW1wdHkoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6Y29udmVydEZy
b21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAotewotICAgIEludFJlY3QgcmVjdCA9
IHNjcm9sbGJhclJlY3Q7Ci0gICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLQotICAgIHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJv
bVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcmVjdCk7Ci19Ci0KLUludFJl
Y3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QK
LXsKLSAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UmVjdCk7
Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJu
IHJlY3Q7Ci19Ci0KLUludFBvaW50IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50
JiBzY3JvbGxiYXJQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJh
clBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAg
IHJldHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVy
VG9Db250YWluaW5nVmlldygmcmVuZGVyZXIoKSwgcG9pbnQpOwotfQotCi1JbnRQb2ludCBSZW5k
ZXJMYXllcjo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Ci17Ci0g
ICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIoKSwgcGFyZW50UG9pbnQpOwot
ICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4g
cG9pbnQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKLXsK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAg
ICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gt
PmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKLX0KLQot
SW50U2l6ZSBSZW5kZXJMYXllcjo6Y29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKLXsKLSAgICBJbnRT
aXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRlbnRzU2l6ZSgpOwotCi0gICAgaWYgKCFoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRX
aWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lkdGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgp
KSk7Ci0KLSAgICBpZiAoIWhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpCi0gICAgICAg
IGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjptaW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2
aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gY29udGVudHNTaXplOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxl
U2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCi17Ci0gICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJs
ZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOwotCi0gICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFi
bGVTaXplQ2hhbmdlUmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgewotICAgICAgICBpZiAoaXM8
UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKCkpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKLSAg
ICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5k
ZXJMYXllcjo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJl
dHVybiByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5p
bWF0aW9ucygpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgUmVuZGVyTGF5
ZXI6OmRpZFN0YXJ0U2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
U3RhcnRPdmVyZmxvd1Njcm9sbCgpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpkaWRFbmRTY3Jv
bGwoKQotewotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9s
bCgpOwotfQotICAgIAotdm9pZCBSZW5kZXJMYXllcjo6ZGlkVXBkYXRlU2Nyb2xsKCkKLXsKLSAg
ICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlz
IGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1cGRhdGVkLgotICAgIHBhZ2UoKS5jaHJvbWUoKS5jbGll
bnQoKS5kaWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOwotfQotI2VuZGlmCi0KLUludFBv
aW50IFJlbmRlckxheWVyOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQ
b3NpdGlvbkluVmlldygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc0hhbmRsaW5nV2hlZWxF
dmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRs
ZXIoKS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOwotfQotCi1SZW5kZXJMYXllcjo6T3ZlcmZsb3dD
b250cm9sUmVjdHMgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpOwotICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7Ci0gICAgLy8gU2Nyb2xsYmFy
cyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgotICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdElu
Y2x1ZGluZ1Njcm9sbGJhcigpKTsKLQotICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOwotICAgIGF1dG8gdmVydGljYWxTY3Jv
bGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7Ci0KLSAgICBhdXRvIGlz
Tm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7Ci0g
ICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFy
KCk7Ci0gICAgfTsKLQotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFy
ID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7Ci0gICAgYm9vbCBoYXZlTm9u
T3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5n
ZXQoKSk7Ci0gICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwotICAgIGJvb2wgaGF2ZVJlc2l6
ZXIgPSByZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwotICAgIGJv
b2wgc2Nyb2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9s
bGJhciAmJiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIg
JiYgKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyKSk7Ci0KLSAgICBJbnRTaXplIGNvcm5lclNpemU7Ci0gICAgaWYgKHNj
cm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIg
aXMgcHJlc2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCi0gICAgICAgIGNvcm5lclNpemUgPSBJ
bnRTaXplIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKLSAgICAgICAgICAgIGhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVy
dGljYWxTY3JvbGxiYXJXaWR0aAotICAgICAgICB9OwotICAgIH0KLQotICAgIE92ZXJmbG93Q29u
dHJvbFJlY3RzIHJlc3VsdDsKLQotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgYXV0byBiYXJS
ZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKLSAgICAgICAgYmFyUmVjdC5z
aGlmdFlFZGdlVG8oYmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsK
LSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikgewotICAgICAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCi0gICAgICAgICAgICAgICAgYmFyUmVjdC5z
aGlmdFhFZGdlVG8oYmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0
aCgpLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFy
ID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGF1dG8gYmFy
UmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGlmIChwbGFj
ZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0
aCh2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFy
UmVjdC5zaGlmdFhFZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KTsKLQotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgYmFy
UmVjdC5jb250cmFjdCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKLQotICAgICAgICByZXN1bHQu
dmVydGljYWxTY3JvbGxiYXIgPSBiYXJSZWN0OwotICAgIH0KLQotICAgIGF1dG8gY29ybmVyUmVj
dCA9IFsmXShJbnRTaXplIGNvcm5lclNpemUpIHsKLSAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpIHsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKLSAgICAg
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVm
dENvcm5lci55KCkgLSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07Ci0gICAg
fTsKLQotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgIHJlc3VsdC5zY3Jv
bGxDb3JuZXIgPSBjb3JuZXJSZWN0KGNvcm5lclNpemUpOwotCi0gICAgaWYgKGhhdmVSZXNpemVy
KSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCi0gICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IHJlc3VsdC5zY3JvbGxDb3JuZXI7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSW50U2l6ZSBSZW5kZXJMYXll
cjo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyKSBjb25zdAotewot
ICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmICgmc2Ny
b2xsYmFyID09IG1fdkJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy52
ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIGlmICgmc2Nyb2xsYmFyID09IG1f
aEJhci5nZXQoKSkKLSAgICAgICAgcmV0dXJuIHRvSW50U2l6ZShyZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLmxvY2F0aW9uKCkpOwotICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJS
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlm
ICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgm
c2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoR3JhcGhpY3NMYXllciogbGF5ZXIgPSBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgewotICAgICAgICAgICAgbGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLSAgICAvLyBJZiB3ZSBhcmUgbm90IHll
dCBpbnNlcnRlZCBpbnRvIHRoZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCi0g
ICAgaWYgKCFib3gtPnBhcmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZC
YXIuZ2V0KCkpCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLmxvY2F0aW9uKCkpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLQotICAgIExheW91dFJlY3QgcmVw
YWludFJlY3QgPSBzY3JvbGxSZWN0OwotICAgIHJlbmRlckJveCgpLT5mbGlwRm9yV3JpdGluZ01v
ZGUocmVwYWludFJlY3QpOwotICAgIHJlbmRlcmVyKCkucmVwYWludFJlY3RhbmdsZShyZXBhaW50
UmVjdCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29y
bmVyKQotICAgICAgICBtX3Njcm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKLSAg
ICBpZiAobV9yZXNpemVyKQotICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVj
dCk7Ci19Ci0KLXN0YXRpYyBib29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVu
QnlTdHlsZSgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUo
aG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiBy
ZW5kZXJlcikKLXsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQo
KSkgewotICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRh
aW5pbmdTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkg
PT0gU2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2hh
ZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuICZyZW5kZXJlcjsKLX0KLQotUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXI6OmNyZWF0ZVNj
cm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRl
cmVyKCkpKTsKLSAgICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcigpKTsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVu
ZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5k
ZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKLSAgICBp
ZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Ci0gICAgICAgIGRpZEFkZFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKLSAgICAgICAgaWYgKHBhZ2UoKS5p
c01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQotICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5z
ZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZSgpLndoZWVsRXZlbnRUZXN0TW9uaXRvcigpKTsK
LSAgICB9Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdl
dCk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyID8gbV9oQmFyIDogbV92QmFyOwotICAgIGlmICghc2Nyb2xsYmFy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxi
YXIoKSkKLSAgICAgICAgd2lsbFJlbW92ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVu
dGF0aW9uKTsKLQotICAgIHNjcm9sbGJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHNjcm9s
bGJhciA9IG51bGxwdHI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbHNPdmVyZmxvdygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KS5zY3JvbGxzT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBpZiAoaGFzU2Nyb2xsYmFy
ID09IGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGhhc1Njcm9sbGJhcikgewotICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpv
bnRhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3Jv
bGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigp
LnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgp
ID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAg
ICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3Rp
Y2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhv
cml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAg
U2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0
aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRp
bmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28u
ICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCi0gICAg
aWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92
QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKLXsKLSAgICBp
ZiAoaGFzU2Nyb2xsYmFyID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV92QmFyID0gY3JlYXRlU2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYm
IHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0
eU5vbmU7Ci0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNp
dHkoZWxhc3RpY2l0eSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBkZXN0cm95U2Ny
b2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xs
RWxhc3RpY2l0eU5vbmUpOwotI2VuZGlmCi0gICAgfQotCi0gICAgIC8vIERlc3Ryb3lpbmcgb3Ig
Y3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBh
bmQgZ28uICBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUu
Ci0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICBp
ZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOwotfQotCi1TY3JvbGxh
YmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKLXsK
LSAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
KQotICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyOwotCi0gICAgcmV0dXJuICZyZW5kZXJl
cigpLnZpZXcoKS5mcmFtZVZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZSgpCi17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuaXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkKLXsKLSAgICBmb3IgKGF1dG8qIG5leHRM
YXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcigqbmV4dExheWVyLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgewotICAg
ICAgICBpZiAobmV4dExheWVyLT5pc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOwotfQotCi0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKLXsKLSAgICAv
LyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KLSAgICBpZiAoIWlz
PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpIHx8ICFlbmNsb3NpbmdFbGVtZW50KCkt
PnJlbmRlckJveCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IGVu
Y2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgdXBkYXRlU25hcE9mZnNldHNGb3JT
Y3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hS
ZWN0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8qIHNjcm9sbEFuaW1hdG9yID0gZXhpc3Rp
bmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzU2Ny
b2xsU25hcEluUHJvZ3Jlc3MoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2VuZGlmCi0K
LWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAotewotICAg
IHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3Io
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVyLCBNZXNzYWdlTGV2ZWw6OkRl
YnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKLX0KLQotU3RyaW5nIFJlbmRlckxheWVy
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgYnVpbGRlci5hcHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAn
eCcsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLSAgICBpZiAodHJhbnNmb3JtKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIHRyYW5zZm9ybSJfcyk7Ci0KLSAgICBpZiAoaGFzRmlsdGVyKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFz
QmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgYmFja2Ryb3Ag
ZmlsdGVyIl9zKTsKLQotICAgIGlmIChoYXNCbGVuZE1vZGUoKSkKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiBoYXMgYmxlbmQgbW9kZSJfcyk7Ci0KLSAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygp
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKLQotICAg
IGlmIChpc0NvbXBvc2l0ZWQoKSkgewotICAgICAgICAvLyBPaCBmb3IgYmV0dGVyIFN0cmluZ0J1
aWxkZXIvVGV4dFN0cmVhbSBpbnRlZ3JhdGlvbi4KLSAgICAgICAgVGV4dFN0cmVhbSBzdHJlYW07
Ci0gICAgICAgIHN0cmVhbSA8PCAiICIgPDwgKmJhY2tpbmcoKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoc3RyZWFtLnJlbGVhc2UoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKLX0KLQotaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fdkJhcgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwg
KG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGlu
ZygpKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fdkJhci0+d2lkdGgoKTsK
LX0KLQotaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKLXsKLSAgICBpZiAoIW1faEJh
cgotICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkKLSAgICAgICAgfHwgKG1faEJh
ci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Ny
b2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Ci19Ci0K
LUludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpIGNvbnN0Ci17Ci0gICAgYXV0byByZXNpemVyUmVjdCA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpLnJlc2l6ZXI7Ci0gICAgYXV0byByZXNpemVDb3JuZXIgPSBzaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4
WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICByZXR1cm4gbG9j
YWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmZs
b3dDb250cm9scygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXIgfHwgbV9z
Y3JvbGxDb3JuZXIgfHwgcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0
IEludFNpemUmIG9mZnNldEZyb21Sb290KQotewotICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIg
JiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlbmRlckJveCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1Jl
Y3RzKCk7Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xs
YmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOwotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgfQotICAgIAotICAgIGlmIChtX2hCYXIpIHsK
LSAgICAgICAgcmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsK
LSAgICAgICAgbV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7
Ci0gICAgfQotCi0gICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+c2V0RnJhbWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7Ci0KLSAgICBpZiAobV9yZXNpemVy
KQotICAgICAgICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKLX0KLQot
aW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlbmRl
ckJveCgpKTsKLSAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRo
IGFic29sdXRlIGNvb3JkaW5hdGVzLgotICAgIHJldHVybiBtX3Njcm9sbFNpemUud2lkdGgoKTsK
LX0KLQotaW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAotewotICAgIEFTU0VS
VChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLmhl
aWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd1RvcCgpIGNvbnN0
Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92
ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOwot
fQotCi1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Ci17Ci0g
ICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwotfQot
Ci1MYXlvdXRVbml0IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdAotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3Qo
Ym94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUo
b3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LngoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxh
eW91dE92ZXJmbG93UmVjdCgpKTsKLSAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxv
d1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCi17Ci0gICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBtX3Njcm9sbFNpemUuc2V0V2lkdGgocm91bmRUb0ludChv
dmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSkpOwotICAgIG1fc2Nyb2xsU2l6ZS5zZXRI
ZWlnaHQocm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dUb3AoKSkpOwotCi0g
ICAgaW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgp
IC0gYm94LT5ib3JkZXJMZWZ0KCkpOwotICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpCi0gICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCgpOwotICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSBy
b3VuZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKLSAgICBzZXRTY3Jv
bGxPcmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9w
T3ZlcmZsb3cpKTsKLSAgICAKLSAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpCi17Ci0gICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93
ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAot
ewotICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSAmJiByZW5kZXJCb3goKS0+c2Ny
b2xsc092ZXJmbG93WCgpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSAmJiByZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOwotfQotCi1ib29sIFJlbmRlckxh
eWVyOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRv
SW50KHJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSk7Ci0KLSAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KHJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBheGlzKQotewotICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUu
b3ZlcmZsb3dZKCk7Ci0gICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJm
bG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
OjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xs
YmFycygpOwotICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKLX0KLQotc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0
b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFy
T3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0
eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNj
cm9sbGJhcnNBZnRlckxheW91dCgpCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKLSAgICBBU1NFUlQoYm94KTsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUg
c2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBp
ZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKTsKLSAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5oYXNW
ZXJ0aWNhbE92ZXJmbG93KCk7Ci0KLSAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNjcm9s
bGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCi0gICAgaWYgKG1f
aEJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyKCkuc3R5bGUoKSwgSG9yaXpv
bnRhbFNjcm9sbGJhcikpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFs
T3ZlcmZsb3cpOwotICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5k
ZXJlcigpLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKLSAgICAgICAgbV92QmFyLT5zZXRF
bmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgLy8gU2Nyb2xsYmFycyB3aXRoIGF1
dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdvdCBh
ZGRlZCBvciByZW1vdmVkLgotICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2Vk
ID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBib29s
IGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFy
V2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1ZlcnRp
Y2FsT3ZlcmZsb3cpOwotCi0gICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCB8
fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7Ci0gICAgICAgIGlmIChib3gtPmhhc0hv
cml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCi0gICAgICAgICAgICBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgICAgIGlmIChi
b3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7Ci0KLSAgICAgICAg
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKLQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnQo
KTsKLQotICAgICAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJm
bG93OjpBdXRvIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
QXV0bykgewotICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgewotICAgICAg
ICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBy
ZW5kZXJlcigpLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkgewotICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJCbG9jayYgYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFs
U2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZW5kZXJlcigpLmxheW91dCgpOwotICAgICAgICAg
ICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIo
KS5wYXJlbnQoKTsKLSAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3go
KSAmJiByZW5kZXJlcigpLmlzQm94KCkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4
aWJsZUJveD4ocGFyZW50KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCpyZW5kZXJCb3go
KSk7Ci0gICAgfQotCi0gICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5l
IHN0ZXApLgotICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91
bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3Jv
bGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKLSAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhT
Y3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9oQmFy
LT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFNpemUud2lkdGgoKSk7Ci0gICAg
fQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHJvdW5kVG9J
bnQoYm94LT5jbGllbnRIZWlnaHQoKSk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJh
cjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKLSAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3Jv
bGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKLSAgICAgICAgbV92QmFyLT5z
ZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3JvbGxTaXplLmhlaWdodCgpKTsKLSAgICB9
Ci0KLSAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92
ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KLS8vIFRo
aXMgaXMgY2FsbGVkIGZyb20gbGF5b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9u
cykuCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKLSAgICBTY3Jv
bGxPZmZzZXQgb3JpZ2luYWxTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLQotICAgIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsK
LQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgLy8gRklYTUU6IEVuc3VyZSB0aGF0
IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRpYyBzdHlsZSBj
aGFuZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzU5NjQKLSAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2VuZGlmCi0KLSAgICBpZiAoIWJveC0+
aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgJiYgIWlzVXNlclNj
cm9sbEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNlIHVzIHRvIGJl
IGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2UgbmVlZAotICAg
ICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBtYXggKG9yIHB1
c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KLSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3Jv
bGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3JvbmcuIFRoZSBj
YXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRpbmcgcmVsYXRl
ZCBlbnRyeSBwb2ludHMuCi0gICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gZml4IGFu
IGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdheXMgYmUgZHJh
d24gb24gdGhlIHJpZ2h0IGVkZ2UKLSAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxkIHdob3NlIGNv
bnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTc5Nzk3
PiBmb3IgbW9yZSBkZXRhaWxzLgotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFtcGVkU2Nyb2xs
T2Zmc2V0KTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIHNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICB1cGRh
dGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKLQotICAgIGlmIChvcmlnaW5hbFNjcm9sbE9mZnNl
dCAhPSBzY3JvbGxPZmZzZXQoKSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkp
IHsKLSAgICAgICAgc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAg
IHNldE5lZWRzQ29tcG9zaXRpbmdDb25maWd1cmF0aW9uVXBkYXRlKCk7Ci0gICAgfQotCi0gICAg
aWYgKGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgc2V0TmVlZHNQb3N0TGF5
b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25z
dCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Ci17Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93
Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50
ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0
cy52ZXJ0aWNhbFNjcm9sbGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBiYXNlV2lkdGggPSBiYXNlV2lkdGggLyB6b29tRmFjdG9yOworICAg
ICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lk
dGgsIHJvdW5kVG9JbnQoYmFzZVdpZHRoICsgZGlmZmVyZW5jZS53aWR0aCgpKSwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgfQogCi0gICAgaWYgKHJlY3RzLnNjcm9sbENvcm5lci5pbnRlcnNl
Y3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChyZXNpemUgIT0g
UmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYg
KGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8g
TWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0
eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3As
IHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgp
OworICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3Rv
ciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBi
YXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9s
dSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAg
IGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0lu
dChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgp
OworICAgIH0KIAotICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkK
LSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQg
YWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50
IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NP
dmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXpl
KCkgY29uc3QKIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhl
IHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVu
dFdpZHRoKCkpLCByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0
LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29u
dHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewot
ICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYg
KCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKIAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7
CisgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsK
KyAgICAvLyBTY3JvbGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94
LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwogCi0gICAgLy8gT3ZlcmxheSBz
Y3JvbGxiYXJzIHBhaW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBz
byB0aGF0IHRoZXkgd2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2Uu
IElmIHRoaXMgaXMgdGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250
cm9scwotICAgIC8vIHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSBy
b290IGxheWVyIHRoYXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQg
bmVlZCB0byBiZSBwYWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91
Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Ny
b2xsYmFycyB0aGVuLiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRo
ZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRl
clRyZWUgdG8gZ2V0IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
ICFwYWludGluZ092ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3Jv
bGxiYXJPZmZzZXQgPSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3Nh
cnkgdG8gZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5
ZXJzLgotICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIo
KSkgfHwgKG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsK
LSAgICAgICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlm
ICghb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHJlbmRlckJveC5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7Cisg
ICAgYm9vbCBoYXZlUmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7CiAKLSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2lu
Z0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAg
ICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworICAgIE92ZXJm
bG93Q29udHJvbFJlY3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6
ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVM
ZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4g
SW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0g
Y29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4
WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICAgICAg
cGFpbnRpbmdSb290LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3Jv
bGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25l
c3MoKTsKKyAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhp
Y2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVj
ayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdp
Y2UuCi0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xs
YmFycygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zm
c2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAg
ICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0
OworICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lk
Z2V0cyBpZiBuZWNlc3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBk
dXJpbmcgbGF5b3V0LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRo
b3V0IGxheW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1
bWVudCB0aGF0Ci0gICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0g
ICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0
KSk7CitTdHJpbmcgUmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIg
MHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSks
ICcgJywgc2l6ZSgpLndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIE5v
dyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwg
cGFpbnQgdGhlbS4KLSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkKLSAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBp
ZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJh
ci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi0gICAgaWYgKGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICAvLyBXZSBm
aWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0
aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhl
IGJveC4KLSAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0
LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5j
ZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIo
Y29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKGhh
c0JhY2tkcm9wRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9w
IGZpbHRlciJfcyk7CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5l
clJlY3QoKTsKLSAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNS
ZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFz
QmxlbmRNb2RlKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3Mp
OwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAg
ICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoaXNvbGF0ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xh
dGVzIGJsZW5kaW5nIl9zKTsKIAotICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBt
X3Njcm9sbENvcm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVj
dCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAg
Ly8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisg
ICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNr
aW5nKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0K
IAotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVy
bGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhp
bmQgaXQuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlv
dXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCkKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZy
b21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVz
aXplclNpemU7Ci0gICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUo
KTsKLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29y
bmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNv
cm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXpl
Q29ybmVySW1hZ2UpCi0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVy
SW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGlmICghcmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3Qg
aW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3Ju
ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXpl
clNpemUpLCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAg
Y29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1
dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1
dG8gcmVzaXplQ29ybmVyID0gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5l
cjsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0
JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
LQotICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJl
c2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVj
dC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxXaWR0
aCgpOwogCi0gICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAg
ICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3Qo
Y29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJz
UmVjdCk7Ci0KLSAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3Jl
eSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlw
cGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFt
ZS4KLSAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIp
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0
KTsKLSAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0
UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVy
LnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNv
cm5lci5oZWlnaHQoKSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihT
UkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJl
Y3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94
KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0
Lm1heFgoKSAtIG92ZXJmbG93UmVjdC54KCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1Bv
aW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CitpbnQgUmVuZGVy
TGF5ZXI6OnNjcm9sbEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBS
ZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVy
biByb3VuZFRvSW50KG92ZXJmbG93UmVjdC5tYXhZKCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK3ZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1f
dkJhciAmJiAhY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICB1cGRhdGVMYXllclNjcm9sbGFi
bGVBcmVhKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworfQogCi0gICAgSW50UmVjdCBy
ZXNpemVDb250cm9sUmVjdDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9
IFJlc2l6ZTo6Tm9uZSkgewotICAgICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2Nh
bFBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KK2Jvb2wgUmVuZGVyTGF5
ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9s
bGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhy
b3VnaCB0aGUgcmVzdWx0LgotICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJh
ci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJh
cihtX3ZCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Citib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CiAKLSAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJh
ci5jb250YWlucyhsb2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJh
cihtX2hCYXIuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Citib29sIFJlbmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVh
LT5oYXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBS
ZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9p
bnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1
cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKTsKKyAgICBpZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBv
aW50KTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJw
aXhlbE9mZnNldCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogc3VidHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWlu
dEZsYWdzLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lv
bkNvbnRleHQqIGV2ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQyMjUsMTcgKzI4NzcsNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQo
ZmFsc2UpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0
aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJl
ZVBhaW50Um9vdCkKLXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJz
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8o
dGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0
U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50
aW5nSW5mbywgUGFpbnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0g
ICAgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBS
ZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExh
eWVyUGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBw
YWludEJlaGF2aW9yLCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBw
aW5nUnVsZSBydWxlKQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIo
KS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00MjU4LDcgKzI4OTksOCBAQCB2
b2lkIFJlbmRlckxheWVyOjpjbGlwVG9SZWN0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5ZXJQYWludGluZ0luZm8mCiAgICAgICAgIC8vIGFueSBsYXllcnMgd2l0aCBvdmVyZmxv
dy4gVGhlIGNvbmRpdGlvbiBmb3IgYmVpbmcgYWJsZSB0byBhcHBseSB0aGVzZSBjbGlwcyBpcyB0
aGF0IHRoZSBvdmVyZmxvdyBvYmplY3QgYmUgaW4gb3VyCiAgICAgICAgIC8vIGNvbnRhaW5pbmcg
YmxvY2sgY2hhaW4gc28gd2UgY2hlY2sgdGhhdCBhbHNvLgogICAgICAgICBmb3IgKFJlbmRlckxh
eWVyKiBsYXllciA9IHJ1bGUgPT0gSW5jbHVkZVNlbGZGb3JCb3JkZXJSYWRpdXMgPyB0aGlzIDog
cGFyZW50KCk7IGxheWVyOyBsYXllciA9IGxheWVyLT5wYXJlbnQoKSkgewotICAgICAgICAgICAg
aWYgKHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJm
bG93U2Nyb2xsQ29udGVudCkgJiYgbGF5ZXItPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisg
ICAgICAgICAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nID0gbGF5ZXItPnVzZXNDb21w
b3NpdGVkU2Nyb2xsaW5nKCk7CisgICAgICAgICAgICBpZiAocGFpbnRCZWhhdmlvci5jb250YWlu
cyhQYWludEJlaGF2aW9yOjpDb21wb3NpdGVkT3ZlcmZsb3dTY3JvbGxDb250ZW50KSAmJiB1c2Vz
Q29tcG9zaXRlZFNjcm9sbGluZykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5
ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5oYXNCb3JkZXJSYWRpdXMoKSAmJiBhbmNlc3RvckxheWVy
SXNJbkNvbnRhaW5pbmdCbG9ja0NoYWluKCpsYXllcikpIHsKQEAgLTQ3NjEsOCArMzQwMywxMCBA
QCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXllclBhaW50aQogICAgICAgICAgICAgcGFpbnRMaXN0KHBvc2l0aXZl
Wk9yZGVyTGF5ZXJzKCksIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQ
YWludEZsYWdzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNj
cm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQotICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzRm9yRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8pOworICAgICAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICAg
ICAgaWYgKGlzUGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBtX3Njcm9sbGFibGVBcmVhLT5o
YXNTY3JvbGxiYXJzKCkpCisgICAgICAgICAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9y
RnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0lu
Zm8pOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpbHRlckNvbnRleHQpIHsKICAgICAgICAg
ICAgIC8vIFdoZW4gd2UgY2FsbGVkIGNvbGxlY3RGcmFnbWVudHMoKSBsYXN0IHRpbWUsIHBhaW50
RGlydHlSZWN0IHdhcyByZXNldCB0byByZXByZXNlbnQgdGhlIGZpbHRlciBib3VuZHMuCkBAIC01
MjMyLDExICszODc2LDEzIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRDbGlwcGluZ01h
c2tGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyCiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYgbGF5ZXJGcmFnbWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
ZXJQYWludGluZ0luZm8mIGxvY2FsUGFpbnRpbmdJbmZvKQogeworICAgIEFTU0VSVChtX3Njcm9s
bGFibGVBcmVhKTsKKwogICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBsYXllckZyYWdt
ZW50cykgewogICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIHsgfSwgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwotICAgICAgICBwYWlu
dE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5b3V0UG9pbnQo
ZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0aW9uKCkgKyBs
b2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLT5wYWludE92ZXJmbG93Q29udHJvbHMoY29udGV4dCwgcm91bmRlZEludFBvaW50KHRvTGF5
b3V0UG9pbnQoZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSAtIHJlbmRlckJveExvY2F0
aW9uKCkgKyBsb2NhbFBhaW50aW5nSW5mby5zdWJwaXhlbE9mZnNldCkpLAogICAgICAgICAgICAg
c25hcHBlZEludFJlY3QoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QucmVjdCgpKSwgdHJ1ZSk7CiAg
ICAgICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdCk7CiAgICAgfQpAQCAtNTI3NSw3ICszOTIxLDcgQEAgYm9vbCBSZW5kZXJM
YXllcjo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJgogICAgICAgICAgICAgICAgIGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yKTsKICAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChhYnNv
bHV0ZUxheW91dFZpZXdwb3J0UmVjdCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGl0
VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVD
b250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CisgICAgICAgICAgICBo
aXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlzaWJs
ZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0
KSk7CiAgICAgfQogCiAgICAgUmVuZGVyTGF5ZXIqIGluc2lkZUxheWVyID0gaGl0VGVzdExheWVy
KHRoaXMsIG51bGxwdHIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0VGVzdEFyZWEsIGhpdFRlc3RMb2Nh
dGlvbiwgZmFsc2UpOwpAQCAtNTUwNiw3ICs0MTUyLDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNv
bnQKICAgICAgICAgb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3RMYXllcikpOwogCiAgICAgTGF5b3V0
UG9pbnQgbG9jYWxQb2ludDsKLSAgICBpZiAoY2FuUmVzaXplKCkgJiYgaGl0VGVzdFJlc2l6ZXJJ
bkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkg
eworICAgIGlmIChjYW5SZXNpemUoKSAmJiBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJs
ZUFyZWEtPmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RM
b2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgbG9jYWxQb2ludCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0K
QEAgLTU1ODEsMzUgKzQyMjcsNiBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0Q29udGVudHNG
b3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbgogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50
cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2Nh
dGlvbiYgaGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25z
dAotewotICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gYm9yZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0
PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpKTsKLSAgICBhdXRvIHJlY3Rz
ID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBhdXRvIGNvcm5lclJlY3RJbkZyYWdt
ZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBjb25zdCBJbnRSZWN0JiBy
ZXNpemVyUmVjdCkgewotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9s
bGJhck9uTGVmdCgpKSB7Ci0gICAgICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21MZWZ0
ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWluWE1heFlD
b3JuZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWlu
WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50U2l6ZSB7IDAsIHJlc2l6
ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9OwotICAgICAgICB9Ci0gICAg
ICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVyQm94UmVjdC5tYXhYTWF4
WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJv
dHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAg
ICB9OwotCi0gICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNpemUoKSAtIDE7IGkgPj0g
MDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZyYWdtZW50ID0gbGF5ZXJG
cmFnbWVudHMuYXQoaSk7Ci0gICAgICAgIGF1dG8gcmVzaXplclJlY3RJbkZyYWdtZW50ID0gY29y
bmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQubGF5ZXJCb3VuZHMpLCBy
ZWN0cy5yZXNpemVyKTsKLSAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmludGVy
c2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJhZ21lbnQuY29udGFpbnMo
aGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgewotICAgICAgICAgICAgcG9pbnRJbkZy
YWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9pbnQoKSAtIGZyYWdtZW50
LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5k
ZXJMYXllcjo6aGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsCiAgICAgY29uc3QgTGF5b3V0UmVj
dCYgaGl0VGVzdFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgaGl0VGVzdExvY2F0aW9uLCBj
b25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0YXRlLCBkb3VibGUqIHpP
ZmZzZXQpCiB7CkBAIC02MDcxLDcgKzQ2ODgsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTGF5b3V0UmVjdCBy
ZWN0ID0gbV9ibG9ja1NlbGVjdGlvbkdhcHNCb3VuZHM7Ci0gICAgcmVjdC5tb3ZlQnkoLXNjcm9s
bFBvc2l0aW9uKCkpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZWN0Lm1v
dmVCeSgtbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgaWYgKHJlbmRl
cmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCiAg
ICAgICAgIHJlY3QuaW50ZXJzZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkub3Zl
cmZsb3dDbGlwUmVjdChMYXlvdXRQb2ludCgpLCBudWxscHRyKSk7IC8vIEZJWE1FOiBSZWdpb25z
IG5vdCBhY2NvdW50ZWQgZm9yLgogICAgIGlmIChyZW5kZXJlcigpLmhhc0NsaXAoKSkKQEAgLTYz
NjksMjEgKzQ5ODcsNiBAQCBib29sIFJlbmRlckxheWVyOjpoYXNDb21wb3NpdGVkTWFzaygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fYmFja2luZyAmJiBtX2JhY2tpbmctPmhhc01hc2tMYXllcigpOwog
fQogCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZv
ckhvcml6b250YWxTY3JvbGxiYXIoKSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJl
bmRlckxheWVyOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgOiBu
dWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkgOiBudWxscHRyOwotfQotCiBib29sIFJlbmRlckxheWVyOjpwYWlu
dHNXaXRoVHJhbnNmb3JtKE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yKSBj
b25zdAogewogICAgIGJvb2wgcGFpbnRzVG9XaW5kb3cgPSAhaXNDb21wb3NpdGVkKCkgfHwgYmFj
a2luZygpLT5wYWludHNJbnRvV2luZG93KCk7CkBAIC02NDE0LDExICs1MDE3LDYgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6c2hvdWxkQXBwbHlDbGlwUGF0aChPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4g
cGFpbnRCZWhhdmlvciwgT3AKICAgICByZXR1cm4gcGFpbnRGbGFncy5jb250YWlucyhQYWludExh
eWVyRmxhZzo6UGFpbnRpbmdDb21wb3NpdGluZ0NsaXBQYXRoUGhhc2UpOwogfQogCi1ib29sIFJl
bmRlckxheWVyOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKLX0K
LQogYm9vbCBSZW5kZXJMYXllcjo6YmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNv
bnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKIHsKICAgICBpZiAoIWlzU2VsZlBhaW50
aW5nTGF5ZXIoKSAmJiAhaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpCkBAIC02NjU5
LDcgKzUyNTcsNyBAQCBib29sIFJlbmRlckxheWVyOjpoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMo
KSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgp
IHx8IGhhc092ZXJmbG93Q29udHJvbHMoKTsKKyAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29y
YXRpb25zT3JCYWNrZ3JvdW5kKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxl
QXJlYS0+aGFzT3ZlcmZsb3dDb250cm9scygpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNW
aXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKQEAg
LTY2NjksNyArNTI2Nyw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQ
YWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxl
Q29udGVudCgpIHx8ICFyZW5kZXJlcigpLnN0eWxlKCkub3BhY2l0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJlcGxhY2VkKCkgfHwgaGFz
T3ZlcmZsb3dDb250cm9scygpKSB7CisgICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNl
ZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93
Q29udHJvbHMoKSkpIHsKICAgICAgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKQEAgLTY2OTQsMzggKzUyOTIsNiBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3Vh
bGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIHJl
dHVybiBoYXNOb25FbXB0eUNoaWxkUmVuZGVyZXJzKCpyZXF1ZXN0KTsKIH0KIAotdm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKQotewotICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0aGUgc2Nyb2xsYmFycyBieSB0
aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoYm94LT5zdHlsZSgp
LmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgT3Zl
cmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WCgpOwotICAgIE92ZXJmbG93
IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1koKTsKLQotICAgIC8vIFRvIGF2b2lk
IGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0LCB3ZSB0cnkg
dG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0IHdhcyBhbHJlYWR5IHByZXNlbnQu
Ci0gICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xp
cCgpICYmICgoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRp
Y1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJl
cXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpOwotICAg
IGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgJiYg
KChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJh
cihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9s
bGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Ci0gICAgc2V0SGFzSG9yaXpv
bnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwotICAgIHNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOwotCi0gICAgLy8gV2l0aCBub24t
b3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFsd2F5cyB2aXNpYmxlIGJ1
dCBtYXkgYmUgZGlzYWJsZWQuCi0gICAgLy8gV2hlbiBzd2l0Y2hpbmcgdG8gYW5vdGhlciB2YWx1
ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4NSkuCi0gICAgaWYgKG1f
aEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUt
Pm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dYICE9IE92ZXJmbG93
OjpTY3JvbGwpCi0gICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICht
X3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+
b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1kgIT0gT3ZlcmZsb3c6
OlNjcm9sbCkKLSAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAgaWYgKCFt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQo
aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVE
aWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBzZXRJ
c05vcm1hbEZsb3dPbmx5KHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSk7CkBAIC02NzQ2LDYgKzUz
MTIsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlmCiAgICAgfQogCisgICAgdXBk
YXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgLy8gRklYTUU6IFJlbmRlckxheWVyIGFs
cmVhZHkgaGFuZGxlcyB2aXNpYmlsaXR5IGNoYW5nZXMgdGhyb3VnaCBvdXIgdmlzaWJpbGl0eSBk
aXJ0eSBiaXRzLiBUaGlzIGxvZ2ljIGNvdWxkCiAgICAgLy8gbGlrZWx5IGJlIGZvbGRlZCBhbG9u
ZyB3aXRoIHRoZSByZXN0LgogICAgIGlmIChvbGRTdHlsZSkgewpAQCAtNjc1NywxOCArNTMyNSwx
NCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgICAgICB9CiAKICAgICAgICAgLy8gVmlz
aWJpbGl0eSBpcyBpbnB1dCB0byBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkuCi0gICAgICAg
IGlmICh2aXNpYmlsaXR5Q2hhbmdlZCkKLSAgICAgICAgICAgIGNvbXB1dGVIYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCk7CisgICAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlZCAmJiBt
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y29tcHV0ZUhh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKICAgICB9CiAKLSAgICBpZiAocmVuZGVy
ZXIoKS5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlv
cigpICE9IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlcigpLmlzQm94KCkpIHsKLSAg
ICAgICAgaWYgKCFtX21hcnF1ZWUpCi0gICAgICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVl
PFJlbmRlck1hcnF1ZWU+KHRoaXMpOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVT
dHlsZSgpOwotICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQotICAgICAgICBtX21hcnF1ZWUgPSBu
dWxscHRyOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBk
YXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Uob2xkU3R5bGUpOworICAgIH0KICAgICAvLyBP
dmVybGF5IHNjcm9sbGJhcnMgY2FuIG1ha2UgdGhpcyBsYXllciBzZWxmLXBhaW50aW5nIHNvIHdl
IG5lZWQKICAgICAvLyB0byByZWNvbXB1dGUgdGhlIGJpdCBvbmNlIHNjcm9sbGJhcnMgaGF2ZSBi
ZWVuIHVwZGF0ZWQuCiAgICAgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKQEAgLTY3ODMsMTMg
KzUzNDcsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogICAgIH0KICAgICAKICAgICAvLyBG
SVhNRTogTmVlZCB0byBkZXRlY3QgYSBzd2FwIGZyb20gY3VzdG9tIHRvIG5hdGl2ZSBzY3JvbGxi
YXJzIChhbmQgdmljZSB2ZXJzYSkuCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgbV9oQmFyLT5z
dHlsZUNoYW5nZWQoKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnN0eWxlQ2hh
bmdlZCgpOwotICAgIAotICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdXBkYXRl
UmVzaXplclN0eWxlKCk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOwogCiAgICAgdXBk
YXRlRGVzY2VuZGFudERlcGVuZGVudEZsYWdzKCk7CiAgICAgdXBkYXRlVHJhbnNmb3JtKCk7CkBA
IC02ODEwLDk4ICs1MzY5LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogfQog
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KQotewotICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCk7Ci0KLSAgICBib29sIGlzVmlzaWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyKCkudmlz
aWJsZVRvSGl0VGVzdGluZygpOwotICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
ID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCi0gICAgICAgIGlzVmlzaWJsZVRv
SGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIoKS0+dmlzaWJs
ZVRvSGl0VGVzdGluZygpOwotCi0gICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNPdmVyZmxvdyAm
JiBpc1Zpc2libGVUb0hpdFRlc3Q7Ci0gICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9IGZhbHNlOwot
ICAgIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcu
Y29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7Ci0gICAgCi0gICAgaWYgKGlzU2Nyb2xsYWJs
ZSkgewotICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAg
ICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsK
LSAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAgICAg
YWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0g
ICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7Ci0gICAgfQotCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7Ci0gICAg
ICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAg
ICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3Rl
bmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1l
Ci0gICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNo
IGV2ZW50IGxpc3RlbmVyLgotICAgICAgICAgICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9W
QVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byBjb3Ju
ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVu
Y2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyIH0sICZhY3R1YWxS
ZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFjb3JuZXIpIHsKLSAgICAg
ICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghbV9zY3JvbGxDb3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUo
KmNvcm5lcikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGls
ZCBvZiBpdHMgcGFyZW50IQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5k
ZXJlcigpKTsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAg
IH0gZWxzZQotICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgqY29ybmVy
KSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKLXsKLSAgICBp
ZiAoIW1fc2Nyb2xsQ29ybmVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zY3JvbGxDb3JuZXIt
PnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxl
bWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsK
LSAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFs
UmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAm
YWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVzaXplcikg
ewotICAgICAgICBjbGVhclJlc2l6ZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RGTW92ZSgqcmVzaXpl
cikpOwotICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQotICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0g
ICAgICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IG1fcmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpjbGVhclJlc2l6ZXIoKQotewotICAgIGlmICghbV9yZXNpemVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9yZXNpemVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9yZXNpemVy
ID0gbnVsbHB0cjsKLX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpyZWZsZWN0aW9uTGF5
ZXIoKSBjb25zdAogewogICAgIHJldHVybiBtX3JlZmxlY3Rpb24gPyBtX3JlZmxlY3Rpb24tPmxh
eWVyKCkgOiBudWxscHRyOwpAQCAtNjk4Myw2ICs1NDUwLDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNsZWFyTGF5ZXJGaWx0ZXJzKCkKICAgICBtX2ZpbHRlcnMgPSBudWxscHRyOwogfQogCitSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpCit7CisgICAgYm9vbCBoYWRTY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhKCk7
CisgICAgaWYgKCFtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0g
bWFrZVVuaXF1ZTxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPigqdGhpcyk7CisKKyAgICBpZiAo
IWhhZFNjcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zdG9yZVNjcm9s
bFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OmNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKG1f
c2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJTY3JvbGxD
b3JuZXIoKTsKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+Y2xlYXJSZXNpemVyKCk7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogewogICAgIGlmICghaGFzRmls
dGVyKCkpIHsKQEAgLTY5OTksNiArNTQ4NiwxNiBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVG
aWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiAgICAgICAgIG1fZmlsdGVycy0+cmVtb3ZlUmVmZXJl
bmNlRmlsdGVyQ2xpZW50cygpOwogfQogCit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclNj
cm9sbGFibGVBcmVhKCkKK3sKKyAgICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgfHwg
IWRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkucmVxdWlyZXNMYXllcldpdGhTY3JvbGxh
YmxlQXJlYSgpKSB7CisgICAgICAgIGNsZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworfQor
CiB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKIHsKICAg
ICAvLyBSZW5kZXJMYXllckZpbHRlcnMgaXMgb25seSB1c2VkIHRvIHJlbmRlciB0aGUgZmlsdGVy
cyBpbiBzb2Z0d2FyZSBtb2RlLApAQCAtNzAzMyw3ICs1NTMwLDcgQEAgc3RhdGljIFJlbmRlckxh
eWVyKiBwYXJlbnRMYXllckNyb3NzRnJhbWUoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAg
IGlmIChhdXRvKiBwYXJlbnQgPSBsYXllci5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIHBhcmVu
dDsKIAotICAgIHJldHVybiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICBy
ZXR1cm4gbGF5ZXIuZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBib29sIFJlbmRl
ckxheWVyOjppc1RyYW5zcGFyZW50UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CkBAIC03
MDU1LDYgKzU1NTIsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2ltdWxhdGVGcmVxdWVudFBhaW50
KCkKICAgICBTaW5nbGVQYWludEZyZXF1ZW5jeVRyYWNraW5nIHsgbV9wYWludEZyZXF1ZW5jeVRy
YWNrZXIsIHBhZ2UoKS5sYXN0UmVuZGVyaW5nVXBkYXRlVGltZXN0YW1wKCkgfTsKIH0KIAorUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5nZXQoKTsKK30KKwogI2lmICFMT0df
RElTQUJMRUQKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBS
ZW5kZXJMYXllcjo6RXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24gcmVhc29uKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBmMjhjYjQxNDcyN2VmYzY4Mjlh
NjVhOTRjNWZlYmE3YTQ1NmUxZTk5Li45MGI5ODI1ZDViZjljNjY5Njc2NzVlMjM3NDU3MDNhYTRj
ZTA1NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDIwIElnYWxpYSBT
LkwuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2FwZSBDb21t
dW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC01MSw3ICs1Miw2IEBACiAjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHRyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQmVo
YXZpb3IuaCIKLSNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
ICNpbmNsdWRlIDx3dGYvTWFya2FibGUuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgpAQCAt
NzUsNiArNzUsNyBAQCBjbGFzcyBSZW5kZXJHZW9tZXRyeU1hcDsKIGNsYXNzIFJlbmRlckxheWVy
QmFja2luZzsKIGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKIGNsYXNzIFJlbmRlckxheWVy
RmlsdGVyczsKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBSZW5kZXJN
YXJxdWVlOwogY2xhc3MgUmVuZGVyUmVwbGljYTsKIGNsYXNzIFJlbmRlclNjcm9sbGJhclBhcnQ7
CkBAIC0xNDMsMTcgKzE0NCwyMSBAQCBzdHJ1Y3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMg
ewogdXNpbmcgU2Nyb2xsaW5nU2NvcGUgPSB1aW50NjRfdDsKIAogREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwotY2xhc3MgUmVuZGVyTGF5ZXIgZmlu
YWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVuZGVyTGF5ZXI+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RF9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7CiBwdWJsaWM6CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlclJlcGxpY2E7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyRmlsdGVy
czsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJCYWNraW5nOwogICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE7CiAKICAgICBleHBsaWNpdCBSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVs
T2JqZWN0Jik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXIoKTsKIAorICAgIFdFQkNPUkVfRVhQ
T1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAvLyBDYWxs
ZWQgYmVmb3JlIHRoZSByZW5kZXJlcidzIHdpZGdldCAoaWYgYW55KSBoYXMgYmVlbiBudWxsZWQg
b3V0LgogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCk7CkBAIC0yMjMsNiArMjI4LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkKGJvb2wgZmxhZykgeyBt
X2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCA9IGZsYWc7IH0KICNlbmRpZgogCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkZXN0cm95KCk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgZmxhZ3MgcHJv
cGFnYXRlIGluIHBhaW50IG9yZGVyICh6LW9yZGVyIHRyZWUpLgogICAgIGVudW0gY2xhc3MgQ29t
cG9zaXRpbmcgewpAQCAtNDExLDggKzQxOSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVD
aGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAot
ICAgIFJlbmRlck1hcnF1ZWUqIG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0
KCk7IH0KLQogICAgIGJvb2wgaXNTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNTZWxmUGFpbnRpbmdMYXllcjsgfQogCiAgICAgYm9vbCBjYW5ub3RCbGl0VG9XaW5kb3coKSBj
b25zdDsKQEAgLTQzMywxMDcgKzQzOSwyOSBAQCBwdWJsaWM6CiAKICAgICBMYXlvdXRSZWN0IHJl
Y3QoKSBjb25zdCB7IHJldHVybiBMYXlvdXRSZWN0KGxvY2F0aW9uKCksIHNpemUoKSk7IH0KIAot
ICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIGNvbnRl
bnRzU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50
c1NpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3Q7CiAK
ICAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKICAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29u
c3Q7CiAKLSAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOwotCi0g
ICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIg
b3ZlcmZsb3cuCi0gICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRl
bHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwotCi0gICAgYm9v
bCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3Jv
bGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCkgZmluYWw7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFt
bWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9s
bE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOwotCi0gICAgdm9pZCBzY3JvbGxUb1hQ
b3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGlu
Zzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotICAgIHZv
aWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0g
U2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6
Ok5vKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwg
U2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5p
bWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwotCi0gICAgLy8gVGhlc2UgYXJlIG9u
bHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNj
cm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0gICAgdm9p
ZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNj
cm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xh
bXBpbmc6OlVuY2xhbXBlZCk7IH0KLQotICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Ci0gICAgdm9pZCBhcHBseVBvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7Ci0KICAgICAvLyBSZXR1cm5zIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBsYXllciB0aGF0IGlzIHNjcm9sbGFibGUuCiAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHJldHVybiB0aGUgUmVuZGVyVmlldydzIGxheWVyIHdoZW4gY2FsbGVycyBwcm9iYWJseSB3YW50
IHRoZSBGcmFtZVZpZXcgYXMgYSBTY3JvbGxhYmxlQXJlYS4KICAgICBSZW5kZXJMYXllciogZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3QsIENyb3NzRnJhbWVCb3VuZGFy
aWVzKSBjb25zdDsKIAotICAgIHZvaWQgYXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWls
YWJsZVNpemVDaGFuZ2VSZWFzb24pIGZpbmFsOwotCiAgICAgLy8gImFic29sdXRlUmVjdCIgaXMg
aW4gc2NhbGVkIGRvY3VtZW50IGNvb3JkaW5hdGVzLgogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlz
aWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNv
bnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7Ci0KLSAgICBib29sIHNjcm9sbHNPdmVy
ZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hCYXIgfHwgbV92QmFy
OyB9Ci0gICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wpOwotICAgIHZvaWQg
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCk7Ci0KLSAgICBSZWY8U2Nyb2xsYmFyPiBjcmVh
dGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotICAgIHZvaWQgZGVzdHJveVNjcm9s
bGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7Ci0KLSAgICBib29sIGhhc0hvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KLSAgICBib29s
IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIo
KTsgfQotCi0gICAgYm9vbCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBvdmVycmlkZXMKLSAgICBTY3JvbGxQb3Np
dGlvbiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2Nyb2xsUG9zaXRp
b247IH0KLQotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1faEJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxhYmxl
QXJlYSogZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wg
aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBP
cHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1cmVTdGF0ZT4pIGZpbmFsOwotICAgIGJvb2wgaXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpIGZpbmFsOwotICAgIGJvb2wgaGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpIGZpbmFsOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFu
Y2UoKSBjb25zdCBmaW5hbDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQg
dXBkYXRlU25hcE9mZnNldHMoKSBmaW5hbDsKLSNlbmRpZgotCi0gICAgYm9vbCByZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQotICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUp
IHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29u
Y2lsaWF0aW9uOyB9Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRv
dWNoRXZlbnQmKSBmaW5hbDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZGlkU3RhcnRTY3JvbGwo
KSBmaW5hbDsKLSAgICB2b2lkIGRpZEVuZFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkVXBk
YXRlU2Nyb2xsKCkgZmluYWw7Ci0jZW5kaWYKLQogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRo
ZSBsYXllciBjb3VsZCBkbyB0b3VjaCBzY3JvbGxpbmcsIGJ1dCBkb2Vzbid0IGxvb2sgYXQgd2hl
dGhlciB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93LgogICAgIGJvb2wgY2Fu
VXNlQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OwogICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVu
IHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cgKHJlcXVpcmVzIGxheW91dCB0
byBiZSB1cC10by1kYXRlKS4KLSAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3c7IH0K
KyAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSBjb25zdDsKIAotICAg
IGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OwotICAgIGludCBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGJvb2wgaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSBjb25zdDsKIAotICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwogICAgIGJv
b2wgaXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50KSBjb25zdDsKLSAg
ICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKLSAg
ICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdm9pZCBwYWludFJlc2l6ZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CiAKLSAg
ICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyID0gMSk7CiAgICAgdm9pZCBhdXRvc2Nyb2xsKGNvbnN0IEludFBvaW50Jik7CiAK
ICAgICBib29sIGNhblJlc2l6ZSgpIGNvbnN0OwpAQCAtNTU2LDkgKzQ4NCw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTdHlsZUNoYW5nZSgpOwogICAgIHZv
aWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0
cmVlLCBib29sIGRpZEZ1bGxSZXBhaW50KTsKIAotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyRG9jdW1lbnRTY3JvbGwoKTsKLQogICAgIGJvb2wgaGFzQ29tcG9zaXRlZExheWVySW5FbmNs
b3NpbmdQYWdpbmF0aW9uQ2hhaW4oKSBjb25zdDsKICAgICBlbnVtIFBhZ2luYXRpb25JbmNsdXNp
b25Nb2RlIHsgRXhjbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMsIEluY2x1ZGVDb21wb3Np
dGVkUGFnaW5hdGVkTGF5ZXJzIH07CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRp
b25MYXllcihQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSBtb2RlKSBjb25zdApAQCAtNjM4LDYgKzU2
Myw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3Np
dGlvbihQb3NpdGlvblR5cGUpIGNvbnN0OwogICAgIAogICAgIFJlbmRlckxheWVyKiBlbmNsb3Np
bmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciog
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0
OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3Q7CiAK
ICAgICAvLyBUaGUgbGF5ZXIgcmVsYXRpdmUgdG8gd2hpY2ggY2xpcHBpbmcgcmVjdHMgZm9yIHRo
aXMgbGF5ZXIgYXJlIGNvbXB1dGVkLgogICAgIFJlbmRlckxheWVyKiBjbGlwcGluZ1Jvb3RGb3JQ
YWludGluZygpIGNvbnN0OwpAQCAtNjk5LDcgKzYyNiw2IEBAIHB1YmxpYzoKICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0ciwgT3B0aW9uU2V0PFBhaW50TGF5
ZXJGbGFnPiA9IHsgfSwgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9IFNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpY3k6OkFueU9yaWdpbiwgRXZlbnRSZWdpb25Db250ZXh0KiA9IG51bGxwdHIpOwog
ICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmKTsK
ICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0UmVzdWx0Jik7Ci0gICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJz
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNl
dDxQYWludEJlaGF2aW9yPiwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0
cik7CiAKICAgICBzdHJ1Y3QgQ2xpcFJlY3RzQ29udGV4dCB7CiAgICAgICAgIENsaXBSZWN0c0Nv
bnRleHQoY29uc3QgUmVuZGVyTGF5ZXIqIGluUm9vdExheWVyLCBDbGlwUmVjdHNUeXBlIGluQ2xp
cFJlY3RzVHlwZSwgT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgaW5PdmVybGF5U2Nyb2xs
YmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplLCBTaG91bGRSZXNw
ZWN0T3ZlcmZsb3dDbGlwIGluUmVzcGVjdE92ZXJmbG93Q2xpcCA9IFJlc3BlY3RPdmVyZmxvd0Ns
aXApCkBAIC03ODUsMTEgKzcxMSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0YXRpY0lubGlu
ZVBvc2l0aW9uKExheW91dFVuaXQgcG9zaXRpb24pIHsgbV9zdGF0aWNJbmxpbmVQb3NpdGlvbiA9
IHBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTdGF0aWNCbG9ja1Bvc2l0aW9uKExheW91dFVuaXQg
cG9zaXRpb24pIHsgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uID0gcG9zaXRpb247IH0KIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQot
ICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
ID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0jZW5kaWYKLQogICAgIGJvb2wg
aGFzVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gcmVuZGVyZXIoKS5oYXNUcmFuc2Zvcm0oKTsg
fQogICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybSBoYXMgdGhlIHRyYW5zZm9ybS1vcmln
aW4gYmFrZWQgaW4uCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgqIHRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhbnNmb3JtLmdldCgpOyB9CkBAIC04NTksMTYgKzc4MCwxMSBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBlbnN1cmVCYWNraW5nKCk7CiAgICAgdm9pZCBj
bGVhckJhY2tpbmcoYm9vbCBsYXllckJlaW5nRGVzdHJveWVkID0gZmFsc2UpOwogCi0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFs
OwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7
Ci0KLSAgICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0gICAg
Ym9vbCB1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLQogICAgIGJvb2wgaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3I7IH0KICAgICB2b2lkIHNldEhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdB
bmNlc3Rvcihib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcikgeyBtX2hhc0NvbXBv
c2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA9IGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rvcjsg
fQogCisgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0OworCiAgICAgLy8g
TGF5ZXJzIHdpdGggdGhlIHNhbWUgU2Nyb2xsaW5nU2NvcGUgYXJlIHNjcm9sbGVkIGJ5IHNvbWUg
Y29tbW9uIGFuY2VzdG9yIHNjcm9sbGVyLiBVc2VkIGZvciBhc3luYyBzY3JvbGxpbmcuCiAgICAg
T3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGJveFNjcm9sbGluZ1Njb3BlKCkgY29uc3QgeyByZXR1
cm4gbV9ib3hTY3JvbGxpbmdTY29wZTsgfQogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBj
b250ZW50c1Njcm9sbGluZ1Njb3BlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50c1Njcm9sbGlu
Z1Njb3BlOyB9CkBAIC04ODYsMTEgKzgwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgcXVlcnkg
cmVjdCBpcyBnaXZlbiBpbiBsb2NhbCBjb29yZGluYXRlcy4KICAgICBib29sIGJhY2tncm91bmRJ
c0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICBi
b29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKLQotICAgIGJvb2wgY29u
dGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KLSAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQotCiAgICAgYm9vbCBwYWludHNXaXRoRmls
dGVycygpIGNvbnN0OwogICAgIGJvb2wgcmVxdWlyZXNGdWxsTGF5ZXJJbWFnZUZvckZpbHRlcnMo
KSBjb25zdDsKIApAQCAtOTE5LDggKzgzMCw2IEBAIHB1YmxpYzoKIAogICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvd0FuY2VzdG9yKCkgY29uc3Q7CiAKLSAgICBib29sIHNo
b3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQo
KTsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzaW11bGF0ZUZyZXF1ZW50UGFpbnQoKTsK
ICAgICBib29sIHBhaW50aW5nRnJlcXVlbnRseSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRGcmVx
dWVuY3lUcmFja2VyLnBhaW50aW5nRnJlcXVlbnRseSgpOyB9CiAKQEAgLTkzMSw3ICs4NDAsNyBA
QCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiB7
IFBhaW50LCBTZXR0aW5nRGlkQ2hhbmdlLCBTdHlsZSwgTm9uQ29tcG9zaXRlZEZyYW1lIH07CiAg
ICAgYm9vbCBpbnZhbGlkYXRlRXZlbnRSZWdpb24oRXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFz
b24pOwogCi0gICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdCBmaW5hbDsKKyAgICBT
dHJpbmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0OwogCiBwcml2YXRlOgogCkBAIC0xMDExLDkg
KzkyMCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7
CiAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQo
KTsKLQogICAgIGVudW0gVXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnIHsKICAgICAgICAgQ2hlY2tG
b3JSZXBhaW50ICAgICAgICAgICAgICAgICAgICAgPSAxIDw8IDAsCiAgICAgICAgIE5lZWRzRnVs
bFJlcGFpbnRJbkJhY2tpbmcgICAgICAgICAgID0gMSA8PCAxLApAQCAtMTAzOSw4ICs5NDUsNiBA
QCBwcml2YXRlOgogICAgIH07CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Ny
b2xsKFJlbmRlckdlb21ldHJ5TWFwKiwgT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJTY3JvbGxGbGFnPiA9IHsgfSk7CiAKLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7Ci0KICAgICBSZW5kZXJMYXllciogZW5jbG9z
aW5nUGFnaW5hdGlvbkxheWVySW5TdWJ0cmVlKGNvbnN0IFJlbmRlckxheWVyKiByb290TGF5ZXIs
IFBhZ2luYXRpb25JbmNsdXNpb25Nb2RlKSBjb25zdDsKIAogICAgIExheW91dFBvaW50IHJlbmRl
ckJveExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSA/
IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkubG9jYXRpb24oKSA6IExheW91dFBvaW50
KCk7IH0KQEAgLTEwNTQsNiArOTU4LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVuc3VyZUxheWVy
RmlsdGVycygpOwogICAgIHZvaWQgY2xlYXJMYXllckZpbHRlcnMoKTsKIAorICAgIHZvaWQgdXBk
YXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgIHZvaWQgY2xlYXJMYXllclNjcm9sbGFibGVB
cmVhKCk7CisKICAgICBSZW5kZXJMYXllckZpbHRlcnMqIGZpbHRlcnNGb3JQYWludGluZyhHcmFw
aGljc0NvbnRleHQmLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KSBjb25zdDsKICAgICBHcmFw
aGljc0NvbnRleHQqIHNldHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29u
dGV4dCwgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+LCBjb25z
dCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlcnMoR3Jh
cGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBjb25zdCBMYXllckZyYWdtZW50cyYpOwpAQCAtMTEw
MCw2NCArMTAwNywxMyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRz
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3Qm
IGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25z
dDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdt
ZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsK
LSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBj
b25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50
cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91
dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7
CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3Qg
TGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRl
U2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dz
T3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwotCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGlu
Z0xheWVyKCkgY29uc3Q7CiAKLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBi
b29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmlu
YWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0Jikg
ZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3Jv
bGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJS
ZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFs
OwotICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0
IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBj
b252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQm
KSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmlu
YWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250
ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNv
bnN0IGZpbmFsOwotICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNj
cm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJv
b2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5n
KCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNl
c01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9s
bEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFi
bGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2
b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUg
c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9v
bCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JD
aGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7CkBAIC0xMTk3LDE0ICsxMDUzLDYgQEAgcHJp
dmF0ZToKICAgICAvLyBDb252ZXJ0IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5
ZXIgY29vcmRzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2lu
dCBhYnNvbHV0ZVRvQ29udGVudHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZv
aWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwot
ICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsK
LQotICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFn
aW5hdGlvbigpOwogCiAgICAgdm9pZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBi
KSAgeyBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTMsMTEgKzEwNjEs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihJbmRp
cmVjdENvbXBvc2l0aW5nUmVhc29uIHJlYXNvbikgeyBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFz
b24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVhc29uKTsgfQogICAgIGJvb2wgbXVzdENvbXBv
c2l0ZUZvckluZGlyZWN0UmVhc29ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvbjsgfQogCi0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OwotICAg
IExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJm
bG93TGVmdCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0Owot
CiAgICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJlY3RzIHsKICAgICAgICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyOwogICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAt
MTIzMCw4ICsxMDczLDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIE92ZXJmbG93Q29udHJvbFJl
Y3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OwogCi0gICAgYm9vbCBvdmVyZmxvd0Nv
bnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OwotCiAg
ICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwogCiAgICAg
Y29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDgsNyArMTA4OSw2IEBA
IHByaXZhdGU6CiAgICAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3Vy
cmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFu
ZCBzdG9wLgogICAgIGJvb2wgbV9pblJlc2l6ZU1vZGUgOiAxOwogCi0gICAgYm9vbCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAx
OwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24n
dCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVh
ZCB0bwpAQCAtMTI2MCwxNCArMTEwMCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkg
ZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYmxlbmQpLgogICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rp
b24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lk
ZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5z
aWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBt
X3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29u
dGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwog
ICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3
cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI3OCw3ICsx
MTE2LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVk
RGVzY2VuZGFudHMgOiAxOwogICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0
b3IgOiAxOyAvLyBJbiB0aGUgbGF5ZXItb3JkZXIgdHJlZS4KLSAgICBib29sIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CiAKICAgICBib29sIG1faGFzVHJhbnNmb3JtZWRB
bmNlc3RvciA6IDE7CiAgICAgYm9vbCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CkBA
IC0xMjg4LDE3ICsxMTI1LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24gOiA0OyAvLyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5z
aWduZWQgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZp
ZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3Rl
cmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9v
bCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJv
b2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wg
bV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGlu
Z01hcnF1ZWVQb3NpdGlvbiA6IDE7Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9s
YXllckxpc3RNdXRhdGlvbkFsbG93ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM5LDI1ICsxMTY1LDEx
IEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6
ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0g
ICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwot
Ci0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRT
aXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2Ug
aGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7
Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENs
aXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hlOwotICAgIAotICAgIEludFBvaW50IG1fY2Fj
aGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKIAogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3Bl
LCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxp
bmdTY29wZTsKICAgICBNYXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRy
YWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxt
YXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNv
bHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAg
ICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9zaXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0
YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY3LDEwICsxMTc5LDYgQEAgcHJpdmF0ZToKICAgICAv
LyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWly
IG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVj
dGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5l
ciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3Jv
bGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsK
LQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNl
ZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAg
ICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKQEAg
LTEzNzgsNiArMTE4Niw3IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
TGF5ZXJGaWx0ZXJzPiBtX2ZpbHRlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVy
QmFja2luZz4gbV9iYWNraW5nOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhPiBtX3Njcm9sbGFibGVBcmVhOwogICAgIAogICAgIFBhaW50RnJlcXVlbmN5VHJh
Y2tlciBtX3BhaW50RnJlcXVlbmN5VHJhY2tlcjsKIH07CkBAIC0xNDUwLDYgKzEyNTksMyBAQCB2
b2lkIHNob3dQYWludE9yZGVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJMYXllciopOwogdm9p
ZCBzaG93TGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlck9iamVjdCopOwogI2VuZGlmCiAK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6UmVuZGVyTGF5ZXIpCi0gICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhJiBhcmVhKSB7
IHJldHVybiBhcmVhLmlzUmVuZGVyTGF5ZXIoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19F
TkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAppbmRleCAxMWQ5NGExMWU4Y2ZlZDI2N2M4NTUxMjgyNjJiZmU3MjBkM2YwYzA3Li45ZGQxNjI3
ODgwMGEyMjU0ZTcwNTRkZDdjYjhmYWY4YzNkM2QzOGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTgsOCArNTgsOSBAQAogI2lu
Y2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC00MTgsMTEgKzQxOSwxMyBAQCBzdGF0aWMgVGlsZWRCYWNr
aW5nOjpUaWxlQ292ZXJhZ2UgY29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJhZ2UoY29u
c3QgUmVuZAogICAgIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIHRpbGVDb3ZlcmFnZSA9IFRp
bGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWaXNpYmxlQXJlYTsKICAgICBib29sIHVzZU1pbmltYWxU
aWxlc0R1cmluZ0xpdmVSZXNpemUgPSBmcmFtZVZpZXcuaW5MaXZlUmVzaXplKCk7CiAgICAgaWYg
KCF1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplKSB7Ci0gICAgICAgIGlmIChsYXllci5o
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkpCi0gICAgICAgICAgICB0aWxlQ292ZXJh
Z2UgfD0gVGlsZWRCYWNraW5nOjpDb3ZlcmFnZUZvckhvcml6b250YWxTY3JvbGxpbmc7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKSB7
CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkpCisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2lu
Zzo6Q292ZXJhZ2VGb3JIb3Jpem9udGFsU2Nyb2xsaW5nOwogCi0gICAgICAgIGlmIChsYXllci5o
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICAgICAgdGlsZUNvdmVyYWdl
IHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkp
CisgICAgICAgICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VG
b3JWZXJ0aWNhbFNjcm9sbGluZzsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdGlsZUNv
dmVyYWdlOwogfQpAQCAtMTIyOCw5ICsxMjMxLDEyIEBAIExheW91dFJlY3QgUmVuZGVyTGF5ZXJC
YWNraW5nOjpjb21wdXRlUGFyZW50R3JhcGhpY3NMYXllclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIq
CiAgICAgfQogCiAgICAgaWYgKGNvbXBvc2l0ZWRBbmNlc3Rvci0+aGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVDb21wb3NpdGVkQW5j
ZXN0b3IgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFT
U0VSVChzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yKTsKKwogICAgICAgICBMYXlvdXRSZWN0
IGFuY2VzdG9yQ29tcG9zaXRlZEJvdW5kcyA9IGFuY2VzdG9yQmFja2luZy0+Y29tcG9zaXRlZEJv
dW5kcygpOwogICAgICAgICBMYXlvdXRSZWN0IHNjcm9sbENvbnRhaW5lckJveCA9IHNjcm9sbENv
bnRhaW5lckxheWVyQm94KGFuY2VzdG9yUmVuZGVyQm94KTsKLSAgICAgICAgU2Nyb2xsT2Zmc2V0
IHNjcm9sbE9mZnNldCA9IGNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAg
ICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlQ29tcG9zaXRlZEFuY2Vz
dG9yLT5zY3JvbGxPZmZzZXQoKTsKICAgICAgICAgcGFyZW50R3JhcGhpY3NMYXllclJlY3QgPSBM
YXlvdXRSZWN0KChzY3JvbGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHRvTGF5b3V0U2l6ZShh
bmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMubG9jYXRpb24oKSkgLSB0b0xheW91dFNpemUoc2Nyb2xs
T2Zmc2V0KSksIHNjcm9sbENvbnRhaW5lckJveC5zaXplKCkpOwogICAgIH0KIApAQCAtMTM2Nyw3
ICsxMzczLDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25z
dCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgICAgICBtX3Njcm9sbENvbnRh
aW5lckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KHNjcm9sbENvbnRhaW5lckJveC5sb2Nh
dGlvbigpIC0gcGFyZW50TGF5ZXJCb3VuZHMubG9jYXRpb24oKSkpOwogICAgICAgICBtX3Njcm9s
bENvbnRhaW5lckxheWVyLT5zZXRTaXplKHJvdW5kZWRJbnRTaXplKExheW91dFNpemUoc2Nyb2xs
Q29udGFpbmVyQm94LndpZHRoKCksIHNjcm9sbENvbnRhaW5lckJveC5oZWlnaHQoKSkpKTsKIAot
ICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gbV9vd25pbmdMYXllci5zY3JvbGxP
ZmZzZXQoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5z
Y3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAg
ICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxP
ZmZzZXQoKTsKICAgICAgICAgdXBkYXRlU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCk7CiAKICAg
ICAgICAgRmxvYXRTaXplIG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ID0gbV9zY3JvbGxDb250YWlu
ZXJMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCk7CkBAIC0xMzgxLDcgKzEzOTAsOSBAQCB2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNv
bXBvc2l0ZWRBbmNlc3RvcikKIAogICAgICAgICBib29sIHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2Vk
ID0gb2xkU2Nyb2xsaW5nTGF5ZXJPZmZzZXQgIT0gbV9zY3JvbGxDb250YWluZXJMYXllci0+b2Zm
c2V0RnJvbVJlbmRlcmVyKCk7CiAKLSAgICAgICAgSW50U2l6ZSBzY3JvbGxTaXplKG1fb3duaW5n
TGF5ZXIuc2Nyb2xsV2lkdGgoKSwgbV9vd25pbmdMYXllci5zY3JvbGxIZWlnaHQoKSk7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsU2l6ZTsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllcikKKyAg
ICAgICAgICAgIHNjcm9sbFNpemUgPSBJbnRTaXplKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsV2lk
dGgoKSwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKSk7CiAgICAgICAgIGlmIChzY3Jv
bGxTaXplICE9IG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5zaXplKCkgfHwgcGFkZGluZ0JveE9m
ZnNldENoYW5nZWQpCiAgICAgICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVl
ZHNEaXNwbGF5KCk7CiAKQEAgLTE0OTAsMTQgKzE1MDEsMTcgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnNldExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKFNjcm9sbE9mZnNldCBzY3JvbGxP
ZmZzZXQKIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldChTY3Jv
bGxPZmZzZXQgc2Nyb2xsT2Zmc2V0KQogewotICAgIGlmIChtX293bmluZ0xheWVyLmN1cnJlbnRT
Y3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgeworICAgIGF1dG8qIHNjcm9sbGFibGVM
YXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xs
YWJsZUxheWVyKTsKKworICAgIGlmIChzY3JvbGxhYmxlTGF5ZXItPmN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgewogICAgICAgICAvLyBJZiBzY3JvbGxpbmcgaXMgaGFw
cGVuaW5nIGV4dGVybmFsbHksIHdlIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGxheWVyIGJvdW5k
cyBvcmlnaW4gaGVyZSBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZSBqaXR0ZXIuCiAgICAgICAgIHNl
dExvY2F0aW9uT2ZTY3JvbGxlZENvbnRlbnRzKHNjcm9sbE9mZnNldCwgU2Nyb2xsaW5nTGF5ZXJQ
b3NpdGlvbkFjdGlvbjo6U3luYyk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKHRydWUpOworICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaW1wbGVtZW50IHRoZSBjb250ZW50cyBv
ZmZzZXQgdmlhIHRoZSBib3VuZHMgb3JpZ2luIG9uIHRoaXMgbGF5ZXIsIHJhdGhlciB0aGFuIGEg
cG9zaXRpb24gb24gdGhlIHN1YmxheWVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRD
b250ZW50cyhzY3JvbGxPZmZzZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlNldCk7
Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2ls
aWF0aW9uKGZhbHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9s
bFBvc2l0aW9uUmVjb25jaWxpYXRpb24oZmFsc2UpOwogICAgIH0KIAogICAgIEFTU0VSVChtX3Nj
cm9sbGVkQ29udGVudHNMYXllci0+cG9zaXRpb24oKS5pc1plcm8oKSk7CkBAIC0xOTA5LDcgKzE5
MjMsOSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ2xpcHBpbmdTdGFja0xheWVy
R2VvbWV0cnkoTGF5ZXJBbmNlc3RvckNsaXBwaW5nUwogICAgICAgICBlbnRyeS5jbGlwcGluZ0xh
eWVyLT5zZXRTaXplKHNuYXBwZWRDbGlwcGluZ0xheWVyUmVjdC5zaXplKCkpOwogCiAgICAgICAg
IGlmIChlbnRyeS5jbGlwRGF0YS5pc092ZXJmbG93U2Nyb2xsKSB7Ci0gICAgICAgICAgICBTY3Jv
bGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllciA/IGVu
dHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpIDogU2Nyb2xsT2Zmc2V0
KCk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVudHJ5LmNsaXBEYXRhLmNsaXBwaW5nTGF5ZXIg
PyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cikKKyAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bE9mZnNldCgpOwogCiAgICAgICAgICAgICBlbnRyeS5jbGlwcGluZ0xheWVyLT5zZXRCb3VuZHNP
cmlnaW4oc2Nyb2xsT2Zmc2V0KTsKICAgICAgICAgICAgIGxhc3RDbGlwTGF5ZXJSZWN0Lm1vdmVC
eSgtc2Nyb2xsT2Zmc2V0KTsKQEAgLTIwMTEsMTIgKzIwMjcsMTYgQEAgYm9vbCBSZW5kZXJMYXll
ckJhY2tpbmc6OnJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
IGNvbnN0CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0hvcml6b250YWxTY3Jv
bGxiYXJMYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3JvbGxi
YXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAg
IHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+aG9yaXpv
bnRhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5
ZXJCYWNraW5nOjpyZXF1aXJlc1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAg
IHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIudmVydGljYWxT
Y3JvbGxiYXIoKSk7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5
ZXIuc2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHJlcXVpcmVzTGF5ZXJGb3JTY3Jv
bGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKTsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5l
ckxheWVyKCkgY29uc3QKQEAgLTIwMjQsMTIgKzIwNDQsMTYgQEAgYm9vbCBSZW5kZXJMYXllckJh
Y2tpbmc6OnJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdAogICAgIGlmICghaXM8UmVu
ZGVyQm94PihtX293bmluZ0xheWVyLnJlbmRlcmVyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNS
ZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxh
YmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gY29ybmVyUmVjdCA9
IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JS
ZXNpemVyUmVjdCgpOwogICAgIGlmIChjb3JuZXJSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IG1fb3duaW5nTGF5ZXIu
dmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBhdXRvIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xs
YmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBtX293bmluZ0xheWVyLmhvcml6b250YWxTY3JvbGxi
YXIoKTsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsYWJsZUxheWVyLT52ZXJ0
aWNhbFNjcm9sbGJhcigpOworICAgIGF1dG8gc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIg
PyB2ZXJ0aWNhbFNjcm9sbGJhciA6IHNjcm9sbGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpOwogICAgIHJldHVybiByZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGJhcik7CiB9
CiAKQEAgLTIwNjUsMTAgKzIwODksMTIgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZU92ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKICAgICBs
YXllcnNDaGFuZ2VkIHw9IGNyZWF0ZU9yRGVzdHJveUxheWVyKG1fbGF5ZXJGb3JTY3JvbGxDb3Ju
ZXIsIG5lZWRzU2Nyb2xsQ29ybmVyTGF5ZXIsIHRydWUsICJzY3JvbGwgY29ybmVyIik7CiAKICAg
ICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX293bmluZ0xheWVyLnBhZ2UoKS5z
Y3JvbGxpbmdDb29yZGluYXRvcigpKSB7Ci0gICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFy
TGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFi
bGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgSG9yaXpvbnRhbFNj
cm9sbGJhcik7Ci0gICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAg
ICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxh
eWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEo
KSkgeworICAgICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisg
ICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xs
YmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVMYXllciwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGxheWVyc0NoYW5nZWQ7CkBAIC0yMDc2LDcgKzIxMDIs
OCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKCkKIHsKLSAgICBpZiAoIW1fb3duaW5nTGF5
ZXIuaGFzU2Nyb2xsYmFycygpKQorICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5n
TGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllciB8fCAhc2Ny
b2xsYWJsZUxheWVyLT5oYXNTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZJWE1FOiBTaG91bGQgZG8gZGV2aWNlLXBpeGVsIHNuYXBwaW5nLgpAQCAtMjA5OCwxNiArMjEy
NSwxNSBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xz
TGF5ZXJzKCkKICAgICB9OwogCiAgICAgLy8gVGhlc2UgcmVjdHMgYXJlIHJlbGF0aXZlIHRvIHRo
ZSBib3JkZXJCb3hSZWN0LgotICAgIGF1dG8gcmVjdHMgPSBtX293bmluZ0xheWVyLm92ZXJmbG93
Q29udHJvbHNSZWN0cygpOwotCisgICAgYXV0byByZWN0cyA9IHNjcm9sbGFibGVMYXllci0+b3Zl
cmZsb3dDb250cm9sc1JlY3RzKCk7CiAgICAgaWYgKGF1dG8qIGxheWVyID0gbGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkpIHsKICAgICAgICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5
ZXIsIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7Ci0gICAgICAg
IGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFy
KCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKKyAgICAgICAgbGF5ZXItPnNldERy
YXdzQ29udGVudChzY3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSAmJiAhbGF5
ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0KIAogICAgIGlmIChhdXRvKiBsYXllciA9
IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewogICAgICAgICBwb3NpdGlvblNjcm9sbGJh
ckxheWVyKCpsYXllciwgcmVjdHMudmVydGljYWxTY3JvbGxiYXIsIHBhZGRpbmdCb3hJbnNldCk7
Ci0gICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobV9vd25pbmdMYXllci52ZXJ0aWNhbFNj
cm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CisgICAgICAgIGxheWVy
LT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpICYm
ICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIGxh
eWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewpAQCAtMzA4Niw3ICszMTEyLDEwIEBAIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRDb250ZW50c05lZWREaXNwbGF5SW5SZWN0KGNvbnN0
IExheW91dFJlY3QmIHIsIEdyYXBoCiAKICAgICBpZiAobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXIg
JiYgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEZs
b2F0UmVjdCBsYXllckRpcnR5UmVjdCA9IHBpeGVsU25hcHBlZFJlY3RGb3JQYWludGluZzsKLSAg
ICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNl
dEZyb21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKG1fb3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0
KCkpIC0gbV9zdWJwaXhlbE9mZnNldEZyb21SZW5kZXJlcik7CisgICAgICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQ7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293
bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBz
Y3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBsYXllckRpcnR5UmVjdC5t
b3ZlKC1tX3Njcm9sbGVkQ29udGVudHNMYXllci0+b2Zmc2V0RnJvbVJlbmRlcmVyKCkgKyB0b0xh
eW91dFNpemUoc2Nyb2xsT2Zmc2V0KSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwog
ICAgICAgICBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxh
eWVyRGlydHlSZWN0LCBzaG91bGRDbGlwKTsKICAgICB9CiB9CkBAIC0zMTMyLDcgKzMxNjEsOCBA
QCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NM
YXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAgICAgICBpZiAoJmxheWVyID09ICZtX293bmlu
Z0xheWVyKSB7CiAgICAgICAgICAgICBsYXllci5wYWludExheWVyQ29udGVudHMoY29udGV4dCwg
cGFpbnRpbmdJbmZvLCBwYWludEZsYWdzKTsKIAotICAgICAgICAgICAgaWYgKGxheWVyLmNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAg
ICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpOwor
ICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllciAmJiBzY3JvbGxhYmxlTGF5ZXItPmNvbnRh
aW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCiAgICAg
ICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXllckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5m
bywgcGFpbnRGbGFncyB8IFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVy
bGF5U2Nyb2xsYmFycyk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbGF5ZXIucGFpbnRM
YXllcldpdGhFZmZlY3RzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CkBAIC0z
NDE4LDE3ICszNDQ4LDI2IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRz
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXBoCiAgICAgICAgICAgICBw
YWludERlYnVnT3ZlcmxheXMoZ3JhcGhpY3NMYXllciwgY29udGV4dCk7CiAKICAgICB9IGVsc2Ug
aWYgKGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAg
ICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci5ob3Jpem9udGFsU2Nyb2xsYmFyKCks
IGNvbnRleHQsIGRpcnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVM
YXllcik7CisKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRpcnR5UmVjdCk7CiAgICAgfSBlbHNlIGlmIChncmFw
aGljc0xheWVyID09IGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSkgewotICAgICAgICBwYWlu
dFNjcm9sbGJhcihtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCksIGNvbnRleHQsIGRp
cnR5UmVjdCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1fb3duaW5nTGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAg
ICAgICAgcGFpbnRTY3JvbGxiYXIoc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigp
LCBjb250ZXh0LCBkaXJ0eVJlY3QpOwogICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBs
YXllckZvclNjcm9sbENvcm5lcigpKSB7Ci0gICAgICAgIGF1dG8gY29ybmVyUmVjdCA9IG1fb3du
aW5nTGF5ZXIub3ZlcmZsb3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVj
dCgpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAg
IGF1dG8gY29ybmVyUmVjdCA9IHNjcm9sbGFibGVMYXllci0+b3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyT3JSZXNpemVyUmVjdCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KC1jb3JuZXJSZWN0LmxvY2F0aW9uKCkpOwogICAgICAgICBMYXlvdXRSZWN0IHRyYW5zZm9ybWVk
Q2xpcCA9IExheW91dFJlY3QoY2xpcCk7CiAgICAgICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnko
Y29ybmVyUmVjdC5sb2NhdGlvbigpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFNjcm9s
bENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1lZENs
aXApKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5wYWludFJlc2l6ZXIoY29udGV4dCwgSW50UG9p
bnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBJbnRQb2ludCgpLCBzbmFwcGVkSW50UmVjdCh0cmFuc2Zvcm1l
ZENsaXApKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5wYWludFJlc2l6ZXIoY29udGV4dCwg
SW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAg
IHJlbmRlcmVyKCkucGFnZSgpLnNldElzUGFpbnRpbmcoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBmZjEyMzBl
ZGU4YTg2YTg4OGYyMzIzMTNmYzNmODU3MWNiYzYzMGM0Li42OTc5MzlmODhjNTNhNDU3OWExMWNj
ZDY0ZjQ1NDRlZDFiZmIyMzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJl
bmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ2NjIsOCArNDY2MywxMSBAQCBTY3JvbGxpbmdOb2Rl
SUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRD
b25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXll
ciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVu
Y2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7
IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JM
YXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExh
eW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0K
IAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4o
bGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00NjgzLDExICs0Njg3LDE0IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKFNjcm9sbGluZ05vZGVJRCBu
b2RlSUQsIFJlCiAgICAgICAgICAgICBmaXhlZFJvb3RCYWNrZ3JvdW5kTGF5ZXIoKSwgY2xpcExh
eWVyKCksIHJvb3RDb250ZW50c0xheWVyKCksCiAgICAgICAgICAgICBmcmFtZVZpZXcubGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCksIGZyYW1lVmlldy5sYXllckZvclZlcnRpY2FsU2Nyb2xs
YmFyKCkgfSk7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7
CisKICAgICAgICAgYXV0byYgYmFja2luZyA9ICpsYXllci5iYWNraW5nKCk7CiAgICAgICAgIHNj
cm9sbGluZ0Nvb3JkaW5hdG9yLnNldE5vZGVMYXllcnMobm9kZUlELCB7IGJhY2tpbmcuZ3JhcGhp
Y3NMYXllcigpLAogICAgICAgICAgICAgYmFja2luZy5zY3JvbGxDb250YWluZXJMYXllcigpLCBi
YWNraW5nLnNjcm9sbGVkQ29udGVudHNMYXllcigpLAogICAgICAgICAgICAgbnVsbHB0ciwgbnVs
bHB0ciwgbnVsbHB0ciwKLSAgICAgICAgICAgIGxheWVyLmxheWVyRm9ySG9yaXpvbnRhbFNjcm9s
bGJhcigpLCBsYXllci5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgfSk7CisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBzY3JvbGxh
YmxlTGF5ZXItPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSB9KTsKICAgICB9CiB9CiAKQEAg
LTQ3MjUsOCArNDczMiwxMCBAQCBTY3JvbGxpbmdOb2RlSUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZShSZW5kZQogICAgICAgICBpZiAo
Y2hhbmdlcyAmIFNjcm9sbGluZ05vZGVDaGFuZ2VGbGFnczo6TGF5ZXIpCiAgICAgICAgICAgICB1
cGRhdGVTY3JvbGxpbmdOb2RlTGF5ZXJzKG5ld05vZGVJRCwgbGF5ZXIsICpzY3JvbGxpbmdDb29y
ZGluYXRvcik7CiAKLSAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxh
Z3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkKLSAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9t
ZXRyeShuZXdOb2RlSUQsIGxheWVyKTsKKyAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdO
b2RlQ2hhbmdlRmxhZ3M6OkxheWVyR2VvbWV0cnkgJiYgdHJlZVN0YXRlLnBhcmVudE5vZGVJRCkg
eworICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFi
bGVBcmVhKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNldFNjcm9s
bGluZ05vZGVTY3JvbGxhYmxlQXJlYUdlb21ldHJ5KG5ld05vZGVJRCwgKnNjcm9sbGFibGVMYXll
cik7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbmV3Tm9kZUlEOwpAQCAtNDkwMSw3
ICs0OTEwLDcgQEAgU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW4KICAgICBpZiAobm9kZUlEID09IG1f
cmVuZGVyVmlldy5mcmFtZVZpZXcoKS5zY3JvbGxpbmdOb2RlSUQoKSkKICAgICAgICAgcmV0dXJu
ICZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7CiAKLSAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
VG9MYXllck1hcC5nZXQobm9kZUlEKS5nZXQoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxpbmdOb2Rl
VG9MYXllck1hcC5nZXQobm9kZUlEKS0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OndpbGxSZW1vdmVTY3JvbGxpbmdMYXllcldpdGhCYWNraW5nKFJl
bmRlckxheWVyJiBsYXllciwgUmVuZGVyTGF5ZXJCYWNraW5nJiBiYWNraW5nKQpAQCAtNTA0MCwx
MSArNTA0OSwxNCBAQCB2b2lkIExlZ2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6
OnVwZGF0ZVNjcm9sbGluZ0xheWVyKFJlbmRlckxheWVyJiBsYQogICAgIGF1dG8qIGJhY2tpbmcg
PSBsYXllci5iYWNraW5nKCk7CiAgICAgQVNTRVJUKGJhY2tpbmcpOwogCi0gICAgYm9vbCBhbGxv
d0hvcml6b250YWxTY3JvbGxiYXIgPSAhbGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5
U3R5bGUoKTsKLSAgICBib29sIGFsbG93VmVydGljYWxTY3JvbGxiYXIgPSAhbGF5ZXIudmVydGlj
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwor
ICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+aG9y
aXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKTsKKyAgICBib29sIGFsbG93VmVydGljYWxT
Y3JvbGxiYXIgPSAhc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKTsKIAogICAgIG1fY2hyb21lQ2xpZW50LmFkZE9yVXBkYXRlU2Nyb2xsaW5nTGF5ZXIobGF5
ZXIucmVuZGVyZXIoKS5lbGVtZW50KCksIGJhY2tpbmctPnNjcm9sbENvbnRhaW5lckxheWVyKCkt
PnBsYXRmb3JtTGF5ZXIoKSwgYmFja2luZy0+c2Nyb2xsZWRDb250ZW50c0xheWVyKCktPnBsYXRm
b3JtTGF5ZXIoKSwKLSAgICAgICAgbGF5ZXIucmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSwg
YWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5yZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpLCBhbGxvd0hv
cml6b250YWxTY3JvbGxiYXIsIGFsbG93VmVydGljYWxTY3JvbGxiYXIpOwogfQogCiB2b2lkIExl
Z2FjeVdlYktpdFNjcm9sbGluZ0xheWVyQ29vcmRpbmF0b3I6OnJlZ2lzdGVyQWxsU2Nyb2xsaW5n
TGF5ZXJzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcAppbmRleCAwNTJhOWM3NWU2MzU1NmEzZWVhYmJmZGYxYzIyMWJlM2MxM2I0
Y2FjLi5jN2ZjNjZjNzAxM2I3ZThkZTZhYTA2YzQzMTNiZDI5YTgxODUxYWUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBA
IC0xNzYsOCArMTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3JvbGxT
bmFwQ29udGFpbmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5ld1N0
eWxlKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKSkg
ewotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAg
ICAgICByZW5kZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygp
OworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVy
KCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1lVmll
dygpOwogICAgICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0xOTUs
OCArMTk2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9sbFNu
YXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAgIGlm
IChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmljdG5l
c3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51cGRh
dGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCkt
PnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRz
KCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwgc2Ny
b2xsU25hcEJveC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgICAg
ICAgICBzY3JvbGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3Bw
CmluZGV4IDg5OTllMDAzN2ExNTI3ZWJjZGMzNWZhMTc1ODY4YmNkMjdhZWM3YWYuLmFmMmI5NDll
MDAwNjY5NTVjYzZmZTFhZDVjZDRiOTk5MDQzNzA3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTEsMTkg
KzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAyMCBJZ2FsaWEgUy5MLgogICoKLSAqIFBvcnRp
b25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9y
YXRpb24uCi0gKgotICogT3RoZXIgY29udHJpYnV0b3JzOgotICogICBSb2JlcnQgTydDYWxsYWhh
biA8cm9jK0Bjcy5jbXUuZWR1PgotICogICBEYXZpZCBCYXJvbiA8ZGJhcm9uQGZhcy5oYXJ2YXJk
LmVkdT4KLSAqICAgQ2hyaXN0aWFuIEJpZXNpbmdlciA8Y2JpZXNpbmdlckB3ZWIuZGU+Ci0gKiAg
IFJhbmRhbGwgSmVzdXAgPHJqZXN1cEB3Z2F0ZS5jb20+Ci0gKiAgIFJvbGFuZCBNYWlueiA8cm9s
YW5kLm1haW56QGluZm9ybWF0aWsubWVkLnVuaS1naWVzc2VuLmRlPgotICogICBKb3NoIFNvcmVm
IDx0aW1lbGVzc0BtYWMuY29tPgotICogICBCb3JpcyBaYmFyc2t5IDxiemJhcnNreUBtaXQuZWR1
PgotICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgpAQCAtNDksMTIgKzM2LDYyIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEoUmVuZGVyTGF5ZXImIGxheWVyKQotICAgIDogbV9sYXllcihsYXllcikKKyAg
ICA6IG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCisgICAgLCBtX2luT3ZlcmZsb3dSZWxh
eW91dChmYWxzZSkKKyAgICAsIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKGZhbHNlKQorICAg
ICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KGZhbHNlKQorI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgLCBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKKyNlbmRpZgorICAg
ICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAs
IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQorICAgICwgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCisgICAgLCBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uKGZhbHNlKQorICAgICwgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25TZXQo
ZmFsc2UpCisgICAgLCBtX2xheWVyKGxheWVyKQogewogfQogCiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCiB7CisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhID09IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVB
cmVhKHRoaXMpKTsKKworICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMp
OworCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdW5yZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKyAgICBpZiAoRWxlbWVudCogZWxl
bWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworCisgICAgZGVzdHJveVNjcm9sbGJh
cihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHJlbmRlcmVy
LnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICBzY3JvbGxpbmdDb29yZGlu
YXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7CisKKyAgICBjbGVhclNjcm9s
bENvcm5lcigpOworICAgIGNsZWFyUmVzaXplcigpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24oKQoreworICAgIGF1dG8qIGVsZW1lbnQg
PSBtX2xheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXIucmVuZGVyQm94KCkpIHsKKyAgICAgICAgLy8g
V2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNj
cm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KKyAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9
IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOworICAgICAgICBpZiAoIW1fc2Ny
b2xsUG9zaXRpb24uaXNaZXJvKCkpCisgICAgICAgICAgICBzY3JvbGxBbmltYXRvcigpLnNldEN1
cnJlbnRQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBlbGVtZW50LT5z
ZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoKSk7CiB9CiAKIGJvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9u
TGVmdCgpIGNvbnN0CkBAIC02Miw0ICs5OSwxNzQwIEBAIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCk7CiB9CiAKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0
Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVy
YXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBX
ZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3Vj
aEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVu
dCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRIYW5k
bGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVU
b3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0
KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7
CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxp
bmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5n
U2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJT
Y3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7Cisj
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAo
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9k
ZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8g
c2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVy
biBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2VuZGlmCisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Zm9y
Y2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5n
UGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZCgpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgaWYgKCFw
b3NpdGlvbikgeworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbiA9IFNjcm9sbFBv
c2l0aW9uKCk7CisgICAgICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7
CisgICAgfQorCisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbi52YWx1
ZSgpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbiA9IFNjcm9sbFBvc2l0aW9uKCk7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9z
aXRpb25TZXQgPSBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFt
cGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9z
aXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKK3sKKyAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBv
c2l0aW9uLngoKSwgeSk7CisgICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNjcm9sbFR5
cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nLCBBbmltYXRlZFNj
cm9sbCBhbmltYXRlZCkKK3sKKyAgICBpZiAoYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6Olll
cykKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKHNjcm9sbE9mZnNldEZyb21Q
b3NpdGlvbihwb3NpdGlvbiksIHNjcm9sbFR5cGUsIGNsYW1waW5nKTsKKyAgICBlbHNlCisgICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIHNj
cm9sbFR5cGUsIGNsYW1waW5nKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0KSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVu
KEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGlu
ZyBjbGFtcGluZykKK3sKKyNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQorICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCBtX2xheWVyIDw8ICIgcmVxdWVzdFNjcm9sbFBv
c2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBzY3JvbGxPZmZzZXQsIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisgICAgaWYgKGN1cnJlbnRTY3Jv
bGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFu
aW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisK
KyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9s
bENsYW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNj
cm9sbE9mZnNldDsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxP
ZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUg
PSBjdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5
cGUpOworCisgICAgaWYgKCFyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBzY3JvbGxUeXBlLCBjbGFtcGluZykp
CisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjbGFtcGVkU2Nyb2xsT2Zm
c2V0LCBjbGFtcGluZyk7CisgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHBy
ZXZpb3VzU2Nyb2xsVHlwZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9uKGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0LCBT
Y3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQoreworICAgIGF1
dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJy
ZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxP
ZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xs
T2Zmc2V0KG9mZnNldCkgOiBvZmZzZXQ7CisgICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAg
ICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7CisgICAgaWYgKG5ld1Nj
cm9sbE9mZnNldCAhPSB0aGlzLT5zY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihuZXdTY3JvbGxPZmZzZXQpOworCisgICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24pCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAg
IGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvICIgPDwg
cG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3NpdGlvbiA8PCAiIChpcyB1c2VyIHNj
cm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIDw8ICIp
Iik7CisKKyAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlvbiA9IHBvc2l0aW9uOworICAgIGlm
ICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKKyAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRp
bWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5lZWQgdG8gYmUgKGZvciBvdmVyZmxv
dzpoaWRkZW4gYmxvY2tzKS4KKyAgICAgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQor
ICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoaXMgY29kZSBpcyB0
cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFibGUgd2l0aCBpdCByZW1vdmVkLgor
ICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdpZHRoKCkgLSByb3VuZFRvSW50KGJv
eC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgICAgICBTY3JvbGxPZmZzZXQgbmV3T2Zmc2V0ID0g
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCBz
Y3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zm
c2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgeworICAgICAgICAgICAgICAgIHNjcm9sbFhP
ZmZzZXQgKz0gY2FyZXRXaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsWE9mZnNldCA8
PSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ID0gMDsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8IG1fc2Nyb2xsUG9zaXRpb24ueCgp
IC0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICBzY3JvbGxYT2Zmc2V0IC09IGNhcmV0V2lk
dGg7CisKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNjcm9sbFhPZmZzZXQpOworICAgICAg
ICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQobmV3T2Zmc2V0KTsK
KyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0g
bmV3UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIC8vIEZJWE1FOiBOb3RoaW5n
IGd1YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlv
biBhdCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgorICAgICAgICAvLyBUaGUgU2Nyb2xsaW5n
Q29vcmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hl
biBhIGdlc3R1cmUgZW5kcy4KKyAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpKSB7CisgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRl
clNjcm9sbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3Nj
cm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5
ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5kZXJWaWV3JiB2aWV3ID0gcmVuZGVyZXIudmlldygpOwor
CisgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYgbmVl
ZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9sbCku
CisgICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3ZSBu
ZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3IuCisg
ICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxh
eW91dCgpKSB7CisgICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0LCB3
ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgorICAgICAg
ICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKKworICAgICAgICB2
aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7CisKKyAgICAg
ICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7CisgICAgICAgICAgICAvLyBBdm9p
ZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ssIHdl
J3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKKyAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4gVXBk
YXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRhdGUg
UmVuZGVyTGF5ZXJzLCBhbmQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBzdGls
bCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBsYXll
cnMgbGF0ZXIKKyAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCisgICAgICAgICAg
ICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgICAgIG1fbGF5
ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisKKyAgICAgICAgICAgICAg
ICAvLyBTY3JvbGwgcG9zaXRpb24gY2FuIGFmZmVjdCB0aGUgbG9jYXRpb24gb2YgYSBjb21wb3Np
dGVkIGRlc2NlbmRhbnQgKHdoaWNoIG1heSBiZSBhIHNpYmxpbmcgaW4gei1vcmRlciksCisgICAg
ICAgICAgICAgICAgLy8gc28gdHJpZ2dlciBhIGRlc2NlbmRhbnQgd2FsayBmcm9tIHRoZSBzdGFj
a2luZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBwYWludFBhcmVudCA9IG1f
bGF5ZXIuc3RhY2tpbmdDb250ZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIHBhaW50UGFyZW50
LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSByZWdpb25zLCBzY3Jv
bGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uLgorICAgICAg
ICByZW5kZXJlci5kb2N1bWVudCgpLmludmFsaWRhdGVSZW5kZXJpbmdEZXBlbmRlbnRSZWdpb25z
KCk7CisgICAgICAgIERlYnVnUGFnZU92ZXJsYXlzOjpkaWRMYXlvdXQocmVuZGVyZXIuZnJhbWUo
KSk7CisgICAgfQorCisgICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIuZnJhbWUoKTsKKyAgICBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyID0gcmVuZGVyZXIuY29udGFp
bmVyRm9yUmVwYWludCgpOworICAgIC8vIFRoZSBjYXJldCByZWN0IG5lZWRzIHRvIGJlIGludmFs
aWRhdGVkIGFmdGVyIHNjcm9sbGluZworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldENhcmV0UmVj
dE5lZWRzVXBkYXRlKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVy
ZXIuaGFzUmVwYWludExheW91dFJlY3RzKCkgPyByZW5kZXJlci5yZXBhaW50TGF5b3V0UmVjdHMo
KS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
cmVwYWludENvbnRhaW5lcik7CisKKyAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCA9IEZsb2F0UXVhZChyZWN0Rm9yUmVwYWludCk7CisgICAgaWYgKHJlcGFpbnRDb250YWlu
ZXIpCisgICAgICAgIHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworICAgIGZy
YW1lLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChx
dWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50KTsKKworICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0g
dHJ1ZTsKKyAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgeworICAgICAgICBtX2xh
eWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVy
LnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsK
KyAgICAgICAgcmVxdWlyZXNSZXBhaW50ID0gbV9sYXllci5iYWNraW5nKCktPm5lZWRzUmVwYWlu
dE9uQ29tcG9zaXRlZFNjcm9sbCgpOworICAgIH0KKworICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBm
dWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KKyAgICBpZiAocmVxdWlyZXNSZXBhaW50KQorICAg
ICAgICByZW5kZXJlci5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgcmVj
dEZvclJlcGFpbnQpOworCisgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9sbCBhbmQgc2Nyb2xsLXJl
bGF0ZWQgRE9NIGV2ZW50cy4KKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVs
ZW1lbnQoKSkKKyAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZl
bnRUYXJnZXQoKmVsZW1lbnQpOworCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQorICAgICAg
ICB2aWV3LmZyYW1lVmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOworCisgICAgdmlldy5m
cmFtZVZpZXcoKS52aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOworICAgIGZyYW1lLmVkaXRvcigp
LnJlbmRlckxheWVyRGlkU2Nyb2xsKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQoreworICAg
IGlmIChtX2xheWVyLmNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkg
eworICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlzIGd1YXJhbnRlZWQgdG8gY29u
dGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5lZWQKKyAgICAgICAgLy8gcmVw
b3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBmcm9tIHRoZXJlLgorICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0b3IgPSBtX2xheWVyLnN0YWNr
aW5nQ29udGV4dCgpLT5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCkpIHsKKyAgICAgICAgICAg
IGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgICAgIG1fbGF5ZXIu
Y29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlw
ZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkg
ZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4K
KyAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0FuY2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRV
cGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgICAgICAgICAgbV9s
YXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRh
dGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxXaWR0aCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAg
IGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Cisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0
aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KKyAgICByZXR1cm4gbV9zY3JvbGxXaWR0aDsKK30KKwor
aW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIGlmIChtX3Njcm9sbERpbWVuc2lv
bnNEaXJ0eSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKj4o
dGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRl
cy4KKyAgICByZXR1cm4gbV9zY3JvbGxIZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKCkKK3sKKyAgICBpZiAoIW1fbWFycXVl
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNl
dEZvclNjb3BlPD4gYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KKyAgICBib29s
IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsK
KyAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKKyAgICBtX21hcnF1ZWUtPnVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBv
bGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVuZGVyZXIuaXNIVE1MTWFycXVlZSgpICYm
IHJlbmRlcmVyLnN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpO
b25lICYmIHJlbmRlcmVyLmlzQm94KCkpIHsKKyAgICAgICAgaWYgKCFtX21hcnF1ZWUpCisgICAg
ICAgICAgICBtX21hcnF1ZWUgPSBtYWtlVW5pcXVlPFJlbmRlck1hcnF1ZWU+KCZtX2xheWVyKTsK
KyAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKKyAgICB9IGVsc2UgaWYg
KG1fbWFycXVlZSkKKyAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghaXM8UmVuZGVyQm94
PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5zY3JvbGxzT3ZlcmZsb3coKTsKK30KKworYm9vbCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QK
K3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBib29sIGlz
VmlzaWJsZSA9IHJlbmRlcmVyLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZp
c2libGU7CisgICAgaWYgKHJlbmRlcmVyLnNldHRpbmdzKCkuYXN5bmNPdmVyZmxvd1Njcm9sbGlu
Z0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3co
KSAmJiAhbV9sYXllci5pc0luc2lkZVNWR0ZvcmVpZ25PYmplY3QoKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpICYmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCisgICAgcmV0
dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIuc3R5bGUoKS51
c2VUb3VjaE92ZXJmbG93U2Nyb2xsaW5nKCkgfHwgcmVuZGVyZXIuc2V0dGluZ3MoKS5hbHdheXNV
c2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8oc2Nyb2xs
UG9zaXRpb25Gcm9tT2Zmc2V0KG9mZnNldCkpOworfQorCitTY3JvbGxpbmdOb2RlSUQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1fbGF5ZXIuYmFja2luZygpLT5zY3JvbGxpbmdOb2RlSURGb3JSb2xlKFNjcm9sbENvb3JkaW5h
dGlvblJvbGU6OlNjcm9sbGluZyk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IHdoZWVsRXZlbnQsIE9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPiBnZXN0dXJlU3Rh
dGUpCit7CisgICAgaWYgKCFpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCisgICAgaWYgKHVz
ZXNBc3luY1Njcm9sbGluZygpICYmIHNjcm9sbGluZ05vZGVJRCgpKSB7CisgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRs
ZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCksIGdl
c3R1cmVTdGF0ZSk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6
OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgZ2VzdHVyZVN0YXRlKTsK
K30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlQ29udGVudFJl
Y3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMgc2Nyb2xsYmFy
SW5jbHVzaW9uLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QKK3sKKyAgICBJbnRT
aXplIHNjcm9sbGJhclNwYWNlOworICAgIGlmIChzaG93c092ZXJmbG93Q29udHJvbHMoKSAmJiBz
Y3JvbGxiYXJJbmNsdXNpb24gPT0gSW5jbHVkZVNjcm9sbGJhcnMpCisgICAgICAgIHNjcm9sbGJh
clNwYWNlID0gc2Nyb2xsYmFySW50cnVzaW9uKCk7CisKKyAgICBhdXRvIHZpc2libGVTaXplID0g
dGhpcy0+dmlzaWJsZVNpemUoKTsKKyAgICByZXR1cm4geyBzY3JvbGxQb3NpdGlvbigpLCB7IHN0
ZDo6bWF4KDAsIHZpc2libGVTaXplLndpZHRoKCkgLSBzY3JvbGxiYXJTcGFjZS53aWR0aCgpKSwg
c3RkOjptYXgoMCwgdmlzaWJsZVNpemUuaGVpZ2h0KCkgLSBzY3JvbGxiYXJTcGFjZS5oZWlnaHQo
KSkgfSB9OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5n
QW1vdW50KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5zZXR0aW5n
cygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFNpemUoKTsKKworICAgIEludFNpemUgc3RyZXRjaDsKKworICAgIC8vIEZJ
WE1FOiB1c2UgbWF4aW11bVNjcm9sbE9mZnNldCgpLCBvciBqdXN0IG1vdmUgdGhpcyB0byBTY3Jv
bGxhYmxlQXJlYS4KKyAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0
RnJvbVBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkpOworICAgIGF1dG8gcmVhY2hhYmxlU2l6ZSA9
IHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCk7CisgICAgaWYgKHNjcm9sbE9mZnNldC55KCkg
PCAwKQorICAgICAgICBzdHJldGNoLnNldEhlaWdodChzY3JvbGxPZmZzZXQueSgpKTsKKyAgICBl
bHNlIGlmIChyZWFjaGFibGVTaXplLmhlaWdodCgpICYmIHNjcm9sbE9mZnNldC55KCkgPiByZWFj
aGFibGVTaXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKQorICAgICAgICBzdHJldGNoLnNl
dEhlaWdodChzY3JvbGxPZmZzZXQueSgpIC0gKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNp
YmxlSGVpZ2h0KCkpKTsKKworICAgIGlmIChzY3JvbGxPZmZzZXQueCgpIDwgMCkKKyAgICAgICAg
c3RyZXRjaC5zZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpKTsKKyAgICBlbHNlIGlmIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgJiYgc2Nyb2xsT2Zmc2V0LngoKSA+IHJlYWNoYWJsZVNpemUud2lkdGgo
KSAtIHZpc2libGVXaWR0aCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNl
dC54KCkgLSAocmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpKTsKKworICAg
IHJldHVybiBzdHJldGNoOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6ZSgpOworI2VuZGlmCit9
CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29ybmVyUmVjdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5l
cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbENvcm5lclZp
c2libGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlcmVyKCkuaXNCb3goKSk7
CisgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KCkuaXNFbXB0eSgpOworfQorCitJbnRSZWN0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworICAgIHJlY3QubW92ZShzY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHJl
Y3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29u
c3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyLCBw
YXJlbnRSZWN0KTsKKyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsK
KyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQg
PSBzY3JvbGxiYXJQb2ludDsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxi
YXIpKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9t
UmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcG9pbnQpOworfQorCitJbnRQb2lu
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJl
bnRQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFBvaW50KTsK
KyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJu
IHBvaW50OworfQorCitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci52aXNpYmxlU2l6ZSgpOworfQorCitJ
bnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOworfQor
CitJbnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZSA9IHRoaXMtPmNvbnRl
bnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkp
CisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRXaWR0aChzdGQ6Om1pbihjb250ZW50c1NpemUud2lk
dGgoKSwgdmlzaWJsZVNpemUoKS53aWR0aCgpKSk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIGNvbnRlbnRzU2l6ZS5zZXRIZWlnaHQoc3RkOjpt
aW4oY29udGVudHNTaXplLmhlaWdodCgpLCB2aXNpYmxlU2l6ZSgpLmhlaWdodCgpKSk7CisKKyAg
ICByZXR1cm4gY29udGVudHNTaXplOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29u
IHJlYXNvbikKK3sKKyAgICBTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFu
Z2VkKHJlYXNvbik7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBpZiAocmVhc29uID09IEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb246OlNjcm9sbGJhcnND
aGFuZ2VkKSB7CisgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKQorICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKS5zZXRTaG91bGRGb3JjZVJlbGF5
b3V0Q2hpbGRyZW4odHJ1ZSk7CisgICAgICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KCk7Cisg
ICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRT
Y3JvbGxBbmltYXRpb25zKCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLnNob3Vs
ZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCk7Cit9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCgpCit7Cisg
ICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkU3RhcnRPdmVyZmxvd1Njcm9s
bCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCgp
Cit7CisgICAgbV9sYXllci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dT
Y3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVT
Y3JvbGwoKQoreworICAgIC8vIFNlbmQgdGhpcyBub3RpZmljYXRpb24gd2hlbiB3ZSBzY3JvbGws
IHNpbmNlIHRoaXMgaXMgaG93IHdlIGtlZXAgc2VsZWN0aW9uIHVwZGF0ZWQuCisgICAgbV9sYXll
ci5wYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xs
KTsKK30KKyNlbmRpZgorCitSZW5kZXJMYXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzKCkgY29uc3QKK3sKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQoaXM8UmVu
ZGVyQm94PihyZW5kZXJlcikpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIpOworICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVy
IGJveC4KKyAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVk
SW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7CisK
KyAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhl
aWdodCgpIDogMDsKKyAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBt
X3ZCYXItPndpZHRoKCkgOiAwOworCisgICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBb
XShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFy
ICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOworICAgIH07CisKKyAgICBib29s
IGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJh
cihtX2hCYXIuZ2V0KCkpOworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJh
ciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgIGJvb2wgcGxhY2VW
ZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKTsKKyAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CisgICAgYm9vbCBzY3JvbGxiYXJzQXZvaWRDb3JuZXIg
PSAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyICYmIGhhdmVOb25PdmVybGF5VmVy
dGljYWxTY3JvbGxiYXIpIHx8IChoYXZlUmVzaXplciAmJiAoaGF2ZU5vbk92ZXJsYXlIb3Jpem9u
dGFsU2Nyb2xsYmFyIHx8IGhhdmVOb25PdmVybGF5VmVydGljYWxTY3JvbGxiYXIpKTsKKworICAg
IEludFNpemUgY29ybmVyU2l6ZTsKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Cisg
ICAgICAgIC8vIElmIG9ubHkgb25lIHNjcm9sbGJhciBpcyBwcmVzZW50LCB0aGUgY29ybmVyIGlz
IHNxdWFyZS4KKyAgICAgICAgY29ybmVyU2l6ZSA9IEludFNpemUgeworICAgICAgICAgICAgdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA/IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggOiBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0LAorICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA/
IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgOiB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoCisgICAg
ICAgIH07CisgICAgfQorCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIHJl
c3VsdDsKKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgYmFyUmVjdC5zaGlmdFlFZGdlVG8o
YmFyUmVjdC5tYXhZKCkgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KTsKKyAgICAgICAgaWYg
KHNjcm9sbGJhcnNBdm9pZENvcm5lcikgeworICAgICAgICAgICAgaWYgKHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhFZGdlVG8o
YmFyUmVjdC54KCkgKyBjb3JuZXJTaXplLndpZHRoKCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoY29ybmVyU2l6ZS53aWR0aCgpLCAwKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJlc3VsdC5ob3Jpem9udGFsU2Nyb2xsYmFyID0gYmFyUmVjdDsK
KyAgICB9CisKKyAgICBpZiAobV92QmFyKSB7CisgICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJm
bG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Ny
b2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgYmFyUmVjdC5zZXRXaWR0aCh2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFyUmVjdC5zaGlmdFhF
ZGdlVG8oYmFyUmVjdC5tYXhYKCkgLSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKTsKKworICAgICAg
ICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAgICAgYmFyUmVjdC5jb250cmFj
dCgwLCBjb3JuZXJTaXplLmhlaWdodCgpKTsKKworICAgICAgICByZXN1bHQudmVydGljYWxTY3Jv
bGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGF1dG8gY29ybmVyUmVjdCA9IFsmXShJbnRT
aXplIGNvcm5lclNpemUpIHsKKyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRo
ZUxlZnQpIHsKKyAgICAgICAgICAgIGF1dG8gYm90dG9tTGVmdENvcm5lciA9IG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVy
biBJbnRSZWN0IHsgeyBib3R0b21MZWZ0Q29ybmVyLngoKSwgYm90dG9tTGVmdENvcm5lci55KCkg
LSBjb3JuZXJTaXplLmhlaWdodCgpLCB9LCBjb3JuZXJTaXplIH07CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEludFJlY3QgeyBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1heFhN
YXhZQ29ybmVyKCkgLSBjb3JuZXJTaXplLCBjb3JuZXJTaXplIH07CisgICAgfTsKKworICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgIHJlc3VsdC5zY3JvbGxDb3JuZXIgPSBj
b3JuZXJSZWN0KGNvcm5lclNpemUpOworCisgICAgaWYgKGhhdmVSZXNpemVyKSB7CisgICAgICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9
IHJlc3VsdC5zY3JvbGxDb3JuZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXV0byBz
Y3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlj
a25lc3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVyUmVjdCh7IHNjcm9s
bGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIpIGNvbnN0Cit7
CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZz
Y3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3Rz
LnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0g
bV9oQmFyLmdldCgpKQorICAgICAgICByZXR1cm4gdG9JbnRTaXplKHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRh
dGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkgeworICAgICAgICBpZiAoR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAg
bGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2Nyb2xsUmVjdCA9IHJlY3Q7CisgICAgUmVu
ZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAg
IC8vIElmIHdlIGFyZSBub3QgeWV0IGluc2VydGVkIGludG8gdGhlIHRyZWUsIHRoZXJlIGlzIG5v
IG5lZWQgdG8gcmVwYWludC4KKyAgICBpZiAoIWJveC0+cGFyZW50KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKworICAgIGlm
ICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnko
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisgICAgZWxzZQorICAgICAgICBz
Y3JvbGxSZWN0Lm1vdmVCeShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
CisgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdCA9IHNjcm9sbFJlY3Q7CisgICAgYm94LT5mbGlw
Rm9yV3JpdGluZ01vZGUocmVwYWludFJlY3QpOworICAgIGJveC0+cmVwYWludFJlY3RhbmdsZShy
ZXBhaW50UmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxp
ZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNo
b3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBsYXllckZvclNjcm9sbENvcm5lcigpKSB7CisgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zY3JvbGxDb3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5yZXBhaW50
UmVjdGFuZ2xlKHJlY3QpOworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+
cmVwYWludFJlY3RhbmdsZShyZWN0KTsKK30KKworc3RhdGljIGJvb2wgc2Nyb2xsYmFySGlkZGVu
QnlTdHlsZShTY3JvbGxiYXIqIHNjcm9sbGJhcikKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFyICYm
IHNjcm9sbGJhci0+aXNIaWRkZW5CeVN0eWxlKCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAorewor
ICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSh2ZXJ0aWNhbFNjcm9sbGJhcigpKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJFbGVtZW50
KiByZW5kZXJlckZvclNjcm9sbGJhcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikK
K3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKSkgeworICAg
ICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPmNvbnRhaW5pbmdTaGFk
b3dSb290KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290LT5tb2RlKCkgPT0gU2hhZG93
Um9vdE1vZGU6OlVzZXJBZ2VudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdC0+
aG9zdCgpLT5yZW5kZXJlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuICZyZW5k
ZXJlcjsKK30KKworUmVmPFNjcm9sbGJhcj4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxTY3JvbGxiYXI+
IHdpZGdldDsKKyAgICBBU1NFUlQocmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpKTsKKyAg
ICBhdXRvJiBhY3R1YWxSZW5kZXJlciA9ICpyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7
CisgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFs
UmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCku
aGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7CisgICAgaWYgKGhhc0N1c3RvbVNj
cm9sbGJhclN0eWxlKQorICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1
c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0
dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHdpZGdldCA9IFNj
cm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xs
YmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOworICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0
LmdldCgpLCBvcmllbnRhdGlvbik7CisgICAgICAgIGlmIChtX2xheWVyLnBhZ2UoKS5pc01vbml0
b3JpbmdXaGVlbEV2ZW50cygpKQorICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVl
bEV2ZW50VGVzdE1vbml0b3IobV9sYXllci5wYWdlKCkud2hlZWxFdmVudFRlc3RNb25pdG9yKCkp
OworICAgIH0KKyAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuYWRkQ2hpbGQoKndpZGdl
dCk7CisgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCit7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4mIHNjcm9sbGJhciA9IG9y
aWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtX2hCYXIgOiBtX3ZCYXI7CisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2Nyb2xsYmFyLT5p
c0N1c3RvbVNjcm9sbGJhcigpKQorICAgICAgICB3aWxsUmVtb3ZlU2Nyb2xsYmFyKHNjcm9sbGJh
ci5nZXQoKSwgb3JpZW50YXRpb24pOworCisgICAgc2Nyb2xsYmFyLT5yZW1vdmVGcm9tUGFyZW50
KCk7CisgICAgc2Nyb2xsYmFyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKQor
eworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1faEJhciA9
IGNyZWF0ZVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAm
JiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9u
c0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5
Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdHJveVNj
cm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShT
Y3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBEZXN0cm95aW5n
IG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNv
bWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgb3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5
bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAg
ICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wg
aGFzU2Nyb2xsYmFyKQoreworICAgIGlmIChoYXNTY3JvbGxiYXIgPT0gaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikgeworICAg
ICAgICBtX3ZCYXIgPSBjcmVhdGVTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9sbHNP
dmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9s
bGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9s
bEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAg
ZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGlj
aXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIERlc3Ry
b3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIg
dG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIn
cyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgp
OworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisK
K1Njcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IG1f
bGF5ZXIuZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVT
ZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKQorICAgICAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgcmV0dXJuICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7Cisg
ICAgcmV0dXJuIHJlbmRlcmVyLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKK30K
KworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZUFuY2VzdG9yKCkKK3sKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IG1fbGF5ZXIu
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7
IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKSkgeworICAgICAgICBpZiAobmV4dExh
eWVyLT5yZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zlcmxh
eVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmICghbV92
QmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93Q29udHJvbHMoKQorICAgICAgICB8fCAobV92
QmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAocmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplIHx8ICFtX3ZCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkp
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV92QmFyLT53aWR0aCgpOworfQor
CitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2hCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisgICAgICAg
IHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3Jl
T3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRl
c3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2hCYXItPmhlaWdo
dCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc092ZXJmbG93Q29u
dHJvbHMoKSBjb25zdAoreworICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xs
Q29ybmVyIHx8IG1fbGF5ZXIucmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6
Tm9uZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJm
bG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpCit7CisgICAgaWYgKCFt
X2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX2xheWVyLnJlbmRlckJveCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAobV92QmFy
KSB7CisgICAgICAgIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3Qp
OworICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhcik7
CisgICAgfQorCisgICAgaWYgKG1faEJhcikgeworICAgICAgICByZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLm1vdmUob2Zmc2V0RnJvbVJvb3QpOworICAgICAgICBtX2hCYXItPnNldEZyYW1lUmVj
dChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxD
b3JuZXIpCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRGcmFtZVJlY3QocmVjdHMuc2Nyb2xs
Q29ybmVyKTsKKworICAgIGlmIChtX3Jlc2l6ZXIpCisgICAgICAgIG1fcmVzaXplci0+c2V0RnJh
bWVSZWN0KHJlY3RzLnJlc2l6ZXIpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6Om92ZXJmbG93VG9wKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1f
bGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dS
ZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0Cit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhZKCk7Cit9
CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dMZWZ0KCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0LngoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd1JpZ2h0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVu
ZGVyQm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpCit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkgPSBmYWxzZTsKKworICAgIG1fc2Nyb2xsV2lkdGggPSByb3VuZFRv
SW50KG92ZXJmbG93UmlnaHQoKSAtIG92ZXJmbG93TGVmdCgpKTsKKyAgICBtX3Njcm9sbEhlaWdo
dCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpOworCisgICAg
aW50IHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgPSByb3VuZFRvSW50KG92ZXJmbG93TGVmdCgpIC0g
Ym94LT5ib3JkZXJMZWZ0KCkpOworICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Ny
b2xsYmFyT25MZWZ0KCkpCisgICAgICAgIHNjcm9sbGFibGVMZWZ0T3ZlcmZsb3cgLT0gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGludCBzY3JvbGxhYmxlVG9wT3ZlcmZsb3cgPSByb3Vu
ZFRvSW50KG92ZXJmbG93VG9wKCkgLSBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBzZXRTY3JvbGxP
cmlnaW4oSW50UG9pbnQoLXNjcm9sbGFibGVMZWZ0T3ZlcmZsb3csIC1zY3JvbGxhYmxlVG9wT3Zl
cmZsb3cpKTsKKworICAgIGNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQoreworICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdAoreworICAgIHJldHVybiBoYXNIb3Jpem9udGFsT3ZlcmZsb3co
KSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dYKCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3co
KSBjb25zdAoreworICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgbV9sYXllci5y
ZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJmbG93WSgpOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4gc2Nyb2xsV2lkdGgoKSA+
IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSk7CisKKyAgICByZXR1cm4g
c2Nyb2xsSGVpZ2h0KCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhl
aWdodCgpKTsKK30KKworc3RhdGljIGJvb2wgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3Zl
cmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFs
U2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBi
b29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNj
cm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Ny
b2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJu
IG92ZXJmbG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIW92ZXJmbG93U2Nyb2xsQWN0c0xpa2VB
dXRvOworfQorCitzdGF0aWMgYm9vbCBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBheGlzKQoreworICAg
IE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmllbnRhdGlvbjo6SG9yaXpv
bnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUub3ZlcmZsb3dZKCk7Cisg
ICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJmbG93ID09IE92ZXJmbG93
OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpICYm
IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xsYmFycygpOworICAgIHJl
dHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6QXV0byB8fCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtl
QXV0bzsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxi
YXJzQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJC
b3goKTsKKyAgICBBU1NFUlQoYm94KTsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRsZSB0
aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAg
ICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3cgPSB0aGlzLT5oYXNIb3Jp
em9udGFsT3ZlcmZsb3coKTsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3cgPSB0aGlzLT5o
YXNWZXJ0aWNhbE92ZXJmbG93KCk7CisKKyAgICAvLyBJZiBvdmVyZmxvdyByZXF1aXJlcyBhIHNj
cm9sbGJhciwgdGhlbiB3ZSBqdXN0IG5lZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUuCisgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKG1faEJhciAmJiBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKHJlbmRlcmVyLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIp
KQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAg
ICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwg
VmVydGljYWxTY3JvbGxiYXIpKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQoaGFzVmVydGlj
YWxPdmVyZmxvdyk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdpdGggYXV0byBiZWhhdmlvciBtYXkg
bmVlZCB0byBsYXkgb3V0IGFnYWluIGlmIHNjcm9sbGJhcnMgZ290IGFkZGVkIG9yIHJlbW92ZWQu
CisgICAgYm9vbCBhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc0hvcml6
b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkgJiYgKGhhc0hvcml6b250YWxTY3JvbGxi
YXIoKSAhPSBoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGJvb2wgYXV0b1ZlcnRpY2FsU2Ny
b2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzVmVydGljYWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9y
KCkgJiYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgIT0gaGFzVmVydGljYWxPdmVyZmxvdyk7CisK
KyAgICBpZiAoYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFuZ2VkIHx8IGF1dG9WZXJ0aWNhbFNj
cm9sbEJhckNoYW5nZWQpIHsKKyAgICAgICAgaWYgKGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJh
cldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxi
YXIoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICAgICAgaWYgKGJveC0+aGFzVmVydGljYWxT
Y3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgICAgICBtX2xheWVyLnVwZGF0ZVNl
bGZQYWludGluZ0xheWVyKCk7CisKKyAgICAgICAgcmVuZGVyZXIucmVwYWludCgpOworCisgICAg
ICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpBdXRvIHx8
IHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKKyAgICAg
ICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICBtX2lu
T3ZlcmZsb3dSZWxheW91dCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuc2V0TmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayYgYmxvY2sg
PSBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpOworICAgICAgICAgICAgICAgICAgICBi
bG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1
dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOworICAgICAgICAgICAgICAgICAgICBibG9jay5s
YXlvdXRCbG9jayh0cnVlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyZXIubGF5b3V0KCk7CisgICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVs
YXlvdXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJlbmRl
ck9iamVjdCogcGFyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7CisgICAgICAgIGlmIChwYXJlbnQg
JiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIuaXNCb3goKSkKKyAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckZsZXhpYmxlQm94PihwYXJlbnQpLT5jbGVhckNhY2hlZE1haW5T
aXplRm9yQ2hpbGQoKm1fbGF5ZXIucmVuZGVyQm94KCkpOworICAgIH0KKworICAgIC8vIFNldCB1
cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBpZiAobV9oQmFyKSB7
CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgp
KTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0
aCk7CisgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0
aCwgbV9zY3JvbGxXaWR0aCk7CisgICAgfQorICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgaW50
IGNsaWVudEhlaWdodCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRIZWlnaHQoKSk7CisgICAgICAg
IGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6cGFnZVN0ZXAoY2xpZW50SGVpZ2h0KTsKKyAgICAg
ICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VT
dGVwKTsKKyAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgbV9zY3Jv
bGxIZWlnaHQpOworICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9s
bGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dygpKTsKK30KKworLy8gVGhpcyBpcyBjYWxsZWQgZnJvbSBsYXlvdXQgY29kZSAoYmVmb3JlIHVw
ZGF0ZUxheWVyUG9zaXRpb25zKS4KK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5
ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gdHJ1ZTsKKyAgICBTY3JvbGxPZmZzZXQgb3JpZ2luYWxT
Y3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKworICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7CisgICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBh
cmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAg
IHVwZGF0ZVNuYXBPZmZzZXRzKCk7CisjZW5kaWYKKworICAgIGlmICghYm94LT5pc0hUTUxNYXJx
dWVlKCkgJiYgIWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSAmJiAhaXNVc2VyU2Nyb2xsSW5Qcm9n
cmVzcygpKSB7CisgICAgICAgIC8vIExheW91dCBtYXkgY2F1c2UgdXMgdG8gYmUgYXQgYW4gaW52
YWxpZCBzY3JvbGwgcG9zaXRpb24uIEluIHRoaXMgY2FzZSB3ZSBuZWVkCisgICAgICAgIC8vIHRv
IHB1bGwgb3VyIHNjcm9sbCBvZmZzZXRzIGJhY2sgdG8gdGhlIG1heCAob3IgcHVzaCB0aGVtIHVw
IHRvIHRoZSBtaW4pLgorICAgICAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpKTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICAvLyBGSVhNRTogVGhpcyBsb29rcyB3cm9uZy4gVGhlIGNhcmV0IGFkanVz
dCBtb2RlIHNob3VsZCBvbmx5IGJlIGVuYWJsZWQgb24gZWRpdGluZyByZWxhdGVkIGVudHJ5IHBv
aW50cy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIHdhcyBhZGRlZCB0byBmaXggYW4gaXNzdWUgd2hl
cmUgdGhlIHRleHQgaW5zZXJ0aW9uIHBvaW50IHdvdWxkIGFsd2F5cyBiZSBkcmF3biBvbiB0aGUg
cmlnaHQgZWRnZQorICAgICAgICAvLyBvZiBhIHRleHQgZmllbGQgd2hvc2UgY29udGVudCBvdmVy
Zmxvd2VkIGl0cyBib3VuZHMuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1Nzk3OTc+IGZvciBtb3Jl
IGRldGFpbHMuCisgICAgICAgIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVl
KTsKKyNlbmRpZgorICAgICAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZz
ZXQoKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KKworICAgIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpOworCisgICAgaWYgKG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9p
bnQoc2Nyb2xsT2Zmc2V0KCkpKTsKKworICAgIGlmIChtX2xheWVyLmlzQ29tcG9zaXRlZCgpKSB7
CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Cisg
ICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0NvbmZpZ3VyYXRpb25VcGRhdGUoKTsK
KyAgICB9CisKKyAgICBpZiAoY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpKQorICAgICAgICBt
X2xheWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7CisKKyAgICB1cGRh
dGVTY3JvbGxTbmFwU3RhdGUoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0Cit7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisg
ICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5p
bnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJl
Y3RzLnNjcm9sbENvcm5lci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKHJlY3RzLnJlc2l6ZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAoreworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gT24gaU9TLCB0aGUgc2Nyb2xsYmFycyBhcmUg
bWFkZSBpbiB0aGUgVUkgcHJvY2Vzcy4KKyAgICByZXR1cm4gIWNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQoreworICAgIC8vIERvbid0IGRv
IGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vj
b25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAor
ICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBw
YWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scworICAgIC8vIHdpbGwgYmUgZmFs
c2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJl
IG92ZXJsYXkgc2Nyb2xsYmFycworICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0
IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVu
LAorICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVh
bnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZQorICAgIC8vIHNlY29uZCBwYXNzIGRv
ZXNuJ3QgbmVlZCB0byByZS1lbnRlciB0aGUgUmVuZGVyVHJlZSB0byBnZXQgaXQgcmlnaHQuCisg
ICAgaWYgKGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgIXBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
KSB7CisgICAgICAgIG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldCA9IHBhaW50T2Zmc2V0
OworCisgICAgICAgIC8vIEl0J3Mgbm90IG5lY2Vzc2FyeSB0byBkbyB0aGUgc2Vjb25kIHBhc3Mg
aWYgdGhlIHNjcm9sbGJhcnMgcGFpbnQgaW50byBsYXllcnMuCisgICAgICAgIGlmICgobV9oQmFy
ICYmIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB8fCAobV92QmFyICYmIGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEludFJl
Y3QgbG9jYWxEYW1nZVJlY3QgPSBkYW1hZ2VSZWN0OworICAgICAgICBsb2NhbERhbWdlUmVjdC5t
b3ZlQnkoLXBhaW50T2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvd0NvbnRyb2xzSW50ZXJz
ZWN0UmVjdChsb2NhbERhbWdlUmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
UmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IG1fbGF5ZXIuZW5jbG9zaW5nQ29tcG9zaXRpbmdM
YXllcigpOworICAgICAgICBpZiAoIXBhaW50aW5nUm9vdCkKKyAgICAgICAgICAgIHBhaW50aW5n
Um9vdCA9IHJlbmRlcmVyLnZpZXcoKS5sYXllcigpOworCisgICAgICAgIGlmIChhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBwYWludGluZ1Jvb3QtPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAg
ICBzY3JvbGxhYmxlTGF5ZXItPnNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyh0cnVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWly
ZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9tIENTUyBzY3JvbGxiYXJzIHR3aWNlLgorICAgIGlm
IChwYWludGluZ092ZXJsYXlDb250cm9scyAmJiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50
T2Zmc2V0OworICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scykKKyAgICAgICAgYWRqdXN0
ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKKworICAgIC8v
IE1vdmUgdGhlIHNjcm9sbGJhciB3aWRnZXRzIGlmIG5lY2Vzc2FyeS4gV2Ugbm9ybWFsbHkgbW92
ZSBhbmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcworICAgIC8v
IHdpZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkg
d2hlbiB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAorICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBv
c2l0aW9uZWQgZWxlbWVudHMpLgorICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNp
emUoYWRqdXN0ZWRQYWludE9mZnNldCkpOworCisgICAgLy8gTm93IHRoYXQgd2UncmUgc3VyZSB0
aGUgc2Nyb2xsYmFycyBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBwYWludCB0aGVtLgorICAgIGlm
IChtX2hCYXIgJiYgIWxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBtX2hC
YXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlmIChtX3ZCYXIgJiYgIWxheWVy
Rm9yVmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgbV92QmFyLT5wYWludChjb250ZXh0LCBk
YW1hZ2VSZWN0KTsKKworICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUgaWYg
d2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRo
ZQorICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KKyAgICBwYWludFNjcm9sbENvcm5lcihjb250ZXh0
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKKworICAgIC8vIFBhaW50IG91ciBy
ZXNpemVyIGxhc3QsIHNpbmNlIGl0IHNpdHMgb24gdG9wIG9mIHRoZSBzY3JvbGwgY29ybmVyLgor
ICAgIHBhaW50UmVzaXplcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENvcm5l
cihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBJbnRSZWN0IGFic1JlY3QgPSBzY3Jv
bGxDb3JuZXJSZWN0KCk7CisgICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAgIGlm
ICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRh
dGVTY3JvbGxDb3JuZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5wYWludEludG9SZWN0
KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBhYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVy
bGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdlIG5lZWQKKyAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhp
bmQgaXQuCisgICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3UGxhdGZvcm1SZXNpemVySW1h
Z2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29y
bmVyUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IHJlc2l6ZUNvcm5lckltYWdlOworICAgIEZsb2F0U2l6ZSBjb3JuZXJS
ZXNpemVyU2l6ZTsKKyAgICBpZiAocmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpID49IDIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXpl
Q29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJl
c2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYoKSk7CisgICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0g
cmVzaXplQ29ybmVySW1hZ2VIaVJlczsKKyAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNp
emVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgw
LjVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2Uq
PiByZXNpemVDb3JuZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRl
eHRBcmVhUmVzaXplQ29ybmVyIikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXplQ29ybmVySW1h
Z2UgPSByZXNpemVDb3JuZXJJbWFnZUxvUmVzOworICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9
IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBjb250ZXh0LnNhdmUo
KTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29y
bmVyUmVzaXplclNpemUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNv
cm5lclJlY3QuaGVpZ2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOworICAgICAgICBpZiAocmVzaXpl
Q29ybmVySW1hZ2UpCisgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVy
SW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7CisgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZsb2F0UmVjdCBpbWFn
ZVJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKExheW91dFJlY3QocmVzaXplckNvcm5lclJl
Y3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclJlc2l6ZXJTaXplLCBjb3JuZXJSZXNpemVyU2l6
ZSksIHJlbmRlcmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgY29udGV4
dC5kcmF3SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsK
KyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIExheW91dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOworICAgIHJl
c2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFyZXNpemVyQWJzUmVj
dC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29u
dGV4dC5pbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgICAgICB1cGRhdGVSZXNpemVy
U3R5bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Jlc2l6ZXIpIHsK
KyAgICAgICAgbV9yZXNpemVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCBy
ZXNpemVyQWJzUmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkcmF3UGxhdGZv
cm1SZXNpemVySW1hZ2UoY29udGV4dCwgcmVzaXplckFic1JlY3QpOworCisgICAgLy8gRHJhdyBh
IGZyYW1lIGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFu
eSBzY3JvbGxiYXJzIHByZXNlbnQuCisgICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSBy
aWdodCBhbmQgYm90dG9tIGVkZ2VzIG9mIHRoaXMgZnJhbWUuCisgICAgaWYgKCFoYXNPdmVybGF5
U2Nyb2xsYmFycygpICYmIChtX3ZCYXIgfHwgbV9oQmFyKSkgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQuY2xp
cChyZXNpemVyQWJzUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVz
aXplckFic1JlY3Q7CisgICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFy
Z2VyQ29ybmVyLndpZHRoKCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7
CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIx
NywgMjE3IH0pOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKKyAg
ICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAg
ICAgICBjb250ZXh0LmRyYXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOworICAg
IH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dD
b250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50
KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCku
cmVzaXplKCkgIT0gUmVzaXplOjpOb25lKSB7CisgICAgICAgIGlmIChyZWN0cy5yZXNpemVyLmNv
bnRhaW5zKGxvY2FsUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoaXQgdGVzdCB0aGUgbV9zY3JvbGxDb3JuZXIgYW5kIHBh
c3MgaXQgYmFjayB0aHJvdWdoIHRoZSByZXN1bHQuCisgICAgaWYgKG1fdkJhciAmJiBtX3ZCYXIt
PnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3RzLnZl
cnRpY2FsU2Nyb2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1
bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX2hCYXIgJiYgbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7CisgICAgICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Ny
b2xsYmFyLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CisgICAgICAgICAgICByZXN1bHQuc2V0U2Ny
b2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyLnBhZ2UoKS5mb2N1c0NvbnRyb2xsZXIoKS5pc0FjdGl2ZSgpOwor
fQorCitJbnRQb2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0S25vd25Nb3VzZVBv
c2l0aW9uSW5WaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLnZp
ZXcoKS5mcmFtZVZpZXcoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCk7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5pc0hhbmRsaW5nV2hlZWxFdmVudCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5y
ZW5kZXJlcigpLnVzZURhcmtBcHBlYXJhbmNlKCk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTbmFwT2Zmc2V0
cygpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMu
CisgICAgaWYgKCFpczxIVE1MRWxlbWVudD4obV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCkpIHx8
ICFtX2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJl
bmRlckJveCgpOworICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMs
ICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QK
K3sKKyAgICBpZiAoIXNjcm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+
aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byogc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNT
Y3JvbGxTbmFwSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVQYWludFJvb3QpCit7CisgICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyTGF5ZXI6OkxheWVyUGFpbnRpbmdJbmZv
IHBhaW50aW5nSW5mbygmbV9sYXllciwgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFp
bnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0cmVlUGFpbnRSb290KTsKKyAgICBtX2xheWVy
LnBhaW50TGF5ZXIoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBSZW5kZXJMYXllcjo6UGFpbnRMYXll
ckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOworCisgICAgbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllckZyYWdtZW50cywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExh
eW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0Cit7CisgICAgaWYgKGxheWVyRnJhZ21l
bnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgcmVuZGVy
ZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBl
ZEludFJlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuYm9yZGVyQm94UmVjdCgpKTsK
KyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBhdXRvIGNv
cm5lclJlY3RJbkZyYWdtZW50ID0gWyZdKGNvbnN0IEludFJlY3QmIGZyYWdtZW50Qm91bmRzLCBj
b25zdCBJbnRSZWN0JiByZXNpemVyUmVjdCkgeworICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgICAgICBJbnRTaXplIG9mZnNl
dEZyb21Cb3R0b21MZWZ0ID0gYm9yZGVyQm94UmVjdC5taW5YTWF4WUNvcm5lcigpIC0gcmVzaXpl
clJlY3QubWluWE1heFlDb3JuZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJh
Z21lbnRCb3VuZHMubWluWE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21MZWZ0IC0gSW50
U2l6ZSB7IDAsIHJlc2l6ZXJSZWN0LmhlaWdodCgpIH0sIHJlc2l6ZXJSZWN0LnNpemUoKSB9Owor
ICAgICAgICB9CisgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0ID0gYm9yZGVy
Qm94UmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsK
KyAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5tYXhYTWF4WUNvcm5lcigp
IC0gb2Zmc2V0RnJvbUJvdHRvbVJpZ2h0IC0gcmVzaXplclJlY3Quc2l6ZSgpLCByZXNpemVyUmVj
dC5zaXplKCkgfTsKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IGxheWVyRnJhZ21lbnRzLnNp
emUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IExheWVyRnJhZ21lbnQmIGZy
YWdtZW50ID0gbGF5ZXJGcmFnbWVudHMuYXQoaSk7CisgICAgICAgIGF1dG8gcmVzaXplclJlY3RJ
bkZyYWdtZW50ID0gY29ybmVyUmVjdEluRnJhZ21lbnQoc25hcHBlZEludFJlY3QoZnJhZ21lbnQu
bGF5ZXJCb3VuZHMpLCByZWN0cy5yZXNpemVyKTsKKyAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tn
cm91bmRSZWN0LmludGVyc2VjdHMoaGl0VGVzdExvY2F0aW9uKSAmJiByZXNpemVyUmVjdEluRnJh
Z21lbnQuY29udGFpbnMoaGl0VGVzdExvY2F0aW9uLnJvdW5kZWRQb2ludCgpKSkgeworICAgICAg
ICAgICAgcG9pbnRJbkZyYWdtZW50ID0gdG9MYXlvdXRQb2ludChoaXRUZXN0TG9jYXRpb24ucG9p
bnQoKSAtIGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dy
YXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygpID8gbV9s
YXllci5iYWNraW5nKCktPmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsK
K30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JW
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuYmFja2luZygp
ID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSA6IG51bGxw
dHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkg
PyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFj
a2dyb3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXND
b21wb3NpdGVkU2Nyb2xsaW5nKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlKQoreworICAgIC8vIE92ZXJmbG93IGFyZSBhIGJveCBjb25jZXB0LgorICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5
IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxl
KCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBP
dmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7CisgICAgT3ZlcmZs
b3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOworCisgICAgLy8gVG8gYXZv
aWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdlIHRy
eSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJlc2Vu
dC4KKyAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZsb3dD
bGlwKCkgJiYgKChob3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGlj
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVx
dWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7CisgICAg
Ym9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAo
KHZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Nyb2xsYmFyKGJv
eC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFy
KGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKKyAgICBzZXRIYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgc2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICAvLyBXaXRoIG5vbi1vdmVy
bGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2libGUgYnV0IG1h
eSBiZSBkaXNhYmxlZC4KKyAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVyIHZhbHVlLCB3
ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KKyAgICBpZiAobV9oQmFy
ICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+b3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3ZlcmZsb3c6OlNj
cm9sbCkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOworCisgICAgaWYgKG1fdkJh
ciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVy
Zmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVyZmxvdzo6U2Ny
b2xsKQorICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisKKyAgICBpZiAoIW1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChoYXNT
Y3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9
IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgIGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVu
ZGVyZXIudmlzaWJsZVRvSGl0VGVzdGluZygpOworICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1l
bnQqIG93bmVyID0gZnJhbWVWaWV3LmZyYW1lKCkub3duZXJFbGVtZW50KCkpCisgICAgICAgIGlz
VmlzaWJsZVRvSGl0VGVzdCAmPSBvd25lci0+cmVuZGVyZXIoKSAmJiBvd25lci0+cmVuZGVyZXIo
KS0+dmlzaWJsZVRvSGl0VGVzdGluZygpOworCisgICAgYm9vbCBpc1Njcm9sbGFibGUgPSBoYXNP
dmVyZmxvdyAmJiBpc1Zpc2libGVUb0hpdFRlc3Q7CisgICAgYm9vbCBhZGRlZE9yUmVtb3ZlZCA9
IGZhbHNlOworCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1l
Vmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKKworICAgIGlmIChpc1Njcm9sbGFi
bGUpIHsKKyAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgeworICAgICAg
ICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7
CisgICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAg
IGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwor
ICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOworICAgIH0KKworI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgeworICAg
ICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisg
ICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0
ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2Ft
ZQorICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3Vj
aCBldmVudCBsaXN0ZW5lci4KKyAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpOworICAgICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURf
VkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKQoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gY29ybmVy
ID0gcmVuZGVyZXIuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNo
ZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFjdHVhbFJlbmRl
cmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIWNvcm5lcikgeworICAgICAgICBj
bGVhclNjcm9sbENvcm5lcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFt
X3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0ZVJlbmRlcmVy
PFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdURk1vdmUoKmNvcm5l
cikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91bGQgYmUgYSBjaGlsZCBvZiBp
dHMgcGFyZW50IQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KCZyZW5kZXJlcik7
CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKCkKK3sK
KyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKQorICAgICAgICByZXR1cm47CisgICAgbV9zY3JvbGxD
b3JuZXItPnNldFBhcmVudChudWxscHRyKTsKKyAgICBtX3Njcm9sbENvcm5lciA9IG51bGxwdHI7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxl
KCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVy
KTsKKyAgICBhdXRvIHJlc2l6ZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVh
bFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwg
JmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7CisKKyAgICBpZiAoIXJlc2l6ZXIp
IHsKKyAgICAgICAgY2xlYXJSZXNpemVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIW1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVudCgpLCBXVEZNb3ZlKCpyZXNpemVy
KSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0
cyBwYXJlbnQhCisgICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcik7CisgICAg
ICAgIG1fcmVzaXplci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1f
cmVzaXplci0+c2V0U3R5bGUoV1RGTW92ZSgqcmVzaXplcikpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcigpCit7CisgICAgaWYgKCFtX3Jlc2l6ZXIp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKKyAg
ICBtX3Jlc2l6ZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpCit7CisgICAgaWYgKG1faEJhcikK
KyAgICAgICAgbV9oQmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAg
ICBtX3ZCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7
CisgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7Cit9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VW
RU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2
ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0
c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3co
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpo
YW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVy
ZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNo
RXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91
Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcjsKKyAgICBpZiAo
IXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJG
b3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3VtZW50KCku
cmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9yZWdp
c3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxzZTsKK30KKyNlbmRp
ZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworLy8gRklYTUU6IHRoaXMgaXMgb25seSB2
YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLmlzQ29tcG9zaXRlZCgpICYmIG1fbGF5ZXIuYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXll
cigpOworfQorCitzdGF0aWMgaW5saW5lIGludCBhZGp1c3RlZFNjcm9sbERlbHRhKGludCBiZWdp
bm5pbmdEZWx0YSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGlvbiBtYXRjaGVzIEZpcmVmb3gn
cy4KKyAgICAvLyBodHRwOi8vbXhyLm1vemlsbGEub3JnL2ZpcmVmb3gvc291cmNlL3Rvb2xraXQv
Y29udGVudC93aWRnZXRzL2Jyb3dzZXIueG1sIzg1Ni4KKyAgICBjb25zdCBpbnQgc3BlZWRSZWR1
Y2VyID0gMTI7CisKKyAgICBpbnQgYWRqdXN0ZWREZWx0YSA9IGJlZ2lubmluZ0RlbHRhIC8gc3Bl
ZWRSZWR1Y2VyOworICAgIGlmIChhZGp1c3RlZERlbHRhID4gMSkKKyAgICAgICAgYWRqdXN0ZWRE
ZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8
ZG91YmxlPihhZGp1c3RlZERlbHRhKSkpIC0gMTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZERlbHRh
IDwgLTEpCisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVk
RGVsdGEgKiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oLWFkanVzdGVkRGVsdGEpKSkgKyAxOwor
CisgICAgcmV0dXJuIGFkanVzdGVkRGVsdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50U2l6ZSBh
ZGp1c3RlZFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQoreworICAgIHJldHVybiBJ
bnRTaXplKGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEud2lkdGgoKSksIGFkanVzdGVkU2Nyb2xs
RGVsdGEoZGVsdGEuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQorewor
ICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBtX2xheWVyLnJlbmRlcmVyKCku
ZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7CisKKyAgICAv
LyBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBsYXN0IGtub3duIG1vdXNlIHBvc2l0aW9uIGlzIG91
dCBvZiB0aGUgd2luZG93LiBXaGVuIHRoZSBtb3VzZSBpcyBvdXQgb2YgdGhlIHdpbmRvdywgdGhl
IHBvc2l0aW9uIGlzIGluY29oZXJlbnQKKyAgICBzdGF0aWMgSW50UG9pbnQgcHJldmlvdXNNb3Vz
ZVBvc2l0aW9uOworICAgIGlmIChsYXN0S25vd25Nb3VzZVBvc2l0aW9uLngoKSA8IDAgfHwgbGFz
dEtub3duTW91c2VQb3NpdGlvbi55KCkgPCAwKQorICAgICAgICBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uID0gcHJldmlvdXNNb3VzZVBvc2l0aW9uOworICAgIGVsc2UKKyAgICAgICAgcHJldmlvdXNN
b3VzZVBvc2l0aW9uID0gbGFzdEtub3duTW91c2VQb3NpdGlvbjsKKworICAgIEludFNpemUgZGVs
dGEgPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uIC0gc291cmNlUG9pbnQ7CisKKyAgICBpZiAoYWJz
KGRlbHRhLndpZHRoKCkpIDw9IFNjcm9sbFZpZXc6Om5vUGFuU2Nyb2xsUmFkaXVzKSAvLyBhdCB0
aGUgY2VudGVyIHdlIGxldCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uCisgICAgICAgIGRlbHRhLnNl
dFdpZHRoKDApOworICAgIGlmIChhYnMoZGVsdGEuaGVpZ2h0KCkpIDw9IFNjcm9sbFZpZXc6Om5v
UGFuU2Nyb2xsUmFkaXVzKQorICAgICAgICBkZWx0YS5zZXRIZWlnaHQoMCk7CisKKyAgICBzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsKK30KKworT3B0aW9u
YWw8TGF5b3V0UmVjdD4gUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsUG9z
aXRpb24oU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJl
Y3QsIGNvbnN0IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9s
YXllci5hbGxvd3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xh
eWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgYXV0byBzaG91bGRVc2VB
bmltYXRlZFNjcm9sbCA9IFt0aGlzXShFbGVtZW50KiBlbGVtZW50LCBTY3JvbGxCZWhhdmlvciBi
ZWhhdmlvcikKKyAgICB7CisgICAgICAgIGJvb2wgdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPSAhbV9s
YXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jl
c3MoKQorICAgICAgICAgICAgJiYgZWxlbWVudCAmJiB1c2VTbW9vdGhTY3JvbGxpbmcoYmVoYXZp
b3IsIGVsZW1lbnQpOworICAgICAgICByZXR1cm4gdXNlQW5pbWF0ZWRTY3JvbGxpbmcgPyBBbmlt
YXRlZFNjcm9sbDo6WWVzIDogQW5pbWF0ZWRTY3JvbGw6Ok5vOworICAgIH07CisKKyAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9m
ZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9uKCkp
KTsKKyAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSB8fCBjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSAhPSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5B
bmltYXRpb24pIHsKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9sbE9mZnNldCA9IHNjcm9s
bE9mZnNldCgpOworICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxkVXNlQW5pbWF0ZWRTY3Jv
bGwoYm94LT5lbGVtZW50KCksIGJlaGF2aW9yKTsKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1wZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBl
OjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBhbmltYXRlZCk7CisgICAg
ICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQg
LSBvbGRTY3JvbGxPZmZzZXQ7CisKKyAgICAgICAgYXV0byBsb2NhbEV4cG9zZVJlY3RTY3JvbGxl
ZCA9IGxvY2FsRXhwb3NlUmVjdDsKKyAgICAgICAgbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQubW92
ZSgtc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSk7CisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KGJv
eC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVj
dFNjcm9sbGVkKSksIFVzZVRyYW5zZm9ybXMpLmJvdW5kaW5nQm94KCkpOworICAgIH0KKworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFy
ZWEqKiBzY3JvbGxlZEFyZWEpCit7CisgICAgaWYgKGRlbHRhLmlzWmVybygpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBi
b29sIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOworICAgIGlmIChyZW5kZXJlci5wYXJl
bnQoKSkKKyAgICAgICAgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gIXJlbmRlcmVyLnBhcmVudCgp
LT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOworCisgICAgaWYgKHJlbmRlcmVyLmhhc092
ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKKyAgICAgICAgU2Nyb2xs
T2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7CisgICAgICAg
IHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7CisgICAgICAgIGlmIChzY3JvbGxlZEFy
ZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKKworICAgICAgICAvLyBJZiB0
aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVwIHRo
YXQgY2FuIHNjcm9sbCB0byB0cnkKKyAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxPZmZz
ZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgaWYgKCFyZW1h
aW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIucGFyZW50KCkpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgorICAgICAgICAg
ICAgaWYgKGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9IG1fbGF5ZXIuZW5jbG9zaW5n
U2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1l
Qm91bmRhcmllczo6WWVzKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpCisgICAg
ICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShyZW1h
aW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHJlbmRlcmVyLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJl
bmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBJZiB3ZSBhcmUg
aGVyZSwgd2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0
aWNhbGx5IHNjcm9sbGVkLCBidXQgZG9lc24ndAorICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93
IGNsaXAuIFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJl
IHNjcm9sbGVkLgorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnko
ZGVsdGEpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVk
QXJlYSA9ICZyZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICAgICAgLy8gRklYTUU6
IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0byB0cnkgbG9v
a2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjM3CisgICAgfQorfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNj
cm9sbCgpCit7CisgICAgQVNTRVJUKCZtX2xheWVyID09IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3
KCkubGF5ZXIoKSk7CisKKyAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsIik7CisKKyAgICBS
ZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBtX2xheWVy
LnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFwKTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3Zl
cmZsb3dTY3JvbGwoKQoreworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRy
YW5zZm9ybXMpOworICAgIGlmICgmbV9sYXllciAhPSBtX2xheWVyLnJlbmRlcmVyKCkudmlldygp
LmxheWVyKCkpCisgICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5nc1RvQW5jZXN0b3IobV9s
YXllci5wYXJlbnQoKSwgbnVsbHB0cik7CisKKyAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRv
IG5vdCBjaGVjayB0aGUgYW5jZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KKyAgICAv
LyBpbml0aWFsaXplIHRoZSBIYXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBI
YXNTZWVuQW5jZXN0b3JXaXRoT3ZlcmZsb3dDbGlwIGZsYWdzPworICAgIG1fbGF5ZXIudXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXAsIFJlbmRlckxheWVyOjpJc092
ZXJmbG93U2Nyb2xsKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2Jh
bFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpIGNvbnN0Cit7CisgICAgbV9sYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCku
YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6T3RoZXIsIE1lc3NhZ2VMZXZlbDo6RGVi
dWcsICJSZW5kZXJMYXllcjogIiArIG1lc3NhZ2UpOworfQorCitTdHJpbmcgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIuZGVidWdEZXNjcmlwdGlvbigpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaAppbmRleCA2ZDljZGVjMjI1NTc2YzA5MTFlMmUyMDExODA3NzJhZjAwZTkwNTQ5Li42YWIx
MDA1MDBlN2QwOTU2ODYxN2YyMmM4YWNhZGNmNWZkMWZiMzVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKQEAgLTEsMTgg
KzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KICAqCi0gKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotICoKLSAqIE90aGVyIGNvbnRyaWJ1dG9yczoKLSAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KLSAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+Ci0gKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgotICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgotICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KLSAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KLSAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KLSAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKQEAgLTQ5LDE3
ICszNywyNTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogTWFyayBhcyAn
ZmluYWwnIG9uY2UgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBsYW5kcy4KLWNsYXNzIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgeworY2xhc3MgUmVu
ZGVyTWFycXVlZTsKKworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBmaW5hbCA6IHB1
YmxpYyBTY3JvbGxhYmxlQXJlYSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYShSZW5kZXJMYXllciYp
OwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKIAorICAgIFJlbmRl
ckxheWVyJiBsYXllcigpIHsgcmV0dXJuIG1fbGF5ZXI7IH0KKworICAgIFJlbmRlck1hcnF1ZWUq
IG1hcnF1ZWUoKSBjb25zdCB7IHJldHVybiBtX21hcnF1ZWUuZ2V0KCk7IH0KKyAgICB2b2lkIHVw
ZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOworICAgIHZvaWQgY3JlYXRlT3JEZXN0cm95TWFycXVlZSgp
OworCisgICAgdm9pZCBzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisKKyNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKKyAgICB2b2lkIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9s
bGluZygpOworI2VuZGlmCisKKyAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihP
cHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb25JZk5lZWRlZCgpOworCisgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CisgICAg
aW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OworCisgICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKKworICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMg
dGhhdCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgorICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNp
dmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEg
PSBudWxscHRyKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29u
c3QgU2Nyb2xsT2Zmc2V0JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywg
U2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oY29uc3QgU2Nyb2xsT2Zmc2V0
JiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmcg
PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisKKyAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9u
KGludCB4LCBTY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFt
cGVkLCBBbmltYXRlZFNjcm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisgICAgdm9pZCBzY3Jv
bGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOwor
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBTY3JvbGxU
eXBlLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNj
cm9sbCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7CisKKyAgICAvLyBUaGVzZSBhcmUgb25seSB1c2Vk
IGJ5IG1hcnF1ZWUuCisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9P
ZmZzZXQoU2Nyb2xsT2Zmc2V0KHgsIHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFR5cGU6OlBy
b2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKyAgICB2b2lkIHNjcm9s
bFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkueCgpLCB5KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBi
b29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhh
c1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxi
YXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Ny
b2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0
SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlv
bjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJv
b2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0
aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBS
ZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQg
ZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVy
Zmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAv
LyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93
IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKworICAg
IGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJm
bG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsK
KyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMm
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBj
b25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGlu
Z092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVj
dCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3Zl
cmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdl
UmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWlu
dFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBp
biB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4K
KyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdl
UmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIq
IGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7
IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFi
bGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3Jv
bGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0
dXJlU3RhdGU+KSBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUo
KSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3Io
KSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmlu
YWw7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19U
T1VDSF9FVkVOVFMpCisgICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91
Y2hFdmVudCYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmlu
YWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNj
cm9sbCgpIGZpbmFsOworI2VuZGlmCisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5
ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wgdXNlc0NvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygp
IGNvbnN0IGZpbmFsOworCiAgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xs
YmFyT25MZWZ0KCkgY29uc3QgZmluYWw7CiAKKyAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2
ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3Qg
ZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAg
SW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5h
bDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNl
dFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdO
b2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2li
bGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFy
cywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUg
b3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxF
dmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlv
bnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3go
Ym9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNV
c2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5k
SW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJz
T25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBT
dHJpbmcmKSBjb25zdCBmaW5hbDsKKworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7CisKKyAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7CisgICAg
SW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJs
ZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIHJlcXVlc3RTY3Jv
bGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3Jv
bGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBm
aW5hbDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNl
dENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisg
ICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisK
KyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAg
ICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYg
cmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0
OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNv
bnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxE
aW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBi
b29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xh
bXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlv
dXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihTY3JvbGxCZWhhdmlvciwgY29uc3QgTGF5b3V0
UmVjdCYgcmV2ZWFsUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxFeHBvc2VSZWN0KTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKSB7IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Ny
b2xsaW5nID0gYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgdm9pZCB1cGRh
dGVSZXNpemVyU3R5bGUoKTsKKwogcHJpdmF0ZToKKyAgICAvLyBNaW5pbXVtIHBhZGRpbmcgb24g
eDg2XzY0ICg0IGJ5dGVzKSwgYWZ0ZXIgbV9zY3JvbGxIZWlnaHQpCisgICAgYm9vbCBtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSA6IDE7CisgICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7
CisgICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CisgICAgYm9vbCBtX2hh
c0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgOiAxOworCisjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBib29sIG1fcmVnaXN0ZXJl
ZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDogMTsKKyNlbmRpZgorICAgIGJvb2wg
bV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBt
X3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7CisgICAgYm9vbCBtX2Nv
bnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7CisgICAgYm9vbCBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uIDogMTsKKyAgICBib29sIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0
IDogMTsKKworICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9sbGVkIGFyZWEuCisg
ICAgaW50IG1fc2Nyb2xsV2lkdGg7CisgICAgaW50IG1fc2Nyb2xsSGVpZ2h0OworCiAgICAgUmVu
ZGVyTGF5ZXImIG1fbGF5ZXI7CisgICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsK
KyAgICBTY3JvbGxQb3NpdGlvbiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKKworICAgIC8v
IEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4K
KyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92
QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisg
ICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNp
emVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsK
KyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOworCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1
ZWU+LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDhlOGFkNzA0M2ExZDc0MDYxMTdlMjcyZWIwYTIw
NDVhZmU2NWMyZGUuLmU5MTZlMWM2ODQ2YmMzYjcxODdlYmVmZmFhNGY1NmY5YzA1MjJkODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5
LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxi
YXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9s
bGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0
CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
bGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRl
U2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxm
T3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICgh
ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAK
IGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCkBAIC04
OTIsNyArODk3LDEwIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3RvcigpCiB7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0xheWVyKCkgJiYgZW5jbG9z
aW5nTGF5ZXIoKS0+aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpOworICAg
IGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpID8gZW5jbG9zaW5n
TGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXItPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogSW50UmVjdCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwCmluZGV4IDc2ZTIzZTRkMDk5NmU2YmZiZTQwYTY0NDExNjQ0NTlhYTY3
ODBkOGIuLjdiNGU3NmRjNTdhMWNhOTA4NTlhZjQ1MmFhZjMwOTRjMTFlZWY1MDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAKQEAgLTYwLDcgKzYwLDggQEAg
UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVlZShSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBt
X2xheWVyKGxheWVyKQogICAgICwgbV90aW1lcigqdGhpcywgJlJlbmRlck1hcnF1ZWU6OnRpbWVy
RmlyZWQpCiB7Ci0gICAgbGF5ZXItPnNldENvbnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdl
KGZhbHNlKTsKKyAgICBBU1NFUlQobGF5ZXItPnNjcm9sbGFibGVBcmVhKCkpOworICAgIGxheWVy
LT5zY3JvbGxhYmxlQXJlYSgpLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShm
YWxzZSk7CiB9CiAKIFJlbmRlck1hcnF1ZWU6On5SZW5kZXJNYXJxdWVlKCkgPSBkZWZhdWx0OwpA
QCAtMTcxLDExICsxNzIsMTQgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpzdGFydCgpCiAgICAgaWYg
KG1fdGltZXIuaXNBY3RpdmUoKSB8fCBtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVl
ZUluY3JlbWVudCgpLmlzWmVybygpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIEFTU0VSVChzY3Jv
bGxhYmxlTGF5ZXIpOworCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAhbV9zdG9wcGVkKSB7CiAg
ICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGlj
LCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KG1fc3RhcnQsIDApLCBTY3JvbGxUeXBlOjpQ
cm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFy
dCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7
CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNl
dCgwLCBtX3N0YXJ0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6
VW5jbGFtcGVkKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwog
ICAgICAgICBtX3N0b3BwZWQgPSBmYWxzZTsKQEAgLTI0MywxMyArMjQ3LDE2IEBAIHZvaWQgUmVu
ZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKG1fbGF5ZXItPnJlbmRlcmVyKCku
dmlldygpLm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IG1fbGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJU
KHNjcm9sbGFibGVMYXllcik7CisKICAgICBpZiAobV9yZXNldCkgewogICAgICAgICBtX3Jlc2V0
ID0gZmFsc2U7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1fbGF5
ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9YT2Zmc2V0KG1fc3RhcnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CisgICAgICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNjcm9sbFRvWU9mZnNldChtX3N0YXJ0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICAKQEAgLTI3Miw3ICsyNzksNyBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQo
KQogICAgICAgICBib29sIHBvc2l0aXZlID0gcmFuZ2UgPiAwOwogICAgICAgICBpbnQgY2xpZW50
U2l6ZSA9IChpc0hvcml6b250YWwoKSA/IHJvdW5kVG9JbnQobV9sYXllci0+cmVuZGVyQm94KCkt
PmNsaWVudFdpZHRoKCkpIDogcm91bmRUb0ludChtX2xheWVyLT5yZW5kZXJCb3goKS0+Y2xpZW50
SGVpZ2h0KCkpKTsKICAgICAgICAgaW50IGluY3JlbWVudCA9IGFicyhpbnRWYWx1ZUZvckxlbmd0
aChtX2xheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUluY3JlbWVudCgpLCBjbGllbnRT
aXplKSk7Ci0gICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRhbCgpID8gbV9sYXll
ci0+c2Nyb2xsT2Zmc2V0KCkueCgpIDogbV9sYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKTsKKyAg
ICAgICAgaW50IGN1cnJlbnRQb3MgPSAoaXNIb3Jpem9udGFsKCkgPyBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKSA6IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgp
KTsKICAgICAgICAgbmV3UG9zID0gIGN1cnJlbnRQb3MgKyAoYWRkSW5jcmVtZW50ID8gaW5jcmVt
ZW50IDogLWluY3JlbWVudCk7CiAgICAgICAgIGlmIChwb3NpdGl2ZSkKICAgICAgICAgICAgIG5l
d1BvcyA9IHN0ZDo6bWluKG5ld1BvcywgZW5kUG9pbnQpOwpAQCAtMjg5LDkgKzI5Niw5IEBAIHZv
aWQgUmVuZGVyTWFycXVlZTo6dGltZXJGaXJlZCgpCiAgICAgfQogICAgIAogICAgIGlmIChpc0hv
cml6b250YWwoKSkKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7Cisg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9YT2Zmc2V0KG5ld1Bvcyk7CiAgICAgZWxz
ZQotICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKKyAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobmV3UG9zKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRl
eCAxNTQ3MTc0ZTc0MjFiOGJjZmE5Zjg3MzNkY2IzOGE3ZWY1ZTk3NWUxLi5jMWU2NDQzYzM4MmUy
YTMwMWFlYzcxOWRkN2RhNjI3NGZmMzVlMjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcApAQCAtMTAwMiw3ICsxMDAyLDcgQEAgT3B0aW9uYWw8RmxvYXRSZWN0
PiBSZW5kZXJPYmplY3Q6OmNvbXB1dGVGbG9hdFZpc2libGVSZWN0SW5Db250YWluZXIoY29uc3Qg
RmxvYXQKIHN0YXRpYyB2b2lkIG91dHB1dFJlbmRlclRyZWVMZWdlbmQoVGV4dFN0cmVhbSYgc3Ry
ZWFtKQogewogICAgIHN0cmVhbS5uZXh0TGluZSgpOwotICAgIHN0cmVhbSA8PCAiKEIpbG9jay8o
SSlubGluZS9JKE4pbGluZS1ibG9jaywgKEEpYnNvbHV0ZS9GaShYKWVkLyhSKWVsYXRpdmUvU3Rp
YyhLKXksIChGKWxvYXRpbmcsIChPKXZlcmZsb3cgY2xpcCwgQW5vbihZKW1vdXMsIChHKWVuZXJh
dGVkLCBoYXMoTClheWVyLCAoQylvbXBvc2l0ZWQsICgrKURpcnR5IHN0eWxlLCAoKylEaXJ0eSBs
YXlvdXQiOworICAgIHN0cmVhbSA8PCAiKEIpbG9jay8oSSlubGluZS9JKE4pbGluZS1ibG9jaywg
KEEpYnNvbHV0ZS9GaShYKWVkLyhSKWVsYXRpdmUvU3RpYyhLKXksIChGKWxvYXRpbmcsIChPKXZl
cmZsb3cgY2xpcCwgQW5vbihZKW1vdXMsIChHKWVuZXJhdGVkLCBoYXMoTClheWVyLCBoYXNMYXll
cihTKWNyb2xsYWJsZUFyZWEsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5
IGxheW91dCI7CiAgICAgc3RyZWFtLm5leHRMaW5lKCk7CiB9CiAKQEAgLTExMTYsMTAgKzExMTYs
MTQgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om91dHB1dFJlbmRlck9iamVjdChUZXh0U3RyZWFtJiBz
dHJlYW0sIGJvb2wgbWFyaywgaW50IGRlcHRoKQogICAgIGVsc2UKICAgICAgICAgc3RyZWFtIDw8
ICItIjsKIAotICAgIGlmIChoYXNMYXllcigpKQorICAgIGlmIChoYXNMYXllcigpKSB7CiAgICAg
ICAgIHN0cmVhbSA8PCAiTCI7Ci0gICAgZWxzZQotICAgICAgICBzdHJlYW0gPDwgIi0iOworICAg
ICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oKnRoaXMpLmxheWVyKCkt
PnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzdHJlYW0gPDwgIlMiOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzdHJlYW0gPDwgIi0iOworICAgIH0gZWxzZQorICAgICAgICBzdHJl
YW0gPDwgIi0tIjsKIAogICAgIGlmIChpc0NvbXBvc2l0ZWQoKSkKICAgICAgICAgc3RyZWFtIDw8
ICJDIjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBkM2E2Njcx
YzY3YWMxZDkzNGFmNmIyZWY0ZDdmZWQwY2ZmZjkzMDdkLi45ODFhYmMwZTQ2MzI5NzQwYWRmNGEw
MDcwZjA4OWY1YTUyNjM2ZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCkBAIC0xMDAsNiArMTAwLDcgQEAgY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVibGljIENhY2hl
ZEltYWdlQ2xpZW50LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVuZGVyT2JqZWMKICAgICBmcmll
bmQgY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJFbGVtZW50
OwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBz
aG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVu
IGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25z
dHJ1Y3Rvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggYTA3NTA4MWY1NjVjZWRiNTVkZGJlYzk2OGVj
MmNiMTM5ZDYwYmFiOC4uMjU3YWZiZTE5MDQwYzgyMjY1YzY0OTA3ODQyZWZmZmI1YmRiNmJiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
IlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgpAQCAtMzk3LDE5ICszOTgsMjAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wLCBTY3JvbGxUeXBlLCBTY3JvbGxD
bGEKIAogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50LCBSZW5kZXJCb3gqIHN0YXJ0Qm94LCBjb25z
dCBJbnRQb2ludCYgd2hlZWxFdmVudEFic29sdXRlUG9pbnQpCiB7Ci0gICAgUmVuZGVyVGV4dENv
bnRyb2xJbm5lckJsb2NrKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIo
KTsKKyAgICBhdXRvKiByZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKTsK
ICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVuZGVyTGF5
ZXIqIGxheWVyID0gcmVuZGVyZXItPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisgICAgYXV0byogYm94
TGF5ZXJTY3JvbGxhYmxlID0gcmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+
ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBpZiAoYm94TGF5ZXJT
Y3JvbGxhYmxlICYmIGJveExheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gUmVu
ZGVyQmxvY2tGbG93OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CiB9CiAKIGJv
b2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2lj
YWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxv
YXQgbXVsdGlwbGllciwgRWxlbWVudCoqIHN0b3BFbGVtZW50KQogewotICAgIFJlbmRlckxheWVy
KiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5ZXIoKTsKLSAgICBp
ZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0
eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQorICAgIGF1dG8qIGxheWVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJlcigpLT5sYXllcigpOworICAgIGF1dG8qIGJv
eExheWVyU2Nyb2xsYWJsZSA9IGxheWVyID8gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKSA6IG51bGxwdHI7CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNj
cm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAppbmRleCA3YzAxZjAyMGZlODJjZWFjZjRjNDEy
Y2FkNjlhY2UxMzFlYmNkM2RkLi41OTIwZDU4ZjIwYjAwOTU2ODU1NzZmZjQ2ODJlZWYzNGY3ZTNm
MDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3Bw
CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1
ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJl
YWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RN
YXJrZXIuaCIKQEAgLTYwMCwyMCArNjAxLDI0IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXIoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgY29uc3QgTGF5b3V0UmVjCiAg
ICAgfQogCiAgICAgaWYgKGxheWVyLnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKLSAg
ICAgICAgaWYgKGxheWVyLnNjcm9sbE9mZnNldCgpLngoKSkKLSAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWCAiIDw8IGxheWVyLnNjcm9sbE9mZnNldCgpLngoKTsKLSAgICAgICAgaWYgKGxheWVy
LnNjcm9sbE9mZnNldCgpLnkoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IGxh
eWVyLnNjcm9sbE9mZnNldCgpLnkoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYm
IHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IGxheWVyLnNj
cm9sbFdpZHRoKCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgbGF5ZXIu
c2Nyb2xsV2lkdGgoKTsKLSAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9J
bnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAhPSBsYXllci5zY3JvbGxIZWln
aHQoKSkKLSAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgbGF5ZXIuc2Nyb2xs
SGVpZ2h0KCk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3Jv
bGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxP
ZmZzZXQoKS54KCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxYICIgPDwgc2Nyb2xs
YWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxZICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS55KCk7CisgICAgICAgICAg
ICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0ludChsYXllci5yZW5kZXJCb3goKS0+
Y2xpZW50V2lkdGgoKSkgIT0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpKQorICAgICAg
ICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsV2lkdGggIiA8PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bFdpZHRoKCk7CisgICAgICAgICAgICBpZiAobGF5ZXIucmVuZGVyQm94KCkgJiYgcm91bmRUb0lu
dChsYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpICE9IHNjcm9sbGFibGVMYXllci0+
c2Nyb2xsSGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgdHMgPDwgIiBzY3JvbGxIZWlnaHQgIiA8
PCBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpOworICAgICAgICB9CiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgICBTY3JvbGxiYXJUaGVtZSYgc2Nyb2xsYmFyVGhlbWUgPSBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKTsKLSAgICAgICAgaWYgKCFzY3JvbGxiYXJUaGVtZS5pc01vY2tUaGVt
ZSgpICYmIGxheWVyLmhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIFNjcm9s
bGJhclRoZW1lTWFjJiBtYWNUaGVtZSA9ICpzdGF0aWNfY2FzdDxTY3JvbGxiYXJUaGVtZU1hYyo+
KCZzY3JvbGxiYXJUaGVtZSk7Ci0gICAgICAgICAgICBpZiAobWFjVGhlbWUuaXNMYXlvdXREaXJl
Y3Rpb25SVEwoKmxheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgICAgIHRz
IDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGlyZWN0aW9uIjsKKyAgICAgICAgaWYgKGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAg
IGlmICghc2Nyb2xsYmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBzY3JvbGxhYmxlTGF5ZXItPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKKyAgICAgICAgICAgICAgICBTY3JvbGxiYXJUaGVtZU1h
YyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFy
VGhlbWUpOworICAgICAgICAgICAgICAgIGlmIChtYWNUaGVtZS5pc0xheW91dERpcmVjdGlvblJU
TCgqc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgICAg
ICAgICAgdHMgPDwgIiBzY3JvbGxiYXJIYXNSVExMYXlvdXREaXJlY3Rpb24iOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwCmluZGV4IGIxMDMzZGEwNzkzMDQ2NzliNTU3YTJkMTI0NDkxNDM1NmI2
MjNlN2IuLmZmNDIyMjA3MzIxOGM2ZTUxMDEzNzE2ZGY0OTY3YWJhYWU1OGQyZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC0zMzIsOCArMzMz
LDEwIEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgICAgICBwYWludEluZm8uY29udGV4dCgp
LmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QoKSksIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpKTsKICAgICB9CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5j
YW5SZXNpemUoKSkKLSAgICAgICAgbGF5ZXIoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250
ZXh0KCksIHJvdW5kZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJl
Y3QpOworICAgIGlmIChoYXNMYXllcigpICYmIGxheWVyKCktPmNhblJlc2l6ZSgpKSB7CisgICAg
ICAgIEFTU0VSVChsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKTsKKyAgICAgICAgbGF5ZXIoKS0+
c2Nyb2xsYWJsZUFyZWEoKS0+cGFpbnRSZXNpemVyKHBhaW50SW5mby5jb250ZXh0KCksIHJvdW5k
ZWRJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0KSwgcGFpbnRJbmZvLnJlY3QpOworICAgIH0K
IH0KIAogdm9pZCBSZW5kZXJXaWRnZXQ6OnNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wgaXNPdmVy
bGFwcGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGFiNjAyZDBhY2Vj
ZDIzZmRjYTNjMGQ0OWM3OGJkNzcwMjJmNDU5YWYuLmM1MDQ5ZWRhYTViYTg5ZWM2N2E4YzBhYjk0
Y2E4YTQ2ZTFmMzZjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1
OCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCkBAIC0xODM4LDcgKzE4MzksOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRl
cm5hbHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91
YgogICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkK
ICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAot
ICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94
LmxheWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg1
OSw4ICsyODYxLDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpz
Y3JvbGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8
UmVuZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0g
JmRvd25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAg
ICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2Rl
VHlwZUVycm9yIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01IVE1MLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUwubW0KaW5kZXgg
ODU4NGMyMzFmZWY4YzhkOGI3MDZlOGY5NmVkMDhkNzM4ODUzZGQ1MC4uY2JjNTY3ZTNiZTU0Njc3
OTMzMDUyM2NhMGE3ZmNiNzZkNTM0M2JlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTUhUTUwubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TUhUTUwubW0KQEAgLTUzLDYgKzUzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNFeGVjU3RhdGUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtXaW5kb3cuaD4KICNpbXBvcnQg
PFdlYkNvcmUvV2ViQ29yZVRocmVhZE1lc3NhZ2UuaD4KICNlbmRpZgpAQCAtNzcsNyArNzgsMTQg
QEAgLSAoaW50KXNjcm9sbFhPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4o
KnJlbmRlcmVyKSB8fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJl
cikubGF5ZXIoKS0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNh
c3Q8V2ViQ29yZTo6UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXll
cikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgp
OwogfQogCiAtIChpbnQpc2Nyb2xsWU9mZnNldApAQCAtOTEsNyArOTksMTQgQEAgLSAoaW50KXNj
cm9sbFlPZmZzZXQKICAgICBpZiAoIWlzPFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKSB8
fCAhcmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBkb3duY2FzdDxXZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKS0+
c2Nyb2xsT2Zmc2V0KCkueSgpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpOwogfQogCiAtICh2
b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZzZXQ6KGludCl5CkBAIC0xMTEs
MTEgKzEyNiwxNCBAQCAtICh2b2lkKXNldFNjcm9sbFhPZmZzZXQ6KGludCl4IHNjcm9sbFlPZmZz
ZXQ6KGludCl5IGFkanVzdEZvcklPU0NhcmV0OihCT09MKWFkagogICAgICAgICByZXR1cm47CiAK
ICAgICBhdXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVy
KS5sYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogICAg
IGlmIChhZGp1c3RGb3JJT1NDYXJldCkKLSAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyh0cnVlKTsKLSAgICBsYXllci0+c2Nyb2xsVG9PZmZzZXQoV2ViQ29y
ZTo6U2Nyb2xsT2Zmc2V0KHgsIHkpLCBXZWJDb3JlOjpTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMs
IFdlYkNvcmU6OlNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICBzY3JvbGxhYmxl
TGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwg
V2ViQ29yZTo6U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGlu
Zzo6VW5jbGFtcGVkKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiB9
CiAKIC0gKHZvaWQpYWJzb2x1dGVQb3NpdGlvbjooaW50ICopeCA6KGludCAqKXkgOihpbnQgKil3
IDooaW50ICopaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
aW5kZXggZTBkNDBmYjI2Mjc0YTliYzA4MzFkZDAxYWEwNDcyYjYzMDc4N2FlNy4uOGMyZDAwZTgw
YzI0OWM5ZDkxYmZiMDMyMGZhYzcwYmUxNGFlYTMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NSw2ICs5NSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1ByaW50Q29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJMYXllci5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaD4KQEAgLTczOCw5ICs3MzksMTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6KERPTVJhbmdlICopcmFuZ2UKICNlbHNlCiAgICAgICAgIGF1dG8qIGxheWVyID0gc3Rh
cnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5ZXIp
IHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
dHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJl
TGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFydE5v
ZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5nSW50
UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZlYWxN
b2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRl
ZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3Jl
OjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXMgfSk7Ci0gICAgICAgICAgICBs
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKKyAgICAgICAg
ICAgIHNjcm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKICAgICAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldENh
cmV0UmVjdE5lZWRzVXBkYXRlKCk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS51cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgIH0KQEAgLTc1OCw5ICs3NjAs
MTAgQEAgLSAodm9pZClfc2Nyb2xsRE9NUmFuZ2VUb1Zpc2libGU6KERPTVJhbmdlICopcmFuZ2Ug
d2l0aEluc2V0OihDR0Zsb2F0KWluc2V0CiAgICAgaWYgKHN0YXJ0Tm9kZSAmJiBzdGFydE5vZGUt
PnJlbmRlcmVyKCkpIHsKICAgICAgICAgYXV0byogbGF5ZXIgPSBzdGFydE5vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikgewotICAgICAgICAgICAg
bGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKKyAgICAgICAg
ICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVB
cmVhKCk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAgICAgICAgIHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+
c2Nyb2xsUmVjdFRvVmlzaWJsZShXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJhbmdlUmVjdCks
IGluc2lkZUZpeGVkLCB7IFdlYkNvcmU6OlNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgV2Vi
Q29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJDb3JlOjpTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNob3VsZEFsbG93Q3Jv
c3NPcmlnaW5TY3JvbGxpbmc6Olllc30pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5
ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAKICAgICAgICAg
ICAgIGF1dG8gY29yZUZyYW1lID0gY29yZShzZWxmKTsKICAgICAgICAgICAgIGlmIChjb3JlRnJh
bWUpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYWE1MjA4OTc2MjY2NTE0
NjBmMTM0NTlmZTY5NmJkOTc4NDNjNDNhYS4uMjQ2ZGYxMDUxNjNmNDI5Y2M0MGYwY2JjODllY2Zm
NGEwMjFmNjdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTE0Nyw2ICsx
NDcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUG9wdXBNZW51V2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxheWVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVHJlZUFz
VGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgpAQCAtMjA0OCw4ICsyMDQ5
LDExIEBAIGJvb2wgV2ViVmlldzo6Z2VzdHVyZShXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQogICAgICAgICAgICAgLy8gV2UgbWlnaHQgZGlyZWN0bHkgaGl0IHRoZSBkb2N1bWVudCB3aXRo
b3V0IGhpdHRpbmcgYW55IG5vZGVzCiAgICAgICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2Ny
b2xsQnkobG9naWNhbFNjcm9sbERlbHRhKTsKICAgICAgICAgICAgIHNjcm9sbGVkQXJlYSA9IGNv
cmVGcmFtZS0+dmlldygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3JvbGxlZEFy
ZWEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxCeVJlY3Vyc2l2
ZWx5KGxvZ2ljYWxTY3JvbGxEZWx0YSwgJnNjcm9sbGVkQXJlYSk7CisgICAgICAgIH0KIAogICAg
ICAgICBpZiAoIShVcGRhdGVQYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBCZWdpblBhbm5pbmdGZWVk
YmFja1B0cigpICYmIEVuZFBhbm5pbmdGZWVkYmFja1B0cigpKSkgewogICAgICAgICAgICAgQ2xv
c2VHZXN0dXJlSW5mb0hhbmRsZVB0cigpKGdlc3R1cmVIYW5kbGUpOwo=
</data>
<flag name="commit-queue"
          id="434596"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416980</attachid>
            <date>2021-01-05 02:34:34 -0800</date>
            <delta_ts>2021-01-13 15:28:12 -0800</delta_ts>
            <desc>Patch, v20</desc>
            <filename>bug-60305-20210105113432.patch</filename>
            <type>text/plain</type>
            <size>297885</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI1NmYyZWEzNTRkYjE5
NGM1YTY3MDJkMjJmM2U4MGM2YTIzNmFiMi4uOWI2MzU5Njk3ZmNlN2Y1NTI3YTg2YWNjNjA1OWIy
Njk4MWIzYzc0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MiBAQAorMjAyMS0wMS0wNSAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXIsIGJ5IG1v
dmluZyBhbGwgc2Nyb2xsaW5nL292ZXJmbG93CisgICAgICAgIGhhbmRsaW5nIG91dCBvZiBSZW5k
ZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBtYWtlIGl0
IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAgICBub3Ig
c3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpn
ZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyBjb25zdCk6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2Nyb2xsTGVmdCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIGVk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rp
b246OnJldmVhbFNlbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MTWFycXVlZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcnF1ZWVFbGVtZW50OjpyZW5kZXJNYXJxdWVl
IGNvbnN0KToKKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKToKKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OnNlbGVjdEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxl
V2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3gpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9s
bFRvQW5jaG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRl
bnRzKToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNjcm9sbEluRGlyZWN0aW9uKToKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpvdmVyZmxvd1Njcm9sbFBvc2l0aW9uQ2hhbmdl
ZEZvck5vZGUpOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2wp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24gY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJv
eDo6c2Nyb2xsTGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNjcm9s
bFRvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpzZXR1cFdoZWVsRXZlbnRNb25pdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U2Nyb2xsTGVmdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OnNldFNjcm9sbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94OjppbnRyaW5zaWNTY3JvbGxiYXJMb2dpY2FsV2lkdGggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpy
ZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6cGFuU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Ny
b2xsUG9zaXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRl
QmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Qm94OjpvdmVyZmxvd0NsaXBSZWN0IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRp
b25Db25zdHJhaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9i
amVjdDo6Y29uc3RyYWluaW5nUmVjdEZvclN0aWNreVBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp+UmVuZGVy
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGVMYXll
clBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdGcmFt
ZVJlbmRlckxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNs
b3NpbmdDb250YWluaW5nQmxvY2tMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpyZXNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZp
c2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmRl
YnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Om9m
ZnNldEZyb21SZXNpemVDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpz
Y3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9sbGJhcnMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9s
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjbGlwVG9SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludExheWVyQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJmbG93VGlsZWRCYWNraW5nQ292ZXJh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpjb21wdXRlUGFyZW50
R3JhcGhpY3NMYXllclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJC
YWNraW5nOjp1cGRhdGVHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZVNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJl
c1ZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZs
b3dDb250cm9sc0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnNldENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZVNjcm9sbGluZ05v
ZGVGb3JTY3JvbGxpbmdSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6c2Nyb2xsYWJsZUFyZWFGb3JTY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5V2ViS2l0U2Nyb2xsaW5nTGF5ZXJDb29yZGluYXRvcjo6dXBkYXRlU2Ny
b2xsaW5nTGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0eWxlRGlk
Q2hhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJvZ3Jlc3MgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3Rp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1wU2Nyb2xsT2Zmc2V0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXll
cnNBZnRlclNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTWFycXVlZVBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
c092ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVX
aGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJoYW5nQW1vdW50IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbENv
cm5lclJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
VmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNTaXpl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpkaWRTdGFydFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpkaWRFbmRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNSZWN0cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxiYXJP
ZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6c2Nyb2xsYmFySGlkZGVuQnlTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0
aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6cmVu
ZGVyZXJGb3JTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpl
bmNsb3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhh
c092ZXJmbG93Q29udHJvbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93VG9wIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJm
bG93TGVmdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpvdmVyZmxvd1JpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xs
YWJsZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Omhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRpY2FsT3ZlcmZsb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6c3R5bGVSZXF1aXJlc1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpz
dHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG93c092ZXJmbG93Q29udHJvbHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzQWN0aXZlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxhc3RL
bm93bk1vdXNlUG9zaXRpb25JblZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNIYW5kbGluZ1doZWVsRXZlbnQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2Ug
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBk
YXRlU25hcE9mZnNldHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5G
cmFnbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5
ZXJGb3JTY3JvbGxDb3JuZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclNjcm9sbENvcm5lcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVSZXNp
emVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y2xlYXJSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RlZFNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyT3ZlcmZsb3dTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmRlYnVnRGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFy
ZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1h
cnF1ZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6UmVuZGVyTWFycXVl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpzdGFydCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3Qg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpwYWludCk6
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OiBjb25zdCk6CisKIDIwMjAtMTItMzEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTEZDXVtJRkNdIEhvcml6b250YWwgcGFkZGluZy9ib3JkZXIgbWFrZXMgdGhl
IGlubGluZSBib3ggbm9uLWVtcHR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZTEw
YjRkYjAzMTA2ZTY4ZjU0MTIzYmNlODY2YWU2YjQzMDkzM2JlOC4uNThkYjBhMTIwZjFkZWRlZTRj
Nzg4NWEyMWZiMGM2MDdlNDMzNTg5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIzIEBACisyMDIxLTAxLTA1ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFu
bkBpZ2FsaWEuY29tPgorCisgICAgICAgIFNlcGFyYXRlIHNjcm9sbGluZyBjb2RlIG91dCBvZiBS
ZW5kZXJMYXllcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjAzMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPdmVyaGF1bCBSZW5kZXJMYXllciwgYnkgbW92aW5nIGFsbCBzY3JvbGxpbmcvb3ZlcmZsb3cK
KyAgICAgICAgaGFuZGxpbmcgb3V0IG9mIFJlbmRlckxheWVyLCB0byBzdHJlYW1saW5lIGl0cyBp
bnRlcmZhY2UgYW5kCisgICAgICAgIG1ha2UgaXQgcmUtdXNhYmxlIGZvciBsYXllciB0eXBlcyB0
aGF0IGRvIG5vdCBuZWVkCisgICAgICAgIG5vciBzdXBwb3J0IHNjcm9sbGluZy9vdmVyZmxvdy4K
KworICAgICAgICAqIERPTS9ET01IVE1MLm1tOiBBZGFwdCB0byBSZW5kZXJMYXllci9SZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhIGludGVyZmFjZSBjaGFuZ2VzLgorICAgICAgICAoLVtET01IVE1M
RWxlbWVudCBzY3JvbGxYT2Zmc2V0XSk6CisgICAgICAgICgtW0RPTUhUTUxFbGVtZW50IHNjcm9s
bFlPZmZzZXRdKToKKyAgICAgICAgKC1bRE9NSFRNTEVsZW1lbnQgc2V0U2Nyb2xsWE9mZnNldDpz
Y3JvbGxZT2Zmc2V0OmFkanVzdEZvcklPU0NhcmV0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWUubW06IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfc2Nyb2xsRE9NUmFuZ2VUb1Zp
c2libGU6XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9zY3JvbGxET01SYW5nZVRvVmlzaWJsZTp3
aXRoSW5zZXQ6XSk6CisKIDIwMjAtMTItMTkgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4K
IAogICAgICAgICBNb3ZlIEZyYW1lTG9hZGVyOjphcmVQbHVnaW5zRW5hYmxlZCB0byBGcmFtZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGY2NjQxYjM4YzJlYjc5YjQ1ODdjM2YxZWE1
MzFlYmRlNjVkMWMyMjguLmE1MTg2ZDgzZmMzMzliYWZhOTZiNTRkNDU4YzZlNGZmYzVjZGE1ODYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wMS0w
NSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAg
ICBTZXBhcmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgT3ZlcmhhdWwgUmVuZGVyTGF5ZXIs
IGJ5IG1vdmluZyBhbGwgc2Nyb2xsaW5nL292ZXJmbG93CisgICAgICAgIGhhbmRsaW5nIG91dCBv
ZiBSZW5kZXJMYXllciwgdG8gc3RyZWFtbGluZSBpdHMgaW50ZXJmYWNlIGFuZAorICAgICAgICBt
YWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIgdHlwZXMgdGhhdCBkbyBub3QgbmVlZAorICAgICAg
ICBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDogQWRhcHQgdG8gUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSBpbnRlcmZh
Y2UgY2hhbmdlcy4KKyAgICAgICAgKFdlYlZpZXc6Omdlc3R1cmUpOgorCiAyMDIxLTAxLTAyICBG
dWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5d
W0R1bXBSZW5kZXJUcmVlXSBTb21lIEpTIHRlc3RzIGFyZSB0aW1pbmcgb3V0IG9ubHkgaW4gRGVi
dWcgYnVpbGRzIHNpbmNlIHIyNjkxNTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiNTliYTA5Nzg0NDZjZTM2NjI1YTYyNjA4MzQ1
ODFjMDE2ZWNmOTJlLi44MzFkZTU4N2ZkZWRkYzIwN2I2YTRjZDAxMjU0NWI2NTA1Njc4MTQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00MDg1LDYgKzQwODUsNyBAQAogCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0ODM3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODc4MDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRUE0ODM5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg3
QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODNCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4
NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODgwMDk3RDkz
MDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmpl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Q0VBNDg4NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJUaGVtZU1hYy5oICovOyB9OwogCQlCQ0VBNDg4QTA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNDIxNCw2ICszNDIx
NSw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBS
ZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlckxpbmVCcmVhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAppbmRleCAwMjMwMGQ5ODc4NTFhYmEwNGQ3ZDMzZDU2ZDAwYmM2OTAwZmU1YWNjLi40NjBl
NjVmYjc4YTNiYzU1ZTk2MTE3YTA5YTgzOTg4ZWJmYmY1OTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5o
IgpAQCAtMzkwNiw3ICszOTA3LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBpZiAo
IWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5sYXll
cigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKQEAgLTM5MTksNyArMzkyMCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBGSVhNRTogaXMgcG9pbnQgYSBTY3JvbGxPZmZzZXQgb3IgU2Nyb2xsUG9z
aXRpb24/IFRlc3QgaW4gUlRMIG92ZXJmbG93LgotICAgIGJveC5sYXllcigpLT5zY3JvbGxUb09m
ZnNldChwb2ludCk7CisgICAgYm94LmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KS0+c2Nyb2xsVG9PZmZzZXQocG9pbnQpOwogfQogCiAjaWYgRU5BQkxFKE1BVEhNTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCA5Y2FhM2M4ZTZlZjdmNmVkOWYyZDYzM2Q3NDI3N2FjYzEzOWEy
M2I4Li44ZDcxMWI2NTRmZDZlYWYyYzc5NDBjNGNmMGRmOWY2OTZmM2RkMWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC05Miw2ICs5Miw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNv
bXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKQEAgLTEzMzUsOCArMTMzNiw4IEBAIHZvaWQgRWxlbWVu
dDo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKICAgICAgICAgaW50IGNsYW1wZWRMZWZ0ID0g
Y2xhbXBUb0ludGVnZXIobmV3TGVmdCAqIHJlbmRlcmVyLT5zdHlsZSgpLmVmZmVjdGl2ZVpvb20o
KSk7CiAgICAgICAgIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkID0gdXNlU21vb3RoU2Nyb2xsaW5n
KFNjcm9sbEJlaGF2aW9yOjpBdXRvLCB0aGlzKSA/IEFuaW1hdGVkU2Nyb2xsOjpZZXMgOiBBbmlt
YXRlZFNjcm9sbDo6Tm87CiAgICAgICAgIHJlbmRlcmVyLT5zZXRTY3JvbGxMZWZ0KGNsYW1wZWRM
ZWZ0LCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBh
bmltYXRlZCk7Ci0gICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlcmVyLT5s
YXllcigpKQotICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFy
TGF0Y2hlZFN0YXRlKHRydWUpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
cmVuZGVyZXItPmxheWVyKCkgPyByZW5kZXJlci0+bGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6
IG51bGxwdHIpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldFNjcm9sbFNob3VsZENs
ZWFyTGF0Y2hlZFN0YXRlKHRydWUpOwogICAgIH0KIH0KIApAQCAtMTM1OSw4ICsxMzYwLDggQEAg
dm9pZCBFbGVtZW50OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAgICAgaW50IGNsYW1w
ZWRUb3AgPSBjbGFtcFRvSW50ZWdlcihuZXdUb3AgKiByZW5kZXJlci0+c3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpOwogICAgICAgICBBbmltYXRlZFNjcm9sbCBhbmltYXRlZCA9IHVzZVNtb290aFNj
cm9sbGluZyhTY3JvbGxCZWhhdmlvcjo6QXV0bywgdGhpcykgPyBBbmltYXRlZFNjcm9sbDo6WWVz
IDogQW5pbWF0ZWRTY3JvbGw6Ok5vOwogICAgICAgICByZW5kZXJlci0+c2V0U2Nyb2xsVG9wKGNs
YW1wZWRUb3AsIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQsIGFuaW1hdGVkKTsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVBcmVhID0gcmVuZGVy
ZXItPmxheWVyKCkpCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsU2hvdWxk
Q2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSByZW5kZXJlci0+bGF5ZXIoKSA/IHJlbmRlcmVyLT5sYXllcigpLT5zY3JvbGxhYmxlQXJl
YSgpIDogbnVsbHB0cikKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0U2Nyb2xsU2hv
dWxkQ2xlYXJMYXRjaGVkU3RhdGUodHJ1ZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDliNjdkMjk3ZTE5MWYyZTRjYzZmM2JkZGZl
MzExZjJkNjUzNTAwMjUuLjg0ZGU5OGM4YmFlNjQyZGI3NzI5Mjc3M2FkNzA0OTM2NjRmODg5MjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01OCw2ICs1
OCw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTIzOTEsOSArMjM5MiwxMCBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpyZXZlYWxTZWxlY3Rpb24oU2VsZWN0aW9uUmV2ZWFsTW9kZSByZXZlYWxNb2Rl
LCBjb25zdCBTY3JvbAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIGlmIChSZW5k
ZXJMYXllciogbGF5ZXIgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5lbmNs
b3NpbmdMYXllcigpKSB7CiAgICAgICAgICAgICBpZiAoIW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3Vu
dCkgewotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcodHJ1ZSk7CisgICAgICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5
ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyh0cnVlKTsKICAgICAg
ICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlzaWJsZShyZWN0LCBpbnNpZGVGaXhlZCwg
eyByZXZlYWxNb2RlLCBhbGlnbm1lbnQsIGFsaWdubWVudCwgU2hvdWxkQWxsb3dDcm9zc09yaWdp
blNjcm9sbGluZzo6WWVzIH0pOwotICAgICAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVM
YXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKTsKICAgICAgICAg
ICAgICAgICB1cGRhdGVBcHBlYXJhbmNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fZG9jdW1l
bnQtPnBhZ2UoKSkKICAgICAgICAgICAgICAgICAgICAgbV9kb2N1bWVudC0+cGFnZSgpLT5jaHJv
bWUoKS5jbGllbnQoKS5ub3RpZnlSZXZlYWxlZFNlbGVjdGlvbkJ5U2Nyb2xsaW5nRnJhbWUoKm1f
ZG9jdW1lbnQtPmZyYW1lKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWFycXVlZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFycXVlZUVsZW1l
bnQuY3BwCmluZGV4IDBhZGY3ZDE2NGUyZTRlMmIwZmIxMTNmMDNhMWJkM2E3M2MyNzEyNzUuLjJm
OGNiNjliZTM3MGY0ZmI2YTI0ZGQ2MDMwMjQ4NTc4Yzc1MDgzNzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1hcnF1ZWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXJxdWVlRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAKQEAgLTE3NSw3ICsxNzYsMTAgQEAgUmVuZGVyTWFycXVlZSogSFRNTE1hcnF1ZWVFbGVt
ZW50OjpyZW5kZXJNYXJxdWVlKCkgY29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkgfHwgIXJl
bmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5sYXllcigpLT5tYXJxdWVlKCk7CisgICAgYXV0byog
c2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyQm94TW9kZWxPYmplY3QoKS0+bGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAKaW5kZXggMmRlNDNkYWQ1YTlmYjZkOGM1OTFkN2ZmZmQ0NGUxYzQ0MjY3ODZhMy4uYzAy
YThkNzZjMjEwZTI3OTQ3MzVkMWVkMzFhMmFlMDNmMzkzMGQ4NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTI1Myw5ICsy
NTQsMTEgQEAgdm9pZCBUZXh0RmllbGRJbnB1dFR5cGU6OmVsZW1lbnREaWRCbHVyKCkKICAgICBp
ZiAoIWlubmVyTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8qIGlubmVyTGF5ZXJT
Y3JvbGxhYmxlID0gaW5uZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAg
ICAgYm9vbCBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gZG93bmNhc3Q8UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lPigqcmVuZGVyZXIpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OwotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/
IDAgOiBpbm5lckxheWVyLT5zY3JvbGxXaWR0aCgpLCAwKTsKLSAgICBpbm5lckxheWVyLT5zY3Jv
bGxUb09mZnNldChzY3JvbGxPZmZzZXQpOworICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQo
aXNMZWZ0VG9SaWdodERpcmVjdGlvbiA/IDAgOiBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xs
V2lkdGgoKSwgMCk7CisgICAgaW5uZXJMYXllclNjcm9sbGFibGUtPnNjcm9sbFRvT2Zmc2V0KHNj
cm9sbE9mZnNldCk7CiAKICNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKICAgICBjbG9zZVN1
Z2dlc3Rpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzgyZmY3
YzVkM2Y2YmM4ODQ1ODI5NGJmZjFiNzAwYTMxZTBiZmExZS4uMTUxZTc1YTU3NmFmOWVjNTBmNzMy
NmNhMjE2NTA1ZDA2MTU4ZTQ3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJh
bWVTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpA
QCAtMTUwMSw3ICsxNTAyLDcgQEAgT3B0aW9uYWw8Q3Vyc29yPiBFdmVudEhhbmRsZXI6OnNlbGVj
dEN1cnNvcihjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGJvb2wgc2gKICAgICAgICAgICAg
IGlmIChhdXRvKiBsYXllciA9IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KCpyZW5k
ZXJlcikubGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IGxheWVyLT5pc1Bv
aW50SW5SZXNpemVDb250cm9sKHJvdW5kZWRJbnRQb2ludChyZXN1bHQubG9jYWxQb2ludCgpKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGluUmVzaXplcikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGxheWVyLT5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyBz
b3V0aFdlc3RSZXNpemVDdXJzb3IoKSA6IHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbGF5ZXItPnJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gc291dGhXZXN0UmVzaXplQ3Vyc29yKCkgOiBzb3V0
aEVhc3RSZXNpemVDdXJzb3IoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xODUx
LDkgKzE4NTIsOSBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3Jv
bGxhYmxlQXJlYShOb2RlKiBub2RlKQogICAgICAgICBpZiAoIWxheWVyKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxh
eWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVkZVNl
bGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpIHsKLSAgICAgICAgICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyLT5pc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
Y3JvbGxhYmxlTGF5ZXI7CisgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6Oklu
Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CisgICAgICAgICAgICBpZiAo
IWVuY2xvc2luZ1Njcm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yOTgwLDcgKzI5ODEsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3Rh
cnROb2RlLCBjbwogCiAgICAgUmVuZGVyQm94KiBjdXJyZW50RW5jbG9zaW5nQm94ID0gJmluaXRp
YWxFbmNsb3NpbmdCb3g7CiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdCb3gpIHsKLSAgICAg
ICAgaWYgKFJlbmRlckxheWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVy
KCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+
bGF5ZXIoKSA/IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkg
OiBudWxscHRyKSB7CiAgICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50
LnVuZGVybHlpbmdQbGF0Zm9ybUV2ZW50KCk7CiAgICAgICAgICAgICBib29sIHNjcm9sbGluZ1dh
c0hhbmRsZWQ7CiAgICAgICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGVlZDQ1M2E2M2UyZmJhNGQ4YjVlMjk5YmU5NzIyODRlNTlkOTI3
MDguLjViZDFlYTE5OTgyNmFmZmI5ZTY5NzhmODdiZjcxYThhMDlkZjYxODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMjU5Myw3ICsyNTk0LDggQEAg
dm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGxpbmcoKQogICAg
IGlmICghbGF5b3V0Q29udGV4dCgpLmlzTGF5b3V0TmVzdGVkKCkgJiYgaGFzVmlld3BvcnRDb25z
dHJhaW5lZE9iamVjdHMoKSkgewogICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IHRoaXMtPnJlbmRlclZpZXcoKSkgewogICAgICAgICAgICAgdXBkYXRlV2lkZ2V0UG9zaXRpb25z
KCk7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5sYXllcigpLT51cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSByZW5kZXJWaWV3LT5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAg
ICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50
U2Nyb2xsKCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zMjA4LDYgKzMyMTAsMTAgQEAgdm9p
ZCBGcmFtZVZpZXc6OnNjcm9sbFRvQW5jaG9yKCkKIAogICAgIExPR19XSVRIX1NUUkVBTShTY3Jv
bGxpbmcsIHN0cmVhbSA8PCAiIGFuY2hvciBub2RlIHJlY3QgIiA8PCByZWN0KTsKIAorICAgIGF1
dG8qIGVuY2xvc2luZ0xheWVyID0gYW5jaG9yTm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5
ZXIoKTsKKyAgICBpZiAoZW5jbG9zaW5nTGF5ZXIgJiYgIWVuY2xvc2luZ0xheWVyLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICBlbmNsb3NpbmdMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxl
QXJlYSgpOworCiAgICAgLy8gU2Nyb2xsIG5lc3RlZCBsYXllcnMgYW5kIGZyYW1lcyB0byByZXZl
YWwgdGhlIGFuY2hvci4KICAgICAvLyBBbGlnbiB0byB0aGUgdG9wIGFuZCB0byB0aGUgY2xvc2Vz
dCBzaWRlICh0aGlzIG1hdGNoZXMgb3RoZXIgYnJvd3NlcnMpLgogICAgIGlmIChhbmNob3JOb2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCkBAIC0zODYw
LDcgKzM4NjYsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9zaW5nU2Nyb2xs
YWJsZUFyZWEoKSBjb25zdAogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgYXV0
byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVM
YXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Ok5vKTsKKyAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxh
YmxlQXJlYSgpOwogfQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFCb3VuZGlu
Z0JveChib29sKikgY29uc3QKQEAgLTQzMjQsOCArNDMzNCwxMSBAQCB2b2lkIEZyYW1lVmlldzo6
cGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdAogICAgICAgICByZW5kZXJlciA9IHJlbmRlcmVyLT5wYXJlbnQoKTsKIAogICAgIHJv
b3RMYXllci0+cGFpbnQoY29udGV4dCwgZGlydHlSZWN0LCBMYXlvdXRTaXplKCksIG1fcGFpbnRC
ZWhhdmlvciwgcmVuZGVyZXIsIHsgfSwgc2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSA9PSBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4gPyBSZW5kZXJMYXllcjo6U2VjdXJpdHlP
cmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luIDogUmVuZGVyTGF5ZXI6OlNlY3VyaXR5T3JpZ2lu
UGFpbnRQb2xpY3k6OkFjY2Vzc2libGVPcmlnaW5Pbmx5LCBldmVudFJlZ2lvbkNvbnRleHQpOwot
ICAgIGlmIChyb290TGF5ZXItPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpICYmICFl
dmVudFJlZ2lvbkNvbnRleHQpCi0gICAgICAgIHJvb3RMYXllci0+cGFpbnRPdmVybGF5U2Nyb2xs
YmFycyhjb250ZXh0LCBkaXJ0eVJlY3QsIG1fcGFpbnRCZWhhdmlvciwgcmVuZGVyZXIpOworCisg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVSb290TGF5ZXIgPSByb290TGF5ZXItPnNjcm9sbGFibGVB
cmVhKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVSb290TGF5ZXItPmNvbnRhaW5zRGlydHlP
dmVybGF5U2Nyb2xsYmFycygpICYmICFldmVudFJlZ2lvbkNvbnRleHQpCisgICAgICAgICAgICBz
Y3JvbGxhYmxlUm9vdExheWVyLT5wYWludE92ZXJsYXlTY3JvbGxiYXJzKGNvbnRleHQsIGRpcnR5
UmVjdCwgbV9wYWludEJlaGF2aW9yLCByZW5kZXJlcik7CisgICAgfQogCiAgICAgZGlkUGFpbnRD
b250ZW50cyhjb250ZXh0LCBkaXJ0eVJlY3QsIHBhaW50aW5nU3RhdGUpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TcGF0aWFsTmF2aWdhdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAppbmRleCAzOGZiNDk3MWQyYTMyOTQzN2U3
NDQwMzcyNGE4ZDIxYmYxZDdlMmVhLi44MDliYzE5MTM0NzAwNzg3NDM1OTM2ODQ1YjZjZGE1OTM1
ZTVhMWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcApAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOTQsNyArMzk1LDggQEAgYm9vbCBzY3JvbGxJbkRpcmVjdGlvbihOb2RlKiBjb250YWlu
ZXIsIEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2luZ0xh
eWVyKCktPnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmVuY2xvc2lu
Z0xheWVyKCktPnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbEJ5UmVjdXJzaXZlbHkoSW50U2l6ZShkeCwgZHkpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDMyZDMyZTU5
YjI0MjY1Mjg2NzEwYTVmM2Y3MDUzZTE4MTZhZDllM2IuLjhhNGNhN2JjZDA0MWVmZmJiNmYwMTM5
MTc1MjdjZmJmNThlMzFkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0Zy
YW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC01
Nyw2ICs1Nyw3IEBACiAjaW1wb3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIK
ICNpbXBvcnQgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbXBvcnQg
IlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKQEAgLTgx
OSwxNCArODIwLDE1IEBAIHZvaWQgRnJhbWU6Om92ZXJmbG93U2Nyb2xsUG9zaXRpb25DaGFuZ2Vk
Rm9yTm9kZShjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIE5vZGUqCiAgICAgaWYgKCFyZW5kZXJl
ciB8fCAhcmVuZGVyZXItPmhhc0xheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
ckxheWVyJiBsYXllciA9ICpkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVy
KS5sYXllcigpOworICAgIGF1dG8qIGxheWVyID0gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmpl
Y3Q+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
ci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBl
ID0gbGF5ZXIuY3VycmVudFNjcm9sbFR5cGUoKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xs
VHlwZShpc1VzZXJTY3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3Jh
bW1hdGljKTsKLSAgICBsYXllci5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRp
b24pOwotICAgIGxheWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAg
IGF1dG8gb2xkU2Nyb2xsVHlwZSA9IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbFR5cGUo
KTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9s
bCA/IFNjcm9sbFR5cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOworICAgIHNj
cm9sbGFibGVMYXllci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsK
KyAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUp
OwogCi0gICAgbGF5ZXIuZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlz
IGNhbGwgdGhpcz8KKyAgICBzY3JvbGxhYmxlTGF5ZXItPmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhN
RTogU2hvdWxkIHdlIGFsd2F5cyBjYWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJhbWU6OnJlc2V0QWxs
R2VvbG9jYXRpb25QZXJtaXNzaW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0V2ZW50SGFuZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQppbmRleCBmNjQ4ZDZlMjJiMTc2YjM5NzIyNmJmNjk5NGNjNmI4NGQwMjJlOGZj
Li4xZDRjODYxMTc2ZmVkZWYyMDY0ZTIyMDIzNjM5MDE0NTYzODQxZDZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1w
b3J0ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJS
ZW5kZXJMYXllci5oIgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2lt
cG9ydCAiUmVuZGVyTGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAi
UmVuZGVyV2lkZ2V0LmgiCkBAIC03OTEsNyArNzkyLDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRl
ckxpc3RCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94Pigm
Ym94KTsKIAotICAgIHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRl
biBpbiB0ZXJtcyBvZiBTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4IDhjYWI3NmFmZTU3
ZDA3ZmE3ZDZiYjZhNDEzOWIzZTk1M2NhMWNmMzcuLmZiM2IxZDI5NDZkM2MzMTkyNTYzNzUwZTIz
ZjdlOTJiZWUyMzJhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUg
IlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUu
aCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKQEAgLTExMTIsOCArMTExMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgLy8g
ei1pbmRleC4gV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIs
IHNvIHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbAogICAgIC8vIHNpdCBhYm92ZSB0aGUgYmFja2dy
b3VuZC9ib3JkZXIuCiAgICAgaWYgKChwaGFzZSA9PSBQYWludFBoYXNlOjpCbG9ja0JhY2tncm91
bmQgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZTo6Q2hpbGRCbG9ja0JhY2tncm91bmQpICYmIGhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkKLSAgICAgICAgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkg
PT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290
KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkpCi0gICAgICAg
IGxheWVyKCktPnBhaW50T3ZlcmZsb3dDb250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3Vu
ZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5m
by5yZWN0KSk7CisgICAgICAgICYmIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgJiYgc3R5bGUo
KS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBwYWludEluZm8uc2hvdWxk
UGFpbnRXaXRoaW5Sb290KCp0aGlzKSAmJiAhcGFpbnRJbmZvLnBhaW50Um9vdEJhY2tncm91bmRP
bmx5KCkpCisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50T3ZlcmZsb3dD
b250cm9scyhwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldCksIHNuYXBwZWRJbnRSZWN0KHBhaW50SW5mby5yZWN0KSk7CiB9CiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q29udGVudHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTIwMDYsNyArMjAwNywxMiBAQCBib29sIFJlbmRlckJs
b2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25z
dCBMYXlvdXRQbwogICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1
bHQsIHJvdW5kZWRJbnRQb2ludChsb2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFj
Y3VtdWxhdGVkT2Zmc2V0KSkpOworICAgIEFTU0VSVChsYXllcigpKTsKKyAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xs
YWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2Nyb2xsYWJs
ZUxheWVyLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHJvdW5kZWRJbnRQb2ludChs
b2NhdGlvbkluQ29udGFpbmVyIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwog
fQogCiBOb2RlKiBSZW5kZXJCbG9jazo6bm9kZUZvckhpdFRlc3QoKSBjb25zdApAQCAtMjUwMiwx
MCArMjUwOCwyMyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lIGJhc2VsaW5lVHlwZSwgYm9vbCBmaXJzdExpbmUsIExpbgogICAgICAgICAvLyAodGhlIGNv
bnRlbnQgaW5zaWRlIHRoZW0gbW92ZXMpLiAgVGhpcyBtYXRjaGVzIFdpbklFIGFzIHdlbGwsIHdo
aWNoIGp1c3QgYm90dG9tLWFsaWducyB0aGVtLgogICAgICAgICAvLyBXZSBhbHNvIGdpdmUgdXAg
b24gZmluZGluZyBhIGJhc2VsaW5lIGlmIHdlIGhhdmUgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIsIG9y
IGlmIHdlIGFyZSBzY3JvbGxlZAogICAgICAgICAvLyB2ZXJ0aWNhbGx5IChlLmcuLCBhbiBvdmVy
ZmxvdzpoaWRkZW4gYmxvY2sgdGhhdCBoYXMgaGFkIHNjcm9sbFRvcCBtb3ZlZCkuCi0gICAgICAg
IGJvb2wgaWdub3JlQmFzZWxpbmUgPSAobGF5ZXIoKSAmJiAobGF5ZXIoKS0+bWFycXVlZSgpIHx8
IChkaXJlY3Rpb24gPT0gSG9yaXpvbnRhbExpbmUgPyAobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxi
YXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQoKS55KCkgIT0gMCkKLSAgICAgICAgICAgIDog
KGxheWVyKCktPmhvcml6b250YWxTY3JvbGxiYXIoKSB8fCBsYXllcigpLT5zY3JvbGxPZmZzZXQo
KS54KCkgIT0gMCkpKSkgfHwgKGlzV3JpdGluZ01vZGVSb290KCkgJiYgIWlzUnVieVJ1bigpKTsK
LSAgICAgICAgCi0gICAgICAgIE9wdGlvbmFsPGludD4gYmFzZWxpbmVQb3MgPSBpZ25vcmVCYXNl
bGluZSA/IE9wdGlvbmFsPGludD4oKSA6IGlubGluZUJsb2NrQmFzZWxpbmUoZGlyZWN0aW9uKTsK
KyAgICAgICAgYXV0byBpZ25vcmVCYXNlbGluZSA9IFt0aGlzLCBkaXJlY3Rpb25dKCkgLT4gYm9v
bCB7CisgICAgICAgICAgICBpZiAoaXNXcml0aW5nTW9kZVJvb3QoKSAmJiAhaXNSdWJ5UnVuKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0
cjsKKyAgICAgICAgICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+bWFycXVlZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoZGlyZWN0
aW9uID09IEhvcml6b250YWxMaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxl
TGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZz
ZXQoKS55KCk7CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgfHwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgT3B0aW9uYWw8aW50PiBiYXNlbGluZVBvcyA9IGlnbm9yZUJhc2Vs
aW5lKCkgPyBPcHRpb25hbDxpbnQ+KCkgOiBpbmxpbmVCbG9ja0Jhc2VsaW5lKGRpcmVjdGlvbik7
CiAgICAgICAgIAogICAgICAgICBpZiAoaXNEZXByZWNhdGVkRmxleGlibGVCb3goKSkgewogICAg
ICAgICAgICAgLy8gSGlzdG9yaWNhbGx5LCB3ZSBkaWQgdGhpcyBjaGVjayBmb3IgYWxsIGJhc2Vs
aW5lcy4gQnV0IHdlIGNhbid0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCmluZGV4IDIxM2NlZTNkZWVhY2I0MjVmNjE2MmU0NDIwMjQ3ZTY1YWE5ZjcxOGEu
LjVjOTFmM2RhNWU2OTc0MjFkOTIxOTY0MTVkZTQyZTc2NWQ1YWRlYzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zNDksNyArMzQ5LDggQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91
dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwKIAogICAgIGlmICghc3R5bGUoKS5hdXRvV3JhcCgpICYm
IGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0
aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCi0gICAgICAgIGlmIChsYXll
cigpICYmIGxheWVyKCktPm1hcnF1ZWUoKSAmJiBsYXllcigpLT5tYXJxdWVlKCktPmlzSG9yaXpv
bnRhbCgpKQorICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5
ZXIgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJxdWVlKCkgJiYgc2Nyb2xsYWJsZUxheWVyLT5tYXJx
dWVlKCktPmlzSG9yaXpvbnRhbCgpKQogICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gMDsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggZWQ5ZmEz
NDk4NjFmNmVhMDljMWNhZTA3YWI5ZjhiNGNlYWNiYmNiOC4uNjM3NTkxYWIyMjhlNmI2MGI4MmI3
MjkwZjYwOGUwMTM3OGEzZmEwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eW91dFN0YXRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCkBAIC0zMTksMTAgKzMyMCwxMiBAQCB2b2lkIFJlbmRlckJv
eDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxl
KiBvbGRTdHlsZQogICAgIC8vIElmIG91ciB6b29tIGZhY3RvciBjaGFuZ2VzIGFuZCB3ZSBoYXZl
IGEgZGVmaW5lZCBzY3JvbGxMZWZ0L1RvcCwgd2UgbmVlZCB0byBhZGp1c3QgdGhhdCB2YWx1ZSBp
bnRvIHRoZQogICAgIC8vIG5ldyB6b29tZWQgY29vcmRpbmF0ZSBzcGFjZS4KICAgICBpZiAoaGFz
T3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpICE9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICBTY3JvbGxQ
b3NpdGlvbiBzY3JvbGxQb3NpdGlvbiA9IGxheWVyKCktPnNjcm9sbFBvc2l0aW9uKCk7Ci0gICAg
ICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20oKSAvIG9s
ZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgICAgIHNjcm9sbFBvc2l0aW9uLnNjYWxlKHpv
b21TY2FsZUZhY3Rvcik7Ci0gICAgICAgIGxheWVyKCktPnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKSB7CisgICAgICAgICAgICBTY3JvbGxQb3NpdGlv
biBzY3JvbGxQb3NpdGlvbiA9IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKKyAg
ICAgICAgICAgIGZsb2F0IHpvb21TY2FsZUZhY3RvciA9IG5ld1N0eWxlLmVmZmVjdGl2ZVpvb20o
KSAvIG9sZFN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgICAgICBzY3JvbGxQb3NpdGlv
bi5zY2FsZSh6b29tU2NhbGVGYWN0b3IpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gT3VyIG9wYXF1ZW5lc3MgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQg
dHJpZ2dlcmluZyBsYXlvdXQuCkBAIC01NzEsMTIgKzU3NCwxNCBAQCBpbnQgUmVuZGVyQm94Ojpz
Y3JvbGxIZWlnaHQoKSBjb25zdAogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gaGFzT3ZlcmZsb3dDbGlwKCkgJiYgbGF5ZXIoKSA/IGxheWVyKCktPnNj
cm9sbFBvc2l0aW9uKCkueCgpIDogMDsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7CisgICAgcmV0dXJuICho
YXNPdmVyZmxvd0NsaXAoKSAmJiBzY3JvbGxhYmxlTGF5ZXIpID8gc2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxQb3NpdGlvbigpLngoKSA6IDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnNjcm9sbFRvcCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc092ZXJmbG93Q2xpcCgpICYmIGxheWVyKCkgPyBsYXll
cigpLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA6IDA7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVy
ID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIHJl
dHVybiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgc2Nyb2xsYWJsZUxheWVyKSA/IHNjcm9sbGFibGVM
YXllci0+c2Nyb2xsUG9zaXRpb24oKS55KCkgOiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6cmVz
ZXRMb2dpY2FsSGVpZ2h0QmVmb3JlTGF5b3V0SWZOZWVkZWQoKQpAQCAtNTkwLDMxICs1OTUsMzgg
QEAgc3RhdGljIHZvaWQgc2V0dXBXaGVlbEV2ZW50TW9uaXRvcihSZW5kZXJMYXllciYgbGF5ZXIp
CiAgICAgUGFnZSYgcGFnZSA9IGxheWVyLnJlbmRlcmVyKCkucGFnZSgpOwogICAgIGlmICghcGFn
ZS5pc01vbml0b3JpbmdXaGVlbEV2ZW50cygpKQogICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIu
c2Nyb2xsQW5pbWF0b3IoKS5zZXRXaGVlbEV2ZW50VGVzdE1vbml0b3IocGFnZS53aGVlbEV2ZW50
VGVzdE1vbml0b3IoKSk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIuc2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKworICAgIGF1dG8mIHNj
cm9sbEFuaW1hdG9yID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxBbmltYXRvcigpOworICAgIHNj
cm9sbEFuaW1hdG9yLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihwYWdlLndoZWVsRXZlbnRUZXN0
TW9uaXRvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJCb3g6OnNldFNjcm9sbExlZnQoaW50IG5ld0xl
ZnQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1h
dGVkU2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxh
eWVyKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXll
cigpLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9u
aXRvcigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2Nyb2xsVG9YUG9zaXRpb24obmV3TGVmdCwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsKKyAgICBzY3JvbGxhYmxlTGF5ZXItPnNj
cm9sbFRvWFBvc2l0aW9uKG5ld0xlZnQsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7
CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwgU2Nyb2xsVHlw
ZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5p
bWF0ZWQpCiB7CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSB8fCAhbGF5ZXIoKSkKICAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGxheWVyKCktPmVuc3VyZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBzZXR1cFdoZWVsRXZlbnRNb25pdG9yKCpsYXllcigp
KTsKLSAgICBsYXllcigpLT5zY3JvbGxUb1lQb3NpdGlvbihuZXdUb3AsIHNjcm9sbFR5cGUsIGNs
YW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lQb3NpdGlv
bihuZXdUb3AsIHNjcm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyQm94OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24s
IFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVk
U2Nyb2xsIGFuaW1hdGVkKQogewogICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkgfHwgIWxheWVy
KCkpCiAgICAgICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigp
LT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgc2V0dXBXaGVlbEV2ZW50TW9uaXRv
cigqbGF5ZXIoKSk7Ci0gICAgbGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHNj
cm9sbFR5cGUsIGNsYW1waW5nLCBhbmltYXRlZCk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRT
Y3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcsIGFuaW1hdGVkKTsK
IH0KIAogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25zdApAQCAtODI2LDEy
ICs4MzgsMTggQEAgYm9vbCBSZW5kZXJCb3g6OmluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFyU2l6
ZSgpIGNvbnN0CiAKIGludCBSZW5kZXJCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSBjb25z
dAogewotICAgIHJldHVybiBpbmNsdWRlVmVydGljYWxTY3JvbGxiYXJTaXplKCkgPyBsYXllcigp
LT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGxheWVyKCkgPyBsYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVsbHB0cjsKKyAgICBp
ZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluY2x1
ZGVWZXJ0aWNhbFNjcm9sbGJhclNpemUoKSA/IHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpIDogMDsKIH0KIAogaW50IFJlbmRlckJveDo6aG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGluY2x1ZGVIb3Jpem9udGFsU2Nyb2xsYmFy
U2l6ZSgpID8gbGF5ZXIoKS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKKyAgICBh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEo
KSA6IG51bGxwdHI7CisgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiAw
OworICAgIHJldHVybiBpbmNsdWRlSG9yaXpvbnRhbFNjcm9sbGJhclNpemUoKSA/IHNjcm9sbGFi
bGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpIDogMDsKIH0KIAogaW50IFJlbmRl
ckJveDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKQEAgLTgzOSwxMyAr
ODU3LDE2IEBAIGludCBSZW5kZXJCb3g6OmludHJpbnNpY1Njcm9sbGJhckxvZ2ljYWxXaWR0aCgp
IGNvbnN0CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
KyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xsYWJs
ZUFyZWEoKSA6IG51bGxwdHI7CiAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYg
KHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3Zlcmxh
eVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFz
VmVydGljYWxTY3JvbGxiYXIoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2Nyb2xsYWJsZUxh
eWVyLCBzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyLT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKTsKICAgICAgICAgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKTsKICAgICB9CiAKICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYg
KHN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhY2FuVXNlT3Zlcmxh
eVNjcm9sbGJhcnMoKSkpIHsKLSAgICAgICAgQVNTRVJUKGxheWVyKCkgJiYgbGF5ZXIoKS0+aGFz
SG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzY3JvbGxhYmxl
TGF5ZXIsIHNjcm9sbGFibGVMYXllcik7CisgICAgICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIt
Pmhhc0hvcml6b250YWxTY3JvbGxiYXIoKSk7CiAgICAgICAgIHJldHVybiBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CiAgICAgfQogCkBAIC04NTQsOCArODc1LDggQEAgaW50IFJlbmRlckJv
eDo6aW50cmluc2ljU2Nyb2xsYmFyTG9naWNhbFdpZHRoKCkgY29uc3QKIAogYm9vbCBSZW5kZXJC
b3g6OnNjcm9sbExheWVyKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBFbGVtZW50Kiogc3RvcEVsZW1lbnQp
CiB7Ci0gICAgUmVuZGVyTGF5ZXIqIGJveExheWVyID0gbGF5ZXIoKTsKLSAgICBpZiAoYm94TGF5
ZXIgJiYgYm94TGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KSkgeworICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IGxheWVyKCkgPyBsYXllcigpLT5l
bnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChib3hMYXllclNj
cm9sbGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSwgbXVsdGlwbGllcikpIHsKICAgICAgICAgaWYgKHN0b3BFbGVtZW50KQogICAgICAgICAg
ICAgKnN0b3BFbGVtZW50ID0gZWxlbWVudCgpOwogCkBAIC04ODcsMTIgKzkwOCwxMyBAQCBib29s
IFJlbmRlckJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdAogICAgIAogICAgIFJlbmRlckxheWVyKiBsID0gbGF5ZXIoKTsK
ICAgICBpZiAobCkgeworICAgICAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgIC8v
IE9uIE1hYyBvbmx5IHdlIHJlc2V0IHRoZSBpbmxpbmUgZGlyZWN0aW9uIHBvc2l0aW9uIHdoZW4g
ZG9pbmcgYSBkb2N1bWVudCBzY3JvbGwgKGUuZy4sIGhpdHRpbmcgSG9tZS9FbmQpLgogICAgICAg
ICBpZiAoZ3JhbnVsYXJpdHkgPT0gU2Nyb2xsQnlEb2N1bWVudCkKLSAgICAgICAgICAgIHNjcm9s
bGVkID0gbC0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKFNjcm9sbElubGluZURpcmVjdGlvbkJh
Y2t3YXJkLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpLCBTY3JvbGxCeURvY3VtZW50LCBtdWx0aXBsaWVyKTsKKyAgICAgICAg
ICAgIHNjcm9sbGVkID0gYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRvUGh5c2lj
YWwoU2Nyb2xsSW5saW5lRGlyZWN0aW9uQmFja3dhcmQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCksIHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIFNjcm9sbEJ5RG9jdW1l
bnQsIG11bHRpcGxpZXIpOwogI2VuZGlmCi0gICAgICAgIGlmIChsLT5zY3JvbGwobG9naWNhbFRv
UGh5c2ljYWwoZGlyZWN0aW9uLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCisg
ICAgICAgIGlmIChib3hMYXllclNjcm9sbGFibGUtPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChk
aXJlY3Rpb24sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgICAg
IHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChzY3JvbGxlZCkgewpAQCAt
OTIxLDYgKzk0MywyNyBAQCBib29sIFJlbmRlckJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpIGNvbnN0CiAgICAgcmV0dXJuIGNhbkJlU2Nyb2xsZWRBbmRIYXNTY3JvbGxhYmxl
QXJlYSgpOwogfQogCitib29sIFJlbmRlckJveDo6cmVxdWlyZXNMYXllcldpdGhTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0Cit7CisgICAgLy8gVGhlIFJlbmRlclZpZXcgaXMgYWx3YXlzIGV4cGVjdGVk
IHRvIGJlIHBvdGVudGlhbGx5IHNjcm9sbGFibGUuCisgICAgaWYgKGlzUmVuZGVyVmlldygpIHx8
IGlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAvLyBPdmVyZmxvdyBoYW5kbGluZyBuZWVkcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLgor
ICAgIGlmIChzY3JvbGxzT3ZlcmZsb3coKSB8fCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBo
YXNWZXJ0aWNhbE92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gUmVz
aXplIGhhbmRsaW5nIG5lZWRzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuCisgICAgaWYgKHN0
eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIE1hcnF1ZWUgaGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4K
KyAgICBpZiAoaXNIVE1MTWFycXVlZSgpICYmIHN0eWxlKCkubWFycXVlZUJlaGF2aW9yKCkgIT0g
TWFycXVlZUJlaGF2aW9yOjpOb25lKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwogLy8gRklYTUU6IFRoaXMgaXMgYmFkbHkgbmFtZWQuIG92ZXJmbG93Omhp
ZGRlbiBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgeWV0IHRoaXMgcmV0dXJucyBm
YWxzZSBpbiB0aGF0IGNhc2UuCiBib29sIFJlbmRlckJveDo6Y2FuQmVQcm9ncmFtYXRpY2FsbHlT
Y3JvbGxlZCgpIGNvbnN0CiB7CkBAIC05OTcsOCArMTA0MCw4IEBAIFJlbmRlckJveCogUmVuZGVy
Qm94OjpmaW5kQXV0b3Njcm9sbGFibGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIAogdm9pZCBS
ZW5kZXJCb3g6OnBhblNjcm9sbChjb25zdCBJbnRQb2ludCYgc291cmNlKQogewotICAgIGlmIChs
YXllcigpKQotICAgICAgICBsYXllcigpLT5wYW5TY3JvbGxGcm9tUG9pbnQoc291cmNlKTsKKyAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKSA/IGxheWVyKCktPnNjcm9sbGFi
bGVBcmVhKCkgOiBudWxscHRyKQorICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnBhblNjcm9sbEZy
b21Qb2ludChzb3VyY2UpOwogfQogCiBib29sIFJlbmRlckJveDo6Y2FuVXNlT3ZlcmxheVNjcm9s
bGJhcnMoKSBjb25zdApAQCAtMTAyNyw3ICsxMDcwLDExIEBAIFNjcm9sbFBvc2l0aW9uIFJlbmRl
ckJveDo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAogICAgICAgICByZXR1cm4geyAwLCAwIH07CiAK
ICAgICBBU1NFUlQoaGFzTGF5ZXIoKSk7Ci0gICAgcmV0dXJuIGxheWVyKCktPnNjcm9sbFBvc2l0
aW9uKCk7CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIoKS0+c2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICBpZiAoIXNjcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0dXJuIHsgMCwgMCB9
OworCisgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsUG9zaXRpb24oKTsKIH0KIAog
TGF5b3V0U2l6ZSBSZW5kZXJCb3g6OmNhY2hlZFNpemVGb3JPdmVyZmxvd0NsaXAoKSBjb25zdApA
QCAtMTU5MSw5ICsxNjM4LDEwIEBAIGJvb2wgUmVuZGVyQm94Ojpjb21wdXRlQmFja2dyb3VuZElz
S25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2ZmCiAgICAgaWYgKCFn
ZXRCYWNrZ3JvdW5kUGFpbnRlZEV4dGVudChwYWludE9mZnNldCwgYmFja2dyb3VuZFJlY3QpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5z
Y3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQor
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KICAgICByZXR1cm4gZm9yZWdyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGJhY2tn
cm91bmRSZWN0LCBiYWNrZ3JvdW5kT2JzY3VyYXRpb25UZXN0TWF4RGVwdGgpOwogfQogCkBAIC0x
OTEwLDEwICsxOTU4LDEwIEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpvdmVyZmxvd0NsaXBSZWN0
KGNvbnN0IExheW91dFBvaW50JiBsb2NhdGlvbiwgUmVuZGVyRnJhZ21lCiAgICAgY2xpcFJlY3Qu
c2V0U2l6ZShjbGlwUmVjdC5zaXplKCkgLSBMYXlvdXRTaXplKGJvcmRlckxlZnQoKSArIGJvcmRl
clJpZ2h0KCksIGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsKIAogICAgIC8vIFN1YnRy
YWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KLSAgICBpZiAobGF5ZXIoKSkgewor
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllcigpID8gbGF5ZXIoKS0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAgICAgIGNsaXBSZWN0Lm1vdmUobGF5ZXIo
KS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCAwKTsKLSAgICAgICAgY2xpcFJl
Y3QuY29udHJhY3QobGF5ZXIoKS0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBs
YXllcigpLT5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KHJlbGV2YW5jeSkpOworICAgICAgICAg
ICAgY2xpcFJlY3QubW92ZShzY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
cmVsZXZhbmN5KSwgMCk7CisgICAgICAgIGNsaXBSZWN0LmNvbnRyYWN0KHNjcm9sbGFibGVMYXll
ci0+dmVydGljYWxTY3JvbGxiYXJXaWR0aChyZWxldmFuY3kpLCBzY3JvbGxhYmxlTGF5ZXItPmhv
cml6b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IGNsaXBSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDk2ZTcyZDRm
ODViYzQ5M2ZiNDcyMGJjYzJlMTg1MGU0MDhiNDFjODQuLjhiMjM4OTQ4YmNiZTMxZjEzNTA5M2Zl
YTAxZjM2ODE2NzI5MWFkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAg
LTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1Vz
ZWRaSW5kZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQog
CisgICAgYm9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYg
bG9jYWxSZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0
aGUgYm9keSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBy
b290LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKaW5kZXggODM4MjU2YzExZWYyNGZlNGJmZGNhN2Q2ZGYxMzY5NGRiZmVkOGZkMC4uNWEy
NTkxNjFiMWRjYTYxMzZmOGE2OWJkNzM3OGUyNmE3MzI5ZWExNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC01MSw2ICs1MSw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tp
bmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKKyNpbmNsdWRlICJSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5o
IgpAQCAtNDg5LDggKzQ5MCwxMCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
U3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyhTdGlja3lQb3NpdGlvblZpZXdwbwogICAgICAgICBG
bG9hdFBvaW50IGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9yID0g
Y29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5sb2NhdGlvbigpIC0KICAg
ICAgICAgICAgIEZsb2F0U2l6ZShlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJMZWZ0KCkgKyBl
bmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nTGVmdCgpLAogICAgICAgICAgICAgZW5jbG9zaW5n
Q2xpcHBpbmdCb3guYm9yZGVyVG9wKCkgKyBlbmNsb3NpbmdDbGlwcGluZ0JveC5wYWRkaW5nVG9w
KCkpOwotICAgICAgICBpZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9j
aykKLSAgICAgICAgICAgIGNvbnRhaW5lckxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2Vz
dG9yICs9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBp
ZiAoJmVuY2xvc2luZ0NsaXBwaW5nQm94ICE9IGNvbnRhaW5pbmdCbG9jaykgeworICAgICAgICAg
ICAgaWYgKGF1dG8qIHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyID0gZW5jbG9zaW5n
Q2xpcHBpbmdMYXllci0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgICAgICBjb250YWlu
ZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3RvciArPSBzY3JvbGxhYmxlRW5jbG9z
aW5nQ2xpcHBpbmdMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgY29u
dGFpbmVyUmVjdFJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvci5zZXRMb2NhdGlvbihjb250YWlu
ZXJMb2NhdGlvblJlbGF0aXZlVG9TY3JvbGxpbmdBbmNlc3Rvcik7CiAgICAgfQogICAgIGNvbnN0
cmFpbnRzLnNldENvbnRhaW5pbmdCbG9ja1JlY3QoY29udGFpbmVyUmVjdFJlbGF0aXZlVG9TY3Jv
bGxpbmdBbmNlc3Rvcik7CkBAIC01MDcsOCArNTEwLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OmNvbXB1dGVTdGlja3lQb3NpdGlvbkNvbnN0cmFpbnRzKFN0aWNreVBvc2l0aW9uVmll
d3BvCiAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpIHsKICAgICAgICAgc3RpY2t5TG9j
YXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgLT0gRmxvYXRTaXplKGVuY2xvc2luZ0Ns
aXBwaW5nQm94LmJvcmRlckxlZnQoKSArIGVuY2xvc2luZ0NsaXBwaW5nQm94LnBhZGRpbmdMZWZ0
KCksCiAgICAgICAgICAgICBlbmNsb3NpbmdDbGlwcGluZ0JveC5ib3JkZXJUb3AoKSArIGVuY2xv
c2luZ0NsaXBwaW5nQm94LnBhZGRpbmdUb3AoKSk7Ci0gICAgICAgIGlmICgmZW5jbG9zaW5nQ2xp
cHBpbmdCb3ggIT0gY29udGFpbmluZ0Jsb2NrKQotICAgICAgICAgICAgc3RpY2t5TG9jYXRpb25S
ZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0b3IgKz0gZW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+c2Ny
b2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICgmZW5jbG9zaW5nQ2xpcHBpbmdCb3ggIT0gY29udGFp
bmluZ0Jsb2NrKSB7CisgICAgICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUVuY2xvc2luZ0Ns
aXBwaW5nTGF5ZXIgPSBlbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICAgICAgICAgIHN0aWNreUxvY2F0aW9uUmVsYXRpdmVUb1Njcm9sbGluZ0FuY2VzdG9y
ICs9IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICAvLyBGSVhNRTogRm9yIG5vdywgYXNzdW1lIHRoYXQgfHRoaXN8
IGlzIG5vdCB0cmFuc2Zvcm1lZC4KICAgICBzdGlja3lCb3hSZWxhdGl2ZVRvU2Nyb2xsaW5nQW5l
Y3N0b3Iuc2V0TG9jYXRpb24oc3RpY2t5TG9jYXRpb25SZWxhdGl2ZVRvU2Nyb2xsaW5nQW5jZXN0
b3IpOwpAQCAtNTQ3LDExICs1NTIsMTQgQEAgRmxvYXRSZWN0IFJlbmRlckJveE1vZGVsT2JqZWN0
Ojpjb25zdHJhaW5pbmdSZWN0Rm9yU3RpY2t5UG9zaXRpb24oKSBjb25zdAogCiAgICAgICAgIEZs
b2F0UmVjdCBjb25zdHJhaW5pbmdSZWN0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubG9jYWxUb0Nv
bnRhaW5lclF1YWQoRmxvYXRSZWN0KGNsaXBSZWN0KSwgJnZpZXcoKSkuYm91bmRpbmdCb3goKTsK
IAotICAgICAgICBGbG9hdFBvaW50IHNjcm9sbE9mZnNldCA9IEZsb2F0UG9pbnQoKSArIGVuY2xv
c2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9sbE9mZnNldCgpOworICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllciA9IGVuY2xvc2luZ0NsaXBwaW5nTGF5ZXItPnNjcm9s
bGFibGVBcmVhKCk7CisgICAgICAgIEZsb2F0UG9pbnQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBp
ZiAoc2Nyb2xsYWJsZUVuY2xvc2luZ0NsaXBwaW5nTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxP
ZmZzZXQgPSBGbG9hdFBvaW50KCkgKyBzY3JvbGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllci0+
c2Nyb2xsT2Zmc2V0KCk7CiAKICAgICAgICAgZmxvYXQgc2Nyb2xsYmFyT2Zmc2V0ID0gMDsKLSAg
ICAgICAgaWYgKGVuY2xvc2luZ0NsaXBwaW5nQm94Lmhhc0xheWVyKCkgJiYgZW5jbG9zaW5nQ2xp
cHBpbmdCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAg
ICAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gZW5jbG9zaW5nQ2xpcHBpbmdCb3gubGF5ZXIoKS0+
dmVydGljYWxTY3JvbGxiYXJXaWR0aChJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSk7CisgICAg
ICAgIGlmIChlbmNsb3NpbmdDbGlwcGluZ0JveC5oYXNMYXllcigpICYmIGVuY2xvc2luZ0NsaXBw
aW5nQm94LnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSAmJiBzY3Jv
bGxhYmxlRW5jbG9zaW5nQ2xpcHBpbmdMYXllcikKKyAgICAgICAgICAgIHNjcm9sbGJhck9mZnNl
dCA9IHNjcm9sbGFibGVFbmNsb3NpbmdDbGlwcGluZ0xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKTsKIAogICAgICAgICBjb25zdHJhaW5pbmdS
ZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsT2Zmc2V0LngoKSArIHNjcm9sbGJhck9m
ZnNldCwgc2Nyb2xsT2Zmc2V0LnkoKSkpOwogICAgICAgICByZXR1cm4gY29uc3RyYWluaW5nUmVj
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDI0OTNlZjg2
NGRhNDNhNzgwMjg2MzFlODcyYTMzMGQ1NDA4YWY3MjMuLjEwZDcxYWQ1MDFjNDg4NDM3MTUyNjJk
MTIwMzY4NDQ2ZDU4NGUxZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4K
ICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmlj
YXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTk3LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNp
bmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgIlJlbmRl
ck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKQEAgLTMwMSwx
OCArMzAzLDE1IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGly
dHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRpdmVaT3JkZXJMaXN0KGZhbHNlKQogICAgICwgbV9p
blJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQog
ICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hh
c1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJh
bnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2Up
Ci0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1
cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAgLCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHko
dHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNvbnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVE
ZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2UpCiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50
KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBt
X2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4
ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1
ZSkKQEAgLTMyMCwyMSArMzE5LDExIEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJM
YXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2hhc0Nv
bXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzQ29tcG9zaXRlZE5vbkNvbnRh
aW5lZERlc2NlbmRhbnRzKGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IoZmFsc2UpCi0gICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFs
c2UpCiAgICAgLCBtX2hhc1RyYW5zZm9ybWVkQW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2hhczNE
VHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVj
dChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2Up
Ci0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQot
I2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxz
ZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAg
ICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzU4LDE2ICsz
NDcsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYg
cmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQogICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVz
RGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCku
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAg
IC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhl
ciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCi0gICAgICAgIGlmIChyZW5kZXJCb3go
KSkgewotICAgICAgICAgICAgbV9zY3JvbGxQb3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJT
Y3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVy
bygpKQotICAgICAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVk
TGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVy
Ojp+UmVuZGVyTGF5ZXIoKQpAQCAtMzc1LDI5ICszNTQsMTAgQEAgUmVuZGVyTGF5ZXI6On5SZW5k
ZXJMYXllcigpCiAgICAgaWYgKGluUmVzaXplTW9kZSgpKQogICAgICAgICByZW5kZXJlcigpLmZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXplTGF5ZXJEZXN0cm95ZWQoKTsKIAotICAgIEFTU0VS
VChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZp
ZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVy
ZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNl
bmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0g
ICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0
aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAg
ZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJlcigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxl
QXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9yZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZs
ZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigp
OwotCisgICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CiAgICAgY2xlYXJMYXllckZpbHRl
cnMoKTsKIAogICAgIGlmIChwYWludHNJbnRvUHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTk0Niw3
ICs5MDYsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5
b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvbwogdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25T
ZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiBmbGFncykKIHsKICAgICB1cGRhdGVMYXllclBv
c2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRl
ZCgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CiAKICAgICBpZiAoZ2Vv
bWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRo
aXMsIHBhcmVudCgpKTsKQEAgLTk1NCw3ICs5MTUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNl
dAogICAgIC8vIENsZWFyIG91ciBjYWNoZWQgY2xpcCByZWN0IGluZm9ybWF0aW9uLgogICAgIGNs
ZWFyQ2xpcFJlY3RzKCk7CiAKLSAgICBpZiAoaGFzT3ZlcmZsb3dDb250cm9scygpKSB7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmZsb3dDb250
cm9scygpKSB7CiAgICAgICAgIExheW91dFNpemUgb2Zmc2V0RnJvbVJvb3Q7CiAgICAgICAgIGlm
IChnZW9tZXRyeU1hcCkKICAgICAgICAgICAgIG9mZnNldEZyb21Sb290ID0gTGF5b3V0U2l6ZSh0
b0Zsb2F0U2l6ZShnZW9tZXRyeU1hcC0+YWJzb2x1dGVQb2ludChGbG9hdFBvaW50KCkpKSk7CkBA
IC05NjMsNyArOTI0LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAgIC8v
IGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0b3Ig
bGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rvcihy
b290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhyb3Vu
ZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5w
b3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3QpKTsK
ICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEwMzks
MTQgKzEwMDAsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5k
ZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIGZvciAoUmVuZGVyTGF5
ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFwLCBm
bGFncyk7CiAKLSAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93IHVw
ZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAg
ICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0IGRv
ZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1
ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBk
YXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAg
IGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5n
cygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7CiAg
ICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5ZXJJ
bnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTEyNiwyNyArMTA4MSw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVwYWlu
dExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVyZXIo
KS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVyR2Vv
bWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRlckdl
b21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9IHJl
bmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBwaW5n
c1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBpcyBp
dCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVyIHRv
Ci0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNlc3Rv
ciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9sbCk7
Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
UmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3Np
dGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUKQEAg
LTExOTksMTIgKzExMzMsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcAogICAgIC8vIG9mIGFu
IG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYgcHJv
cGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwogICAgIC8vIHVwZGF0ZWQgYWJvdmUuCiAK
LSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9z
aXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5n
TWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAg
ICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAKICAgICBpZiAo
c2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQogICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFwcGlu
Z3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKQEAgLTE2OTUsOCArMTYyNSwxMCBAQCBib29sIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9u
c0ZsYWc+KiBmbGFncwogICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwogICAgIGlm
IChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFyZW50
ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9zaXRp
b24oKSkpKSB7CiAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJhY3Qg
b3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0gICAg
ICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQot
ICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVudC0+
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcG9zaXRpb25l
ZFBhcmVudFNjcm9sbGFibGVBcmVhID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVk
UGFyZW50U2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5pc0luRmxvd1Bv
c2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVy
KCkpKSB7CiAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRlcklu
bGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5GbG93UG9zaXRp
b25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CkBAIC0xNzA2LDgg
KzE2MzgsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRpb25T
ZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNTRVJUKHBvc2l0
aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94U2Ny
b2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3BlKCk7
CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAgICAg
IGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAg
ICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlvbigp
KTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYSA9IHBh
cmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9pbnQg
LT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9u
KCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50c1Nj
cm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50TGF5
ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKQEAgLTE4MzksOSArMTc3Myw5IEBAIFJlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVy
KCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVyKiBl
bmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKK1JlbmRl
ckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0CiB7
Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgpLm93
bmVyRWxlbWVudCgpOworICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKQEAgLTE4NTIsMTUgKzE3ODYsMTUgQEAgc3RhdGljIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAg
ICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKIH0KIAotc3RhdGljIFJl
bmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJMYXll
ciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQorUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9z
c0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBpZiAo
YXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3Jk
ZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFpbmlu
Z0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNyb3Nz
RnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXll
cik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJp
ZXMpIGNvbnN0CkBAIC0xODc0LDcgKzE4MDgsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAog
ICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAmJiBp
c0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
UmVuZGVyTGF5ZXIqPih0aGlzKTsKICAgICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmllcyk7
IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5l
eHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgZm9yIChhdXRvKiBuZXh0TGF5
ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcyk7
IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5nQmxv
Y2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKICAgICAgICAgaWYgKGlzQ29uc2lkZXJl
ZFNjcm9sbGFibGUoKm5leHRMYXllcikpCiAgICAgICAgICAgICByZXR1cm4gbmV4dExheWVyOwog
ICAgIH0KQEAgLTE4ODIsNTAgKzE4MTYsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJl
YUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJl
bmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0cnVl
LCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xsSW5Q
cm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRv
ci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0j
aWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9sbEFu
aW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Nyb2xs
QW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1h
aW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiByZW5k
ZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZCgpOwot
fQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5jZXN0
b3IoKSBjb25zdAogewogICAgIFJlbmRlckxheWVyKiBjdXJyID0gcGFyZW50KCk7CkBAIC0yNDUx
LDE5ICsyMzQxLDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFuY2VzdG9y
KGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDb2wKICAgICByZXR1cm4gdG9MYXlv
dXRTaXplKGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50KCks
IGFkanVzdEZvckNvbHVtbnMpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJlcigp
LnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAgaWYgKHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0luc2lkZVNW
R0ZvcmVpZ25PYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJMRShP
VkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3JvbGxz
T3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxp
bmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxv
d1Njcm9sbCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KICNpZiBF
TkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIGJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewpAQCAtMjQ5MywyODkg
KzIzNzAsNiBAQCB2b2lkIFJlbmRlckxheWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKQogfQogI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQog
Ci0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgot
Ym9vbCBSZW5kZXJMYXllcjo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAg
IHJldHVybiBpc0NvbXBvc2l0ZWQoKSAmJiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7
Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXll
cnMuCi1ib29sIFJlbmRlckxheWVyOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAotewotICAg
IHJldHVybiBjb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcigqdGhp
cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lu
bmluZ0RlbHRhKQotewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdz
LgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9j
b250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0IGludCBzcGVlZFJlZHVj
ZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVl
ZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAgICBhZGp1c3RlZERl
bHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxk
b3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEg
PCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWRE
ZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7Ci0K
LSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KLQotc3RhdGljIGlubGluZSBJbnRTaXplIGFk
anVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCi17Ci0gICAgcmV0dXJuIElu
dFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxE
ZWx0YShkZWx0YS5oZWlnaHQoKSkpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpwYW5TY3JvbGxG
cm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQotewotICAgIEludFBvaW50IGxh
c3RLbm93bk1vdXNlUG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
bGFzdEtub3duTW91c2VQb3NpdGlvbigpOwotICAgIAotICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sg
aWYgdGhlIGxhc3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdo
ZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hl
cmVudAotICAgIHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0gICAgaWYg
KGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9u
LnkoKSA8IDApCi0gICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNl
UG9zaXRpb247Ci0gICAgZWxzZQotICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uOwotCi0gICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gLSBzb3VyY2VQb2ludDsKLQotICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0g
U2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRo
ZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7Ci0gICAgaWYg
KGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCi0g
ICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKLQotICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRq
dXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkpOwotfQotCi0vLyBGSVhNRTogdW5pZnkgd2l0aCB0aGUg
c2Nyb2xsUmVjdFRvVmlzaWJsZSgpIGNvZGUgYmVsb3cuCi12b2lkIFJlbmRlckxheWVyOjpzY3Jv
bGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNj
cm9sbGVkQXJlYSkKLXsKLSAgICBpZiAoZGVsdGEuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGJvb2wgcmVzdHJpY3RlZEJ5TGluZUNsYW1wID0gZmFsc2U7Ci0gICAgaWYgKHJlbmRl
cmVyKCkucGFyZW50KCkpCi0gICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJl
cigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpOwotCi0gICAgaWYgKHJl
bmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIXJlc3RyaWN0ZWRCeUxpbmVDbGFtcCkgewot
ICAgICAgICBTY3JvbGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCkgKyBk
ZWx0YTsKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3U2Nyb2xsT2Zmc2V0KTsKLSAgICAgICAg
aWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSB0aGlzOwotCi0g
ICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgY2FuJ3QgZG8gdGhlIHNjcm9sbCB3ZSBhc2sgdGhlIG5l
eHQgbGF5ZXIgdXAgdGhhdCBjYW4gc2Nyb2xsIHRvIHRyeQotICAgICAgICBJbnRTaXplIHJlbWFp
bmluZ1Njcm9sbE9mZnNldCA9IG5ld1Njcm9sbE9mZnNldCAtIHNjcm9sbE9mZnNldCgpOwotICAg
ICAgICBpZiAoIXJlbWFpbmluZ1Njcm9sbE9mZnNldC5pc1plcm8oKSAmJiByZW5kZXJlcigpLnBh
cmVudCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZy
YW1lcy4KLSAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbmNsb3NpbmdT
Y3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVC
b3VuZGFyaWVzOjpZZXMpKQotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xs
QnlSZWN1cnNpdmVseShyZW1haW5pbmdTY3JvbGxPZmZzZXQsIHNjcm9sbGVkQXJlYSk7Ci0KLSAg
ICAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Ny
b2xsUmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIElmIHdl
IGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dy
YW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0Ci0gICAgICAgIC8vIGhhdmUgYW4gb3Zl
cmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBj
YW4gYmUgc2Nyb2xsZWQuCi0gICAgICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnNj
cm9sbEJ5KGRlbHRhKTsKLSAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKLSAgICAgICAgICAgICpz
Y3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IElmIHdlIGRpZG4ndCBzY3JvbGwgdGhlIHdob2xlIHdheSwgZG8gd2Ugd2FudCB0
byB0cnkgbG9va2luZyBhdCB0aGUgZnJhbWVzIG93bmVyRWxlbWVudD8gCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNwotICAgIH0KLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNj
cm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKLXsKLSAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
biA9IHBvc2l0aW9uOwotfQotCi12b2lkIFJlbmRlckxheWVyOjphcHBseVBvc3RMYXlvdXRTY3Jv
bGxQb3NpdGlvbklmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRG
cm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOwotICAgIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFJlbmRl
ckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBT
Y3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCi17Ci0gICAg
U2Nyb2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIHNl
dFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQp
OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xs
VHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZywgQW5pbWF0ZWRTY3JvbGwg
YW5pbWF0ZWQpCi17Ci0gICAgU2Nyb2xsUG9zaXRpb24gcG9zaXRpb24obV9zY3JvbGxQb3NpdGlv
bi54KCksIHkpOwotICAgIHNldFNjcm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBj
bGFtcGluZywgYW5pbWF0ZWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3Np
dGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlw
ZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVkKQotewot
ICAgIGlmIChhbmltYXRlZCA9PSBBbmltYXRlZFNjcm9sbDo6WWVzKQotICAgICAgICBzY3JvbGxU
b09mZnNldFdpdGhBbmltYXRpb24oc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwg
c2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQo
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcp
OwotfQotCi1TY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxP
ZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVuKEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQo
KSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShj
b25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Ny
b2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byogc2Ny
b2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRh
dGUoKnRoaXMsIHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0
IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nIGNsYW1waW5nKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0
dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0gICAg
ICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xsT2Zm
c2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xh
bXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7Ci0g
ICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8gcHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9s
bFR5cGUoKTsKLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKLQotICAgIGlm
ICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChj
bGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpKQotICAgICAgICBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcp
OwotICAgIHNldFNjcm9sbEJlaGF2aW9yU3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJ
bkFuaW1hdGlvbik7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5
cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24o
Y29uc3QgU2Nyb2xsT2Zmc2V0JiBvZmZzZXQsIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCi17Ci0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBjdXJy
ZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHNjcm9sbFR5cGUpOwot
Ci0gICAgU2Nyb2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IGNsYW1waW5nID09IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQob2Zmc2V0KSA6IG9mZnNldDsKLSAg
ICBpZiAoY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JTdGF0
dXM6OkluTm9uTmF0aXZlQW5pbWF0aW9uKQotICAgICAgICBzY3JvbGxBbmltYXRvcigpLmNhbmNl
bEFuaW1hdGlvbnMoKTsKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ICE9IHRoaXMtPnNjcm9sbE9m
ZnNldCgpKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0
aW9uKG5ld1Njcm9sbE9mZnNldCk7Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91
c1Njcm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBTY3Jv
bGxQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3go
KTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlv
biA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIg
PDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKLQot
ICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFib3gt
PmlzSFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9u
cyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRl
biBibG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAg
ICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAgICAg
ICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0
byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAgICAg
ICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGll
bnRXaWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxP
ZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9sbFhP
ZmZzZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBt
YXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCAr
PSBjYXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0
V2lkdGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAgICAg
ICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJl
dFdpZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKLQot
ICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAgICBu
ZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3
UG9zaXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZp
b3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1
YXJhbnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBh
dCB0aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29v
cmRpbmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBh
IGdlc3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRh
dGUoKTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3NpdGlv
biA9IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCkudmll
dygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAo
aWYgbmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNj
cm9sbCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVz
ZSB3ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0
b3IuCi0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVy
VHJlZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5
b3V0LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgot
ICAgICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQotICAg
ICAgICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0K
LSAgICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAv
LyBBdm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3Rh
Y2ssIHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0aW9u
cy4gVXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRv
LWRhdGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdy
ZSBzdGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGlu
ZyBsYXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0gICAg
ICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgICAg
IHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRl
ZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAgICAg
ICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgc3RhY2tp
bmcgY29udGV4dC4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBzdGFj
a2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2Nl
bmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkg
Y2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJlbmRlcmVy
KCkuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOwotICAg
ICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUoKSk7Ci0g
ICAgfQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAgIFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNvbnRhaW5l
ckZvclJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlk
YXRlZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3RO
ZWVkc1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5k
ZXJlcigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0
UmVjdHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9y
UmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1v
dXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAocmVwYWlu
dENvbnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJlcGFpbnRD
b250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7
Ci0gICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29u
SW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1aXJlc1Jl
cGFpbnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXREZXNj
ZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAg
IHJlcXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Ny
b2xsKCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBv
dXIgb2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRlcmVyKCku
cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsK
LQotICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVu
dHMuCi0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAg
ICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVs
ZW1lbnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3LmZyYW1l
VmlldygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZpZXcoKS52
aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVy
RGlkU2Nyb2xsKCp0aGlzKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFu
ZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2Us
IEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewogICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4
cGxpY2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgpAQCAtMjgyMCw3ICsyNDE0LDcg
QEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0
JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKIAogICAgIExheW91dFJlY3QgbmV3UmVjdCA9IGFi
c29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29udGFpbmlu
Z0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgYXV0byog
cGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllczo6Tm8pOwogCiAgICAgYXV0byBzaG91bGRVc2VBbmltYXRlZFNjcm9sbCA9IFt0aGlz
XShFbGVtZW50KiBlbGVtZW50LCBTY3JvbGxCZWhhdmlvciBiZWhhdmlvcikKICAgICB7CkBAIC0y
ODMwLDYgKzI0MjQsOCBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNv
bnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgIH07CiAKICAgICBp
ZiAoYWxsb3dzQ3VycmVudFNjcm9sbCgpKSB7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgICAgICAvLyBEb24ndCBzY3Jv
bGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3RlZCBieSB0aGUg
LXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgogICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVu
dCB1cyBmcm9tIHJldmVhbGluZyB0ZXh0IGhpZGRlbiBieSB0aGUgc2xpZGVyIGluIFNhZmFyaSBS
U1MuCiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CkBAIC0yODQwLDI0ICsy
NDM2LDE3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAgICAgICAgIC8vIGJvcmRlciBlZGdl
LiBNYWtlIHRoZSByZWN0YW5nbGUgcmVsYXRpdmUgdG8gdGhlIHNjcm9sbGFibGUgYXJlYS4KICAg
ICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeSgtTGF5b3V0UG9pbnQoYm94LT5ib3JkZXJMZWZ0
KCksIGJveC0+Ym9yZGVyVG9wKCkpKTsKIAotICAgICAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAgIGlmIChib3gtPnNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewogICAgICAgICAgICAgLy8gRm9yIGRp
cmVjdGlvbjogcnRsOyB3cml0aW5nLW1vZGU6IGhvcml6b250YWwtdGIgYm94LCB0aGUgc2Nyb2xs
IGJhciBpcyBvbiB0aGUgbGVmdCBzaWRlLiBUaGUgdmlzaWJsZSByZWN0CiAgICAgICAgICAgICAv
LyBzdGFydHMgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBzY3JvbGwgYmFyLiBTbyB0aGUgeCBvZiBs
b2NhbEV4cG9zZVJlY3Qgc2hvdWxkIHN0YXJ0IGZyb20gdGhlIHNhbWUgcG9zaXRpb24gdG9vLgot
ICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtdmVydGljYWxT
Y3JvbGxiYXJXaWR0aCgpLCAwKSk7CisgICAgICAgICAgICBsb2NhbEV4cG9zZVJlY3QubW92ZUJ5
KExheW91dFBvaW50KC1zY3JvbGxhYmxlTGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwg
MCkpOwogICAgICAgICB9CiAgICAgICAgIExheW91dFJlY3QgbGF5ZXJCb3VuZHMoMF9sdSwgMF9s
dSwgYm94LT5jbGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKICAgICAgICAgZXhw
YW5kU2Nyb2xsUmVjdFRvVmlzaWJsZVRhcmdldFJlY3RUb0luY2x1ZGVTY3JvbGxQYWRkaW5nKGJv
eCwgbGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVjdCk7CiAgICAgICAgIExheW91dFJlY3QgcmV2
ZWFsUmVjdCA9IGdldFJlY3RUb0V4cG9zZShsYXllckJvdW5kcywgbG9jYWxFeHBvc2VSZWN0LCBp
bnNpZGVGaXhlZCwgb3B0aW9ucy5hbGlnblgsIG9wdGlvbnMuYWxpZ25ZKTsKIAotICAgICAgICBT
Y3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IGNsYW1wU2Nyb2xsT2Zmc2V0KHNjcm9s
bE9mZnNldCgpICsgdG9JbnRTaXplKHJvdW5kZWRJbnRSZWN0KHJldmVhbFJlY3QpLmxvY2F0aW9u
KCkpKTsKLSAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkg
fHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6
Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBTY3JvbGxPZmZzZXQgb2xkU2Nyb2xsT2Zm
c2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgICAgICBhdXRvIGFuaW1hdGVkID0gc2hvdWxk
VXNlQW5pbWF0ZWRTY3JvbGwoYm94LT5lbGVtZW50KCksIG9wdGlvbnMuYmVoYXZpb3IpOwotICAg
ICAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb25Gcm9tT2Zmc2V0KGNsYW1w
ZWRTY3JvbGxPZmZzZXQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkLCBhbmltYXRlZCk7Ci0gICAgICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERp
ZmZlcmVuY2UgPSBjbGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OwotICAgICAg
ICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOwotICAg
ICAgICAgICAgbmV3UmVjdCA9IExheW91dFJlY3QoYm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZs
b2F0UXVhZChGbG9hdFJlY3QobG9jYWxFeHBvc2VSZWN0KSksIFVzZVRyYW5zZm9ybXMpLmJvdW5k
aW5nQm94KCkpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNjcm9sbGFi
bGVMYXllci0+dXBkYXRlU2Nyb2xsUG9zaXRpb24ob3B0aW9ucy5iZWhhdmlvciwgcmV2ZWFsUmVj
dCwgbG9jYWxFeHBvc2VSZWN0KSkKKyAgICAgICAgICAgIG5ld1JlY3QgPSByZXN1bHQudmFsdWUo
KTsKICAgICB9IGVsc2UgaWYgKCFwYXJlbnRMYXllcikgewogICAgICAgICBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5vd25lckVsZW1l
bnQoKTsKIApAQCAtMjg3MSw3ICsyNDYwLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVj
dFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAg
ICAgICAgICAgICAgICAvLyBJZiB0aGlzIGFzc2VydGlvbiBmaXJlcyB3ZSBuZWVkIHRvIHByb3Rl
Y3QgdGhlIG93bmVyRWxlbWVudCBmcm9tIGJlaW5nIGRlc3Ryb3llZC4KICAgICAgICAgICAgICAg
ICBTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVhZCBzY3JpcHREaXNhbGxvd2VkU2Nv
cGU7CiAKLSAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZp
c2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRSZWN0IHZpZXdSZWN0ID0gZnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVj
dChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAKICAgICAg
ICAgICAgICAgICBhdXRvKiBlbGVtZW50ID0gb3duZXJFbGVtZW50LT5jb250ZW50RG9jdW1lbnQo
KSA/IG93bmVyRWxlbWVudC0+Y29udGVudERvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpIDog
bnVsbHB0cjsKICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIHJlbmRlcmVyID0gZWxlbWVudCA/
IGVsZW1lbnQtPnJlbmRlckJveCgpIDogbnVsbHB0cjsKQEAgLTI5NDgsMjMgKzI1MzcsNiBAQCB2
b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFi
c29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICBwYXJlbnRMYXllci0+c2Nyb2xsUmVjdFRv
VmlzaWJsZShuZXdSZWN0LCBpbnNpZGVGaXhlZCwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKQotewotICAgIGlmIChj
b21wb3NpdG9yKCkuaGFzQ29udGVudENvbXBvc2l0aW5nTGF5ZXJzKCkpIHsKLSAgICAgICAgLy8g
T3VyIHN0YWNraW5nIGNvbnRhaW5lciBpcyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91
ciBkZXNjZW5kYW50cyB0aGF0IG1heSBuZWVkCi0gICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNv
IHVwZGF0ZSBjb21wb3NpdGluZyBsYXllcnMgZnJvbSB0aGVyZS4KLSAgICAgICAgaWYgKFJlbmRl
ckxheWVyKiBjb21wb3NpdGluZ0FuY2VzdG9yID0gc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2lu
Z0NvbXBvc2l0aW5nTGF5ZXIoKSkgewotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25Db21wb3NpdGVkU2Nyb2xsLCBjb21wb3Np
dGluZ0FuY2VzdG9yKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiB3b3VsZCBiZSBuaWNlIHRvIG9ubHkgZGlydHkgbGF5ZXJzIHdob3NlIHBvc2l0aW9ucyB3
ZXJlIGFmZmVjdGVkIGJ5IHNjcm9sbGluZy4KLSAgICAgICAgICAgICAgICBjb21wb3NpdGluZ0Fu
Y2VzdG9yLT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVy
c2FsKCk7Ci0gICAgICAgICAgICAgICAgY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3Ip
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiBMYXlvdXRSZWN0IFJlbmRl
ckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uc3QgTGF5b3V0UmVjdCYgdmlzaWJsZVJlY3QsIGNv
bnN0IExheW91dFJlY3QmIGV4cG9zZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9s
bEFsaWdubWVudCYgYWxpZ25YLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWSkgY29uc3QK
IHsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpOwpAQCAtMzExMSw3ICsyNjgzLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVzaXplKGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRPZmYKICAgICBl
bGVtZW50LT5zZXRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKG1pbmltdW1TaXplKTsKICAgICAKICAg
ICBMYXlvdXRTaXplIGFkanVzdGVkT2xkT2Zmc2V0ID0gTGF5b3V0U2l6ZShvbGRPZmZzZXQud2lk
dGgoKSAvIHpvb21GYWN0b3IsIG9sZE9mZnNldC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOwotICAg
IGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICBp
ZiAocmVuZGVyZXItPnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkg
ewogICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoLW5ld09mZnNldC53aWR0aCgpKTsKICAgICAg
ICAgYWRqdXN0ZWRPbGRPZmZzZXQuc2V0V2lkdGgoLWFkanVzdGVkT2xkT2Zmc2V0LndpZHRoKCkp
OwogICAgIH0KQEAgLTMxMjksMTA4NSArMjcwMSwxNjUgQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVz
aXplKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBMYXlvdXRTaXplJiBvbGRP
ZmYKICAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NT
UHJvcGVydHlNYXJnaW5SaWdodCwgcmVuZGVyZXItPm1hcmdpblJpZ2h0KCkgLyB6b29tRmFjdG9y
LCBDU1NVbml0VHlwZTo6Q1NTX1BYKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRVbml0IGJh
c2VXaWR0aCA9IHJlbmRlcmVyLT53aWR0aCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6
IHJlbmRlcmVyLT5ob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ0V4dGVudCgpKTsKLSAgICAgICAg
YmFzZVdpZHRoID0gYmFzZVdpZHRoIC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJh
c2VXaWR0aCArIGRpZmZlcmVuY2Uud2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAg
IH0KLQotICAgIGlmIChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2Uu
aGVpZ2h0KCkpIHsKLSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVt
ZW50KSkgewotICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRo
ZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0
b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1h
cmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAg
IH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0g
KGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBh
ZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZh
Y3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQo
KSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxh
eW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBh
dXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVy
IHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxh
eWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9k
ZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1ib29s
IFJlbmRlckxheWVyOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+
IGdlc3R1cmVTdGF0ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykK
LSAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhh
bmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCks
IGdlc3R1cmVTdGF0ZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFy
ZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgZ2VzdHVyZVN0YXRl
KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwo
VmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwg
VmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxi
YXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5j
bHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNj
cm9sbGJhckludHJ1c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52
aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgo
MCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1h
eCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07
Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNp
ZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCku
cnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6
IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFi
bGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9t
UG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDAp
Ci0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2Ug
aWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJs
ZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVp
Z2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJl
dGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNp
emUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0g
dmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0Lngo
KSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0
dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCku
Zm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6
c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNS
ZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3Ju
ZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAg
ICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsK
LSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxi
YXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJh
bWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCks
IHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3Qm
IHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRl
cmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9s
bGJhcikpOwotICAgIHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNl
dChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsK
LX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCku
ZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVy
KCksIHBhcmVudFBvaW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xs
YmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNp
YmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAg
ICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRT
aXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVu
dEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkp
OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUo
KTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAg
ICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZp
c2libGVTaXplKCkud2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxP
dmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRl
bnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJu
IGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNp
emVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9s
bGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlm
IChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQp
IHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAg
IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0
Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25z
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hv
dWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNo
cm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCku
ZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVw
ZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNj
cm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBw
YWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsK
LX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlv
bkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigp
LmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVu
ZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKSBjb25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
KTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkp
OwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRv
IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJC
b3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAg
ICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkg
OiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhcikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5
SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkp
OwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3Zlcmxh
eVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJh
ck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsK
LSAgICBib29sIGhhdmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJl
c2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3Zl
cmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJh
cikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIg
fHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3Ju
ZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYg
b25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAg
ICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQsCi0gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNj
cm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9
Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7
Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7
Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsK
LSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAg
ICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53
aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRy
YWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQu
aG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikg
ewotICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0
OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAg
ICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5l
cikKLSAgICAgICAgICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0K
LSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRv
IGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENv
cm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwg
Y29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQot
ICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQot
ICAgIGlmIChoYXZlUmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVy
KQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xs
YmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1
bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRo
aWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjpp
bnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAg
aWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAg
ICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0Owot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAg
Ly8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8g
bmVlZCB0byByZXBhaW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYg
KCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNj
cm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0K
LSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3go
KS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFp
bnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlk
YXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXIt
PnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRS
ZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5y
ZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYg
c2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9y
aXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQg
PSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAo
c2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJl
bmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAq
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJl
bmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3
aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3Jp
ZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Ny
b2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIp
OwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0g
ICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAg
IHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2
ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmll
dygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwo
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFy
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsK
LSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxi
YXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Ny
b2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5k
ZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJl
bmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0g
ICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3Jl
YXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFO
RElORykKLSAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJm
bG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxh
YmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxF
bGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVS
X0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBE
ZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29y
bmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9s
bGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFu
Z2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNT
Y3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJh
cigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBz
Y3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0Zv
clN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRp
YyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVy
dGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAg
ICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxi
YXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRl
IHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5n
ZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQot
ICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0g
ICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigq
dGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0g
ZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQot
I2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFw
T2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxl
bWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAh
ZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVw
ZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUo
KSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3Jv
bGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1h
dG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3Jv
bGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhl
ciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0K
LVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJf
cywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAn
LCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5z
Zm9ybSgpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0g
ICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIi
X3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkp
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYg
KGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBi
bGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2gg
Zm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAg
IFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGlj
YWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250
cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxl
dmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFy
dGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0
Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygp
Ci0gICAgICAgIHx8IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kg
PT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBh
dGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hC
YXItPmhlaWdodCgpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXpl
Q29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVz
aXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVz
aXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8g
cmVzaXplclJlY3QubWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hC
YXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNp
emUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3Zl
cmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAo
IW1faEJhciAmJiAhbV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBy
ZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92
QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAK
LSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92
ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhv
cml6b250YWxTY3JvbGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwot
Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVj
dHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAot
ewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5KQotICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3Jv
bGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50
U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9z
Y3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVu
c2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25h
cHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0
dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6
b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7
Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7
Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4g
b3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dC
b3R0b20oKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
TGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAg
Ym94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZs
b3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0
KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVj
dC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgo
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewot
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAg
ICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNl
dFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAg
ICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92
ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRU
b0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxl
TGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xs
YWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJU
b3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJm
bG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0
ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92
ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRh
bE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkg
JiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXll
cjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBo
YXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3Jv
bGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0K
LWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFT
U0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdo
dCgpID4gcm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0
aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4
aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5v
dmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxB
Y3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQ
c2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUo
KS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZs
b3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBi
b29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cg
PSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5
bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUu
aGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92
ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJv
eCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5v
dGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJv
eFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93
ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92
ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZs
b3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBk
aXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJl
cigpLnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVu
YWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVx
dWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0g
ICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8v
IFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4g
aWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9u
dGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRv
QmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxP
dmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5o
YXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRh
bFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAg
ICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQot
ICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZs
b3cpOwotICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSkKLSAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3Zl
cmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAg
cmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5v
dmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZs
b3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93
UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMp
OwotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hh
bmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJh
ckNoYW5nZWQpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5s
YXlvdXQoKTsKLSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3Qq
IHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFy
ZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVG
b3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2Ug
KGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGlu
dCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAg
aW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAg
IG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3Rl
cCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxT
aXplLndpZHRoKCkpOwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGll
bnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQg
cGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1f
dkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7
Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUg
dXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAg
IGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0ZVNl
bGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8v
IEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBw
cm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRp
ZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5b3V0
IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhp
cyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFj
ayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNjcm9s
bE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlz
IGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxl
ZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNvZGUg
d2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQg
d291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9mIGEg
dGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChjbGFt
cGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xsVG9P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBpZiAo
b3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0gICAg
aWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRy
eVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0
ZSgpOwotICAgIH0KLQotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAg
ICAgIHNldE5lZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVT
Y3JvbGxTbmFwU3RhdGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9s
c0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAotewotICAgIGF1
dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChyZWN0cy5ob3Jp
em9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJl
Y3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYmFzZVdpZHRoID0gYmFzZVdpZHRo
IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCByb3VuZFRvSW50KGJhc2VXaWR0aCArIGRpZmZlcmVuY2Uu
d2lkdGgoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAotICAgIGlmIChyZWN0cy5z
Y3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAocmVzaXplICE9IFJlc2l6ZTo6SG9yaXpvbnRhbCAmJiBkaWZmZXJlbmNlLmhlaWdo
dCgpKSB7CisgICAgICAgIGlmIChpczxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkp
IHsKKyAgICAgICAgICAgIC8vIE1ha2UgaW1wbGljaXQgbWFyZ2lucyBmcm9tIHRoZSB0aGVtZSBl
eHBsaWNpdCAoc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3
PikuCisgICAgICAgICAgICBzdHlsZWRFbGVtZW50LT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5TWFyZ2luVG9wLCByZW5kZXJlci0+bWFyZ2luVG9wKCkgLyB6b29tRmFjdG9yLCBD
U1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlbmRlcmVyLT5tYXJnaW5C
b3R0b20oKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICB9Cisg
ICAgICAgIExheW91dFVuaXQgYmFzZUhlaWdodCA9IHJlbmRlcmVyLT5oZWlnaHQoKSAtIChpc0Jv
eFNpemluZ0JvcmRlciA/IDBfbHUgOiByZW5kZXJlci0+dmVydGljYWxCb3JkZXJBbmRQYWRkaW5n
RXh0ZW50KCkpOworICAgICAgICBiYXNlSGVpZ2h0ID0gYmFzZUhlaWdodCAvIHpvb21GYWN0b3I7
CisgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlIZWlnaHQsIHJvdW5kVG9JbnQoYmFzZUhlaWdodCArIGRpZmZlcmVuY2UuaGVpZ2h0KCkpLCBD
U1NVbml0VHlwZTo6Q1NTX1BYKTsKKyAgICB9CiAKLSAgICBpZiAocmVjdHMucmVzaXplci5pbnRl
cnNlY3RzKGxvY2FsUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGRvY3VtZW50LnVw
ZGF0ZUxheW91dCgpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FIChSYWRhciA0
MTE4NTY0KTogV2Ugc2hvdWxkIGFsc28gYXV0b3Njcm9sbCB0aGUgd2luZG93IGFzIG5lY2Vzc2Fy
eSB0byBrZWVwIHRoZSBwb2ludCB1bmRlciB0aGUgY3Vyc29yIGluIHZpZXcuCiB9CiAKLWJvb2wg
UmVuZGVyTGF5ZXI6OnNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0CitJbnRTaXplIFJlbmRl
ckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0CiB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LSAgICAvLyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNz
LgotICAgIHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOwotI2VuZGlmCisgICAg
UmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBJbnRTaXplKHJv
dW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdo
dCgpKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK1JlbmRl
ckxheWVyOjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkgY29uc3QKIHsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5v
IG92ZXJmbG93LgotICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CiAKLSAgICBpZiAoIXNob3dz
T3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkpOworICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRl
ckJveD4ocmVuZGVyZXIoKSk7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3Jk
ZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsK
IAotICAgIC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91
Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhhdCB0aGV5IHdpbGwgcGFpbnQKLSAgICAvLyBvbiB0b3Ag
b2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywg
cGFpbnRpbmdPdmVybGF5Q29udHJvbHMKLSAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hv
dWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBsYXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9s
bGJhcnMKLSAgICAvLyB0aGF0IG5lZWQgdG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRo
ZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHRvIHJ1biwKLSAgICAvLyBhbmQg
d2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJhcnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0
eCBhbmQgdHkgc28gdGhhdCB0aGUgCi0gICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRv
IHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KLSAgICBpZiAoaGFzT3Zl
cmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKLSAgICAgICAg
bV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0KLSAgICAgICAg
Ly8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xs
YmFycyBwYWludCBpbnRvIGxheWVycy4KLSAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSW50UmVjdCBsb2NhbERhbWdl
UmVjdCA9IGRhbWFnZVJlY3Q7Ci0gICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRP
ZmZzZXQpOwotICAgICAgICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2Fs
RGFtZ2VSZWN0KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBib29sIHBsYWNlVmVydGljYWxT
Y3JvbGxiYXJPblRoZUxlZnQgPSByZW5kZXJCb3guc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5kZXJlcigpLnN0eWxl
KCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOwogCi0gICAgICAgIFJlbmRlckxheWVyKiBwYWlu
dGluZ1Jvb3QgPSBlbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7Ci0gICAgICAgIGlmICghcGFp
bnRpbmdSb290KQotICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIoKS52aWV3KCku
bGF5ZXIoKTsKKyAgICBPdmVyZmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7CisgICAgYXV0byBjb3Ju
ZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0
aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29y
bmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOwor
ICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0
b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3Np
dGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsK
KyAgICB9OwogCi0gICAgICAgIHBhaW50aW5nUm9vdC0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzKHRydWUpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGhhdmVSZXNpemVyKSB7
CisgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1l
KCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgIHJlc3VsdC5yZXNpemVyID0gY29ybmVy
UmVjdCh7IHNjcm9sbGJhclRoaWNrbmVzcywgc2Nyb2xsYmFyVGhpY2tuZXNzIH0pOwogICAgIH0K
IAotICAgIC8vIFRoaXMgY2hlY2sgaXMgcmVxdWlyZWQgdG8gYXZvaWQgcGFpbnRpbmcgY3VzdG9t
IENTUyBzY3JvbGxiYXJzIHR3aWNlLgotICAgIGlmIChwYWludGluZ092ZXJsYXlDb250cm9scyAm
JiAhaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9p
bnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0OwotICAgIGlmIChwYWludGluZ092
ZXJsYXlDb250cm9scykKLSAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldCA9IG1fY2FjaGVkT3Zl
cmxheVNjcm9sbGJhck9mZnNldDsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgLy8gTW92
ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiAgV2Ugbm9ybWFsbHkgbW92ZSBh
bmQgcmVzaXplIHdpZGdldHMgZHVyaW5nIGxheW91dCwgYnV0IHNvbWV0aW1lcwotICAgIC8vIHdp
ZGdldHMgY2FuIG1vdmUgd2l0aG91dCBsYXlvdXQgb2NjdXJyaW5nIChtb3N0IG5vdGFibHkgd2hl
biB5b3Ugc2Nyb2xsIGEgZG9jdW1lbnQgdGhhdAotICAgIC8vIGNvbnRhaW5zIGZpeGVkIHBvc2l0
aW9uZWQgZWxlbWVudHMpLgotICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyh0b0ludFNpemUo
YWRqdXN0ZWRQYWludE9mZnNldCkpOworU3RyaW5nIFJlbmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0
aW9uKCkgY29uc3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5h
cHBlbmQoIlJlbmRlckxheWVyIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHRoaXMpLCBMb3dlcmNhc2UpLCAnICcsIHNpemUoKS53aWR0aCgpLCAneCcsIHNpemUoKS5oZWln
aHQoKSk7CiAKLSAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBp
biB0aGUgcmlnaHQgcGxhY2UsIHBhaW50IHRoZW0uCi0gICAgaWYgKG1faEJhciAmJiAhbGF5ZXJG
b3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwg
ZGFtYWdlUmVjdCk7Ci0gICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpKQotICAgICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworICAgIGlm
ICh0cmFuc2Zvcm0oKSkKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBoYXMgdHJhbnNmb3JtIl9z
KTsKIAotICAgIGlmIChsYXllckZvclNjcm9sbENvcm5lcigpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGhhc0ZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIi
X3MpOwogCi0gICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlIGlmIHdl
IGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBhbGwgdGhlIHdheSB1cCB0byB0aGUK
LSAgICAvLyBlZGdlIG9mIHRoZSBib3guCi0gICAgcGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwg
YWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci0gICAgCi0gICAgLy8gUGFpbnQgb3Vy
IHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIu
Ci0gICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJl
Y3QpOwotfQorICAgIGlmIChoYXNCYWNrZHJvcEZpbHRlcigpKQorICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyBiYWNrZHJvcCBmaWx0ZXIiX3MpOwogCi12b2lkIFJlbmRlckxheWVyOjpwYWlu
dFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBw
YWludE9mZnNldCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKLXsKLSAgICBJbnRSZWN0IGFi
c1JlY3QgPSBzY3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZz
ZXQpOwotICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3QpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGhhc0JsZW5kTW9kZSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
IGhhcyBibGVuZCBtb2RlIl9zKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRy
b2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7CiAKLSAgICBpZiAobV9zY3JvbGxD
b3JuZXIpIHsKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwg
cGFpbnRPZmZzZXQsIGFic1JlY3QpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGlzQ29tcG9z
aXRlZCgpKSB7CisgICAgICAgIC8vIE9oIGZvciBiZXR0ZXIgU3RyaW5nQnVpbGRlci9UZXh0U3Ry
ZWFtIGludGVncmF0aW9uLgorICAgICAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICAgICAgc3Ry
ZWFtIDw8ICIgIiA8PCAqYmFja2luZygpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJlYW0u
cmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29y
bmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCi0gICAgLy8g
dG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgotICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSkKLSAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29u
dGV4dCwgYWJzUmVjdCk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCitJbnRTaXplIFJl
bmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2NhbFBv
aW50KSBjb25zdAogewotICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7Ci0gICAg
RmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOwotICAgIGlmIChyZW5kZXJlcigpLmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOwotICAgICAgICBy
ZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7Ci0gICAgICAgIGNvcm5l
clJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKLSAgICAgICAgY29ybmVy
UmVzaXplclNpemUuc2NhbGUoMC41Zik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7Ci0gICAg
ICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKLSAgICAgICAg
Y29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwotICAgIH0KLQot
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAg
ICAgICAgY29udGV4dC5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJD
b3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJS
ZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsK
LSAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJS
ZXNpemVyU2l6ZSkpOwotICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQotICAgICAgICByZXR1
cm47Ci0gICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5
b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXpl
clNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwotICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwg
aW1hZ2VSZWN0KTsKKyAgICBhdXRvIHJlc2l6ZXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkucmVzaXplcjsKKyAgICBhdXRvIHJlc2l6ZUNvcm5lciA9IHJlbmRlcmVyKCkuc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlD
b3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgcmV0dXJuIGxvY2Fs
UG9pbnQgLSByZXNpemVDb3JuZXI7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXpl
cihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCkKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xs
V2lkdGgoKSBjb25zdAogewotICAgIGlmIChyZW5kZXJlcigpLnN0eWxlKCkucmVzaXplKCkgPT0g
UmVzaXplOjpOb25lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVj
dHMucmVzaXplcjsKLSAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOwotICAg
IGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKLSAgICAgICAgcmV0
dXJuOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsV2lkdGgoKTsKIAotICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNp
emVyLT5wYWludEludG9SZWN0KGNvbnRleHQsIHBhaW50T2Zmc2V0LCByZXNpemVyQWJzUmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2Uo
Y29udGV4dCwgcmVzaXplckFic1JlY3QpOwotCi0gICAgLy8gRHJhdyBhIGZyYW1lIGFyb3VuZCB0
aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3JvbGxiYXJzIHBy
ZXNlbnQuCi0gICAgLy8gQ2xpcHBpbmcgd2lsbCBleGNsdWRlIHRoZSByaWdodCBhbmQgYm90dG9t
IGVkZ2VzIG9mIHRoaXMgZnJhbWUuCi0gICAgaWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpICYm
IChtX3ZCYXIgfHwgbV9oQmFyKSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuY2xpcChyZXNpemVyQWJzUmVj
dCk7Ci0gICAgICAgIExheW91dFJlY3QgbGFyZ2VyQ29ybmVyID0gcmVzaXplckFic1JlY3Q7Ci0g
ICAgICAgIGxhcmdlckNvcm5lci5zZXRTaXplKExheW91dFNpemUobGFyZ2VyQ29ybmVyLndpZHRo
KCkgKyAxX2x1LCBsYXJnZXJDb3JuZXIuaGVpZ2h0KCkgKyAxX2x1KSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoU1JHQkE8dWludDhfdD4geyAyMTcsIDIxNywgMjE3IH0pOwotICAg
ICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgICAgICBjb250ZXh0LmRy
YXdSZWN0KHNuYXBwZWRJbnRSZWN0KGxhcmdlckNvcm5lcikpOwotICAgIH0KKyAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qg
b3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3Vu
ZFRvSW50KG92ZXJmbG93UmVjdC5tYXhYKCkgLSBvdmVyZmxvd1JlY3QueCgpKTsKIH0KIAotYm9v
bCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChJbnRQb2ludCBsb2NhbFBvaW50
KSBjb25zdAoraW50IFJlbmRlckxheWVyOjpzY3JvbGxIZWlnaHQoKSBjb25zdAogewotICAgIGlm
ICghY2FuUmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbEhlaWdodCgp
OwogCi0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMo
bG9jYWxQb2ludCk7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NF
UlQoYm94KTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93
UmVjdCgpKTsKKyAgICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgpIC0gb3Zl
cmZsb3dSZWN0LnkoKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQp
Cit2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogewotICAg
IGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAg
dXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsK
K30KIAotICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCku
c3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJl
c2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Citib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBh
bmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1f
dkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVj
dHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92
ZXJmbG93KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG1faEJhciAmJiBtX2hC
YXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9s
bGJhcnMoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1
cm4gbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29s
IFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgaWYgKCFjYW5SZXNpemUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6
ZXIuY29udGFpbnMobG9jYWxQb2ludCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29u
c3QgTGF5b3V0U2l6ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBw
YWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQ
YWludExheWVyRmxhZz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWlu
dFBvbGljeSwgRXZlbnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCkBAIC00MjI1
LDE3ICsyODc3LDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNl
dE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRP
dmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGlu
Z0luZm8gcGFpbnRpbmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBh
aW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRM
YXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJs
YXlTY3JvbGxiYXJzKTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0g
ZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25T
ZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0
LCBCb3JkZXJSYWRpdXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAt
NDI1OCw3ICsyODk5LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xpcFRvUmVjdChHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJgogICAgICAgICAvLyBhbnkg
bGF5ZXJzIHdpdGggb3ZlcmZsb3cuIFRoZSBjb25kaXRpb24gZm9yIGJlaW5nIGFibGUgdG8gYXBw
bHkgdGhlc2UgY2xpcHMgaXMgdGhhdCB0aGUgb3ZlcmZsb3cgb2JqZWN0IGJlIGluIG91cgogICAg
ICAgICAvLyBjb250YWluaW5nIGJsb2NrIGNoYWluIHNvIHdlIGNoZWNrIHRoYXQgYWxzby4KICAg
ICAgICAgZm9yIChSZW5kZXJMYXllciogbGF5ZXIgPSBydWxlID09IEluY2x1ZGVTZWxmRm9yQm9y
ZGVyUmFkaXVzID8gdGhpcyA6IHBhcmVudCgpOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+cGFyZW50
KCkpIHsKLSAgICAgICAgICAgIGlmIChwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZp
b3I6OkNvbXBvc2l0ZWRPdmVyZmxvd1Njcm9sbENvbnRlbnQpICYmIGxheWVyLT51c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZyA9IGxheWVyLT51c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworICAgICAgICAgICAgaWYgKHBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Q29tcG9zaXRlZE92ZXJmbG93U2Ny
b2xsQ29udGVudCkgJiYgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGxheWVyLT5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpICYmIGxheWVyLT5yZW5kZXJlcigpLnN0eWxlKCkuaGFzQm9yZGVyUmFkaXVz
KCkgJiYgYW5jZXN0b3JMYXllcklzSW5Db250YWluaW5nQmxvY2tDaGFpbigqbGF5ZXIpKSB7CkBA
IC00NzYxLDggKzM0MDMsMTAgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGkKICAgICAgICAgICAg
IHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQ
YWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
aXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhhc1Njcm9sbGJhcnMoKSkKLSAgICAgICAg
ICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3Vy
cmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYg
bV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygpKQorICAgICAgICAgICAgICAgIHBhaW50
T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRl
eHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWx0ZXJD
b250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdlIGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRz
KCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMgcmVzZXQgdG8gcmVwcmVzZW50IHRoZSBm
aWx0ZXIgYm91bmRzLgpAQCAtNTIzMiwxMSArMzg3NiwxMyBAQCB2b2lkIFJlbmRlckxheWVyOjpw
YWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBs
YXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBsb2NhbFBhaW50aW5nSW5mbykKIHsK
KyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZy
YWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAgICAgaWYgKGZyYWdtZW50LmJhY2tncm91
bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjbGlwVG9S
ZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7IH0sIGZyYWdtZW50LmJhY2tncm91bmRS
ZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQ
b2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5k
ZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxvd0NvbnRyb2xzKGNvbnRleHQsIHJv
dW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVyQm91bmRzLmxvY2F0aW9u
KCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0luZm8uc3VicGl4ZWxPZmZz
ZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmJhY2tncm91bmRSZWN0
LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3JlQ2xpcChjb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QpOwogICAgIH0KQEAgLTUyNzUsNyArMzky
MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAgICAgICAgICAgICAgICBhYnNvbHV0ZUxh
eW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAgICAgICAgICAgICBoaXRUZXN0
QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJlY3QpOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5m
cmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0KHJlbmRlcmVyKCkudmlldygp
LmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9T
RG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAogICAgIFJlbmRlckxheWVyKiBpbnNpZGVM
YXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRl
c3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsKQEAgLTU1MDYsNyArNDE1Miw3IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFJlbmRlckxheWVyKiByb290TGF5
ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9mZnNldEZyb21BbmNlc3Rvcihyb290TGF5
ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9pbnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgp
ICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2Nh
dGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2FuUmVzaXplKCkgJiYgbV9zY3JvbGxhYmxl
QXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGxheWVy
RnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9pbnQpKSB7CiAgICAgICAgIHJlbmRl
cmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2FsUG9pbnQpOwogICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTgxLDM1ICs0MjI3LDYgQEAgYm9vbCBSZW5kZXJMYXll
cjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXll
ckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRz
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBv
aW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFw
cGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3Qo
KSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgYXV0
byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0JiBmcmFnbWVudEJvdW5k
cywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKLSAgICAgICAgaWYgKHNob3VsZFBsYWNl
QmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1heFlDb3JuZXIoKSAtIHJl
c2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7
IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tTGVmdCAt
IEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNpemVyUmVjdC5zaXplKCkg
fTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9mZnNldEZyb21Cb3R0b21SaWdodCA9IGJv
cmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVy
KCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3VuZHMubWF4WE1heFlDb3Ju
ZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0LnNpemUoKSwgcmVzaXpl
clJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSBsYXllckZyYWdtZW50
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBMYXllckZyYWdtZW50
JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOwotICAgICAgICBhdXRvIHJlc2l6ZXJS
ZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdt
ZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7Ci0gICAgICAgIGlmIChmcmFnbWVudC5i
YWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikgJiYgcmVzaXplclJlY3RJ
bkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAg
ICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9u
LnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RUcmFuc2Zvcm1lZExheWVySW5GcmFn
bWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVy
LCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAog
ICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24m
IGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zv
cm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAtNjA3MSw3ICs0Njg4LDggQEAgdm9pZCBS
ZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpCiAgICAgICAgIHJldHVybjsK
IAogICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwotICAg
IHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmVjdC5tb3ZlQnkoLW1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9u
KCkpOwogICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpICYmICF1c2VzQ29tcG9z
aXRlZFNjcm9sbGluZygpKQogICAgICAgICByZWN0LmludGVyc2VjdChkb3duY2FzdDxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3QoTGF5b3V0UG9pbnQoKSwgbnVsbHB0cikp
OyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVkIGZvci4KICAgICBpZiAocmVuZGVyZXIo
KS5oYXNDbGlwKCkpCkBAIC02MzY5LDIxICs0OTg3LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFz
Q29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVybiBtX2JhY2tpbmcgJiYgbV9iYWNraW5n
LT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVy
Rm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/
IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOwotfQot
Ci1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0
aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXllciogUmVuZGVyTGF5
ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9iYWNraW5n
ID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKLX0KLQogYm9v
bCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9ybShPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBib29sIHBhaW50c1RvV2luZG93ID0gIWlz
Q29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRzSW50b1dpbmRvdygpOwpAQCAtNjQxNCwx
MSArNTAxNyw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNob3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9u
U2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIE9wCiAgICAgcmV0dXJuIHBhaW50Rmxh
Z3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBo
YXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3Vu
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNPdmVyZmxvdygpIHx8IHVzZXNDb21wb3Np
dGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6OmJhY2tncm91bmRJc0tub3du
VG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAg
ICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYgIWhhc1NlbGZQYWludGluZ0xheWVyRGVz
Y2VuZGFudCgpKQpAQCAtNjY1OSw3ICs1MjU3LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWhhc1Zpc2libGVDb250ZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBoYXNWaXNpYmxlQm94RGVjb3Jh
dGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCk7CisgICAgcmV0dXJu
IGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dyb3VuZCgpIHx8IChtX3Njcm9sbGFibGVB
cmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSk7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3Qq
IHJlcXVlc3QpIGNvbnN0CkBAIC02NjY5LDcgKzUyNjcsNyBAQCBib29sIFJlbmRlckxheWVyOjpp
c1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAog
ICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSB8fCAhcmVuZGVyZXIoKS5zdHlsZSgpLm9wYWNp
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5k
ZXJSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChyZW5kZXJl
cigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFi
bGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpKSB7CiAgICAgICAgIGlmICghcmVxdWVzdCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02Njk0LDM4ICs1MjkyLDYgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVx
dWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1wdHlDaGlsZFJlbmRlcmVycygqcmVxdWVz
dCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hh
bmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICAvLyBPdmVyZmxvdyBhcmUg
YSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlm
ICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUg
dGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0g
ICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxv
d1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7
Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNB
ZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3
YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0g
Ym94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSAmJiBz
dHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Ny
b2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250
YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhh
c092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmlu
ZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8
IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikp
OwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsK
LQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFy
ZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgotICAgIC8vIFdoZW4gc3dpdGNo
aW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcg
MTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9s
ZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92
ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQo
dHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xk
U3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3Zl
cmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0
cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgIHVwZGF0
ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6
c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25seShzaG91bGRCZU5vcm1hbEZsb3dPbmx5
KCkpOwpAQCAtNjc0Niw2ICs1MzEyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2Vk
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICNlbmRp
ZgogICAgIH0KIAorICAgIHVwZGF0ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAgIC8vIEZJ
WE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMgdmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91
Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhpcyBsb2dpYyBjb3VsZAogICAgIC8vIGxp
a2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVzdC4KICAgICBpZiAob2xkU3R5bGUpIHsK
QEAgLTY3NTcsMTggKzUzMjUsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICAgICAg
fQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5wdXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQpCi0gICAgICAgICAgICBj
b21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworICAgICAgICBpZiAodmlz
aWJpbGl0eUNoYW5nZWQgJiYgbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7CiAgICAg
fQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFycXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5
bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVy
ZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9tYXJxdWVlKQotICAgICAgICAgICAgbV9t
YXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVlPih0aGlzKTsKLSAgICAgICAgbV9tYXJx
dWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9IGVsc2UgaWYgKG1fbWFycXVlZSkKLSAg
ICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKLQotICAgIHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0
eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAg
ICBtX3Njcm9sbGFibGVBcmVhLT5jcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxl
KTsKKyAgICB9CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIg
c2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8gdG8gcmVjb21wdXRlIHRoZSBiaXQgb25j
ZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgogICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7CkBAIC02NzgzLDEzICs1MzQ3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFu
Z2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUKICAg
ICB9CiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3Rv
bSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2UgdmVyc2EpLgotICAgIGlmIChtX2hCYXIp
Ci0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAg
ICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAKLSAgICB1cGRhdGVTY3JvbGxDb3JuZXJT
dHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVk
U3R5bGUoKTsKIAogICAgIHVwZGF0ZURlc2NlbmRhbnREZXBlbmRlbnRGbGFncygpOwogICAgIHVw
ZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjgxMCw5OCArNTM2OSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9s
ZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFy
ZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJl
bmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgYm9vbCBpc1Zpc2libGVUb0hpdFRl
c3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLSAgICBpZiAoSFRNTEZyYW1l
T3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxlbWVudCgpKQot
ICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkgJiYgb3duZXIt
PnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKLQotICAgIGJvb2wgaXNTY3JvbGxh
YmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OwotICAgIGJvb2wgYWRkZWRP
clJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotICAgIAot
ICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAgaWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Ny
b2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9s
bGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZh
bHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGlmIChhZGRl
ZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3JvbGxhYmxlICYmICFjYW5Vc2VDb21wb3Np
dGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2NlbGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxp
bmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAgLy8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBv
dXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5lci4KLSAgICAgICAgICAgIHVucmVnaXN0
ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgICAgICB9Ci0gICAgfQot
I2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRPclJlbW92ZWQpOwotI2VuZGlmCi19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCkKLXsKLSAgICBSZW5k
ZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVy
KCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFj
dHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJh
ckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKLQotICAgIGlm
ICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xs
Q29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5k
b2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVy
ZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0
aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFN0
eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpjbGVhclNjcm9s
bENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENvcm5lcikKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7Ci0gICAgbV9zY3JvbGxDb3Ju
ZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZXNpemVyU3R5bGUo
KQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3Jv
bGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIoKS5oYXNPdmVy
Zmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNl
dWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0K
LSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xlYXJSZXNpemVyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXplcikgewotICAgICAgICBtX3Jlc2l6ZXIg
PSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlcigpLmRvY3VtZW50
KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hv
dWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJl
bnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOwot
ICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIp
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXNpemVyKCkKLXsKLSAgICBpZiAoIW1f
cmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcmVzaXplci0+c2V0UGFyZW50KG51bGxw
dHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9yZWZsZWN0aW9u
ID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0cjsKQEAgLTY5ODMsNiArNTQ1MCwyNiBA
QCB2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyRmlsdGVycygpCiAgICAgbV9maWx0ZXJzID0g
bnVsbHB0cjsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGJvb2wgaGFkU2Nyb2xsYWJsZUFyZWEg
PSBzY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghbV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYSA9IG1ha2VVbmlxdWU8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4o
KnRoaXMpOworCisgICAgaWYgKCFoYWRTY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+c3RvcmVTY3JvbGxQb3NpdGlvbigpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLmdldCgpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyU2Nyb2xsYWJsZUFy
ZWEoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAgICAgIG1fc2Nyb2xsYWJs
ZUFyZWEtPmNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNs
ZWFyUmVzaXplcigpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhID0gbnVsbHB0cjsKKyAgICB9
Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlcnNBZnRlclN0eWxlQ2hhbmdlKCkK
IHsKICAgICBpZiAoIWhhc0ZpbHRlcigpKSB7CkBAIC02OTk5LDYgKzU0ODYsMTYgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5bGVDaGFuZ2UoKQogICAgICAgICBtX2Zp
bHRlcnMtPnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVudHMoKTsKIH0KIAordm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpCit7CisgICAgaWYgKCFpczxSZW5kZXJC
b3g+KHJlbmRlcmVyKCkpIHx8ICFkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLnJlcXVp
cmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICBjbGVhckxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRp
bmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0
byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUgbW9kZSwKQEAgLTcwMzMsNyArNTUzMCw3
IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRl
ckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFyZW50ID0gbGF5ZXIucGFyZW50KCkpCiAg
ICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJM
YXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
KTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFuc3BhcmVudFJlc3BlY3RpbmdQYXJlbnRG
cmFtZXMoKSBjb25zdApAQCAtNzA1NSw2ICs1NTUyLDExIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNp
bXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xlUGFpbnRGcmVxdWVuY3lUcmFja2luZyB7
IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCkubGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVz
dGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjpz
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0
KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVh
c29uIHJlYXNvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXgg
ZjI4Y2I0MTQ3MjdlZmM2ODI5YTY1YTk0YzVmZWJhN2E0NTZlMWU5OS4uOTBiOTgyNWQ1YmY5YzY2
OTY3Njc1ZTIzNzQ1NzAzYWE0Y2UwNTc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5
LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMp
IDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtNTEsNyAr
NTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclB0ci5oIgog
I2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIK
ICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAgY2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7
CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7
CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNzIFJlbmRlclJlcGxpY2E7CiBjbGFzcyBS
ZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsxNDQsMjEgQEAgc3RydWN0IFNjcm9sbFJl
Y3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9sbGluZ1Njb3BlID0gdWludDY0X3Q7CiAK
IERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKLWNs
YXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKK2NsYXNzIFJl
bmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbmRlckxheWVyPiB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoUmVuZGVyTGF5ZXIpOwog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyQmFja2lu
ZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOworICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogCiAgICAgZXhwbGljaXQgUmVuZGVyTGF5
ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAgIHZpcnR1YWwgflJlbmRlckxheWVyKCk7
CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBzY3JvbGxh
YmxlQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFu
eSkgaGFzIGJlZW4gbnVsbGVkIG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAt
MjIzLDYgKzIyOCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxs
b3dlZChib29sIGZsYWcpIHsgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAj
ZW5kaWYKIAorcHJvdGVjdGVkOgorICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2YXRlOgogICAg
IC8vIFRoZXNlIGZsYWdzIHByb3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4K
ICAgICBlbnVtIGNsYXNzIENvbXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0MTksNiBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKiBvbGRTdHlsZSk7CiAKLSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJxdWVlLmdldCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fu
bm90QmxpdFRvV2luZG93KCkgY29uc3Q7CkBAIC00MzMsMTA3ICs0MzksMjkgQEAgcHVibGljOgog
CiAgICAgTGF5b3V0UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlv
bigpLCBzaXplKCkpOyB9CiAKLSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSB2aXNp
YmxlU2l6ZSgpIGNvbnN0OwogCiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50
IHNjcm9sbEhlaWdodCgpIGNvbnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29u
c3QgSW50UG9pbnQmKTsKLQotICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhh
dCBjYW4gc2Nyb2xsIHRoZWlyIG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVs
eShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBu
dWxscHRyKTsKLQotICAgIGJvb2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0g
U2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aEFu
aW1hdGlvbihjb25zdCBTY3JvbGxPZmZzZXQmLCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6UHJv
Z3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKTsKLQot
ICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1w
aW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRT
Y3JvbGw6Ok5vKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBTY3JvbGxUeXBl
LCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkLCBBbmltYXRlZFNjcm9s
bCA9IEFuaW1hdGVkU2Nyb2xsOjpObyk7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xh
bXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5pbWF0ZWRTY3JvbGw6Ok5vKTsKLQot
ICAgIC8vIFRoZXNlIGFyZSBvbmx5IHVzZWQgYnkgbWFycXVlZS4KLSAgICB2b2lkIHNjcm9sbFRv
WE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zm
c2V0KCkueSgpKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5j
bGFtcGVkKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxUeXBlOjpQcm9n
cmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQpOyB9Ci0KLSAgICB2b2lkIHNldFBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOwotICAgIHZv
aWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwotCiAgICAgLy8gUmV0
dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIgdGhhdCBpcyBzY3JvbGxhYmxlLgogICAg
IC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJlbmRlclZpZXcncyBsYXllciB3aGVuIGNh
bGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCiAg
ICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAKLSAgICB2b2lkIGF2YWlsYWJsZUNvbnRl
bnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKLQogICAgIC8v
ICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1bWVudCBjb29yZGluYXRlcy4KICAgICB2
b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBi
b29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwotCi0g
ICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNh
bE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwotCi0gICAg
UmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLSAg
ICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOwotCi0gICAgYm9v
bCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9s
bGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJu
IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJhckhp
ZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFySGlk
ZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAgLy8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJp
ZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxi
YXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgp
OyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3Qg
ZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+KSBmaW5h
bDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKLSAgICBi
b29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKLSAgICBi
b29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JP
TExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQot
ICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb247IH0KLSAgICB2b2lk
IHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVj
b25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBib29sIGhhbmRsZVRvdWNoRXZl
bnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmluYWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2
b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5h
bDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOwotI2VuZGlmCi0KICAgICAvLyBS
ZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQg
ZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVy
Zmxvdy4KICAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKICAgICAv
LyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93
IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCi0gICAgYm9vbCBoYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93OyB9CisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJm
bG93KCkgY29uc3Q7CiAKLSAgICBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsK
LSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJl
bGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBib29sIGhh
c092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CiAKLSAgICBib29sIGhhc092ZXJmbG93Q29udHJv
bHMoKSBjb25zdDsKICAgICBib29sIGlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9j
YWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUgb2Zmc2V0
RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29u
dHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwotICAgIHZv
aWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7Ci0KICAgICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9B
ZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwogICAgIHZvaWQgYXV0b3Njcm9sbChj
b25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBjYW5SZXNpemUoKSBjb25zdDsKQEAgLTU1Niw5
ICs0ODQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU3R5
bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9v
bCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRGdWxsUmVwYWludCk7CiAKLSAgICB2b2lk
IHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOwotICAgIHZvaWQgdXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Ci0KICAgICBib29sIGhhc0Nv
bXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlvbkNoYWluKCkgY29uc3Q7CiAgICAgZW51
bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5
ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExheWVycyB9OwogICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgbW9kZSkg
Y29uc3QKQEAgLTYzOCw2ICs1NjMsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xv
c2luZ0FuY2VzdG9yRm9yUG9zaXRpb24oUG9zaXRpb25UeXBlKSBjb25zdDsKICAgICAKICAgICBS
ZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09yZGVyKCkgY29uc3Q7
CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzKSBjb25zdDsKKyAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhbWVSZW5k
ZXJMYXllcigpIGNvbnN0OwogCiAgICAgLy8gVGhlIGxheWVyIHJlbGF0aXZlIHRvIHdoaWNoIGNs
aXBwaW5nIHJlY3RzIGZvciB0aGlzIGxheWVyIGFyZSBjb21wdXRlZC4KICAgICBSZW5kZXJMYXll
ciogY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKSBjb25zdDsKQEAgLTY5OSw3ICs2MjYsNiBAQCBw
dWJsaWM6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIs
IE9wdGlvblNldDxQYWludExheWVyRmxhZz4gPSB7IH0sIFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xp
Y3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpBbnlPcmlnaW4sIEV2ZW50UmVnaW9uQ29u
dGV4dCogPSBudWxscHRyKTsKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVzdFJlc3VsdCYpOwotICAgIHZvaWQgcGFp
bnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBk
YW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJl
ZVBhaW50Um9vdCA9IG51bGxwdHIpOwogCiAgICAgc3RydWN0IENsaXBSZWN0c0NvbnRleHQgewog
ICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJlbmRlckxheWVyKiBpblJvb3RMYXllciwg
Q2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xs
YmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xpcCBpblJlc3BlY3RPdmVyZmxvd0NsaXAg
PSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNzg1LDExICs3MTEsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3Rh
dGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U3RhdGljQmxvY2tQ
b3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljQmxvY2tQb3NpdGlvbiA9IHBv
c2l0aW9uOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmc7IH0KLSAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZzsgfQot
I2VuZGlmCi0KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVy
KCkuaGFzVHJhbnNmb3JtKCk7IH0KICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFz
IHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGJha2VkIGluLgogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
KiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3RyYW5zZm9ybS5nZXQoKTsgfQpAQCAtODU5
LDE2ICs3ODAsMTEgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyQmFja2luZyogZW5zdXJlQmFj
a2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJvb2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9
IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJh
cigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclNjcm9sbENv
cm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7
Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAgICAgdm9pZCBzZXRIYXND
b21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5j
ZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgPSBoYXNDb21wb3NpdGVk
U2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAorICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSBjb25zdDsKKwogICAgIC8vIExheWVycyB3aXRoIHRoZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFy
ZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3RvciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5
bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9sbGluZ1Njb3BlPiBib3hTY3JvbGxpbmdT
Y29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xsaW5nU2NvcGU7IH0KICAgICBPcHRpb25h
bDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQpAQCAtODg2LDExICs4MDIsNiBAQCBwdWJsaWM6
CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4gaW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAg
ICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29u
c3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRD
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9j
b250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0eVNjcm9sbGJhcnM7IH0KLQogICAg
IGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsKICAgICBib29sIHJlcXVpcmVzRnVsbExh
eWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAgLTkxOSw4ICs4MzAsNiBAQCBwdWJsaWM6
CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmNlc3RvcigpIGNv
bnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0
aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2ltdWxh
dGVGcmVxdWVudFBhaW50KCk7CiAgICAgYm9vbCBwYWludGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7
IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5wYWludGluZ0ZyZXF1ZW50bHkoKTsgfQog
CkBAIC05MzEsNyArODQwLDcgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRXZlbnRSZWdpb25J
bnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGluZ0RpZENoYW5nZSwgU3R5bGUsIE5vbkNv
bXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxpZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVn
aW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkg
Y29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVzY3JpcHRpb24oKSBjb25zdDsKIAogcHJp
dmF0ZToKIApAQCAtMTAxMSw5ICs5MjAsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVT
ZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVtIFVwZGF0ZUxheWVyUG9zaXRpb25zRmxh
ZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAw
LAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNraW5nICAgICAgICAgICA9IDEgPDwgMSwK
QEAgLTEwMzksOCArOTQ1LDYgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgdXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCosIE9wdGlvblNldDxVcGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gPSB7IH0pOwogCi0gICAgU2Nyb2xsT2Zm
c2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNvbnN0OwotCiAgICAg
UmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25MYXllckluU3VidHJlZShjb25zdCBSZW5k
ZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSkgY29uc3Q7CiAKICAg
ICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRl
ckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0
aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDU0LDYgKzk1OCw5IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllckZpbHRlcnMoKTsKICAgICB2b2lkIGNsZWFyTGF5ZXJGaWx0ZXJz
KCk7CiAKKyAgICB2b2lkIHVwZGF0ZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICB2b2lkIGNs
ZWFyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworCiAgICAgUmVuZGVyTGF5ZXJGaWx0ZXJzKiBmaWx0
ZXJzRm9yUGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0JiwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFn
PikgY29uc3Q7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzZXR1cEZpbHRlcnMoR3JhcGhpY3NDb250
ZXh0JiBkZXN0aW5hdGlvbkNvbnRleHQsIExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBh
aW50TGF5ZXJGbGFnPiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3QpOwogICAgIHZv
aWQgYXBwbHlGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgb3JpZ2luYWxDb250ZXh0LCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgY29uc3QgTGF5ZXJG
cmFnbWVudHMmKTsKQEAgLTExMDAsNjQgKzEwMDcsMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICBi
b29sIGhpdFRlc3RDb250ZW50cyhjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBMYXlvdXRSZWN0JiBsYXllckJvdW5kcywgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
SGl0VGVzdEZpbHRlcikgY29uc3Q7CiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHNGb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyLCBib29sJiBpbnNp
ZGVDbGlwUmVjdCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQm
IHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CiAgICAgUmVuZGVyTGF5ZXIqIGhpdFRlc3RUcmFuc2Zv
cm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVuZGVyTGF5ZXIq
IGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLAog
ICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiA9IG51bGxwdHIsIGRvdWJsZSog
ek9mZnNldCA9IG51bGxwdHIpOwogCiAgICAgYm9vbCBsaXN0QmFja2dyb3VuZElzS25vd25Ub0Jl
T3BhcXVlSW5SZWN0KGNvbnN0IExheWVyTGlzdCYsIGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsK
IAotICAgIHZvaWQgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKLSAgICB2b2lkIGNvbXB1dGVI
YXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Ci0KLSAgICBib29sIGhhc0hvcml6b250
YWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzVmVydGljYWxPdmVyZmxvdygpIGNvbnN0
OwotCi0gICAgYm9vbCBzaG93c092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKLQogICAgIGJvb2wg
c2hvdWxkQmVTZWxmUGFpbnRpbmdMYXllcigpIGNvbnN0OwogCi0gICAgLy8gU2Nyb2xsYWJsZUFy
ZWEgaW50ZXJmYWNlCi0gICAgYm9vbCBpc1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGZpbmFsOwotICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJl
Y3QoY29uc3QgSW50UmVjdCYpIGZpbmFsOwotICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5h
bDsKLSAgICBib29sIGlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOwotICAgIElu
dFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmlu
YWw7Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgSW50UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYs
IGNvbnN0IEludFBvaW50JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQo
Y29uc3QgU2Nyb2xsT2Zmc2V0JikgZmluYWw7Ci0gICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGlu
Z05vZGVJRCgpIGNvbnN0IGZpbmFsOwotCi0gICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJ
bnRlcm5hbChWaXNpYmxlQ29udGVudFJlY3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250
ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50
KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmll
dygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBm
aW5hbDsKLSAgICBib29sIHNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmlu
YWw7Ci0gICAgSW50UmVjdCBzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRl
Rml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzVXNlclNjcm9sbEluUHJv
Z3Jlc3MoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBj
b25zdCBmaW5hbDsKLSAgICBib29sIGZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZv
clBlcmZvcm1hbmNlVGVzdGluZygpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCi0gICAgYm9vbCBpc1Njcm9sbFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0j
ZW5kaWYKLSAgICBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIGxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3Qg
ZmluYWw7Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB2b2lkIHJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlmCi0KLSAgICAvLyBOT1RF
OiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KLSAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJik7Ci0gICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xs
KCk7Ci0KLSAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25z
dDsKLSAgICAKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZs
b3cpOwotICAgIAogICAgIGJvb2wgYWxsb3dzQ3VycmVudFNjcm9sbCgpIGNvbnN0OwogCiAgICAg
dm9pZCBkaXJ0eUFuY2VzdG9yQ2hhaW5WaXNpYmxlRGVzY2VuZGFudFN0YXR1cygpOwpAQCAtMTE5
NywxNCArMTA1Myw2IEBAIHByaXZhdGU6CiAgICAgLy8gQ29udmVydCBhIHBvaW50IGluIGFic29s
dXRlIGNvb3JkcyBpbnRvIGxheWVyIGNvb3JkcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2Nv
dW50CiAgICAgTGF5b3V0UG9pbnQgYWJzb2x1dGVUb0NvbnRlbnRzKGNvbnN0IExheW91dFBvaW50
JikgY29uc3Q7CiAKLSAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRT
aXplJik7Ci0gICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHZvaWQgY2xl
YXJTY3JvbGxDb3JuZXIoKTsKLSAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOwotICAgIHZv
aWQgY2xlYXJSZXNpemVyKCk7Ci0KLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVjdCk7Ci0K
ICAgICB2b2lkIHVwZGF0ZVBhZ2luYXRpb24oKTsKIAogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRp
bmdEZXNjZW5kYW50KGJvb2wgYikgIHsgbV9oYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQgPSBiOyB9
CkBAIC0xMjEzLDExICsxMDYxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEluZGlyZWN0Q29t
cG9zaXRpbmdSZWFzb24oSW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiByZWFzb24pIHsgbV9pbmRp
cmVjdENvbXBvc2l0aW5nUmVhc29uID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlYXNvbik7IH0K
ICAgICBib29sIG11c3RDb21wb3NpdGVGb3JJbmRpcmVjdFJlYXNvbnMoKSBjb25zdCB7IHJldHVy
biBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb247IH0KIAotICAgIExheW91dFVuaXQgb3ZlcmZs
b3dUb3AoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29uc3Q7Ci0g
ICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJm
bG93UmlnaHQoKSBjb25zdDsKLQogICAgIHN0cnVjdCBPdmVyZmxvd0NvbnRyb2xSZWN0cyB7CiAg
ICAgICAgIEludFJlY3QgaG9yaXpvbnRhbFNjcm9sbGJhcjsKICAgICAgICAgSW50UmVjdCB2ZXJ0
aWNhbFNjcm9sbGJhcjsKQEAgLTEyMzAsOCArMTA3Myw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAg
ICBPdmVyZmxvd0NvbnRyb2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKIAot
ICAgIGJvb2wgb3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9j
YWxSZWN0KSBjb25zdDsKLQogICAgIE9wdGlvblNldDxDb21wb3NpdGluZz4gbV9jb21wb3NpdGlu
Z0RpcnR5Qml0czsKIAogICAgIGNvbnN0IGJvb2wgbV9pc1JlbmRlclZpZXdMYXllciA6IDE7CkBA
IC0xMjQ4LDcgKzEwODksNiBAQCBwcml2YXRlOgogICAgIC8vIEtlZXBzIHRyYWNrIG9mIHdoZXRo
ZXIgdGhlIGxheWVyIGlzIGN1cnJlbnRseSByZXNpemluZywgc28gZXZlbnRzIGNhbiBjYXVzZSBy
ZXNpemluZyB0byBzdGFydCBhbmQgc3RvcC4KICAgICBib29sIG1faW5SZXNpemVNb2RlIDogMTsK
IAotICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOwogICAgIGJvb2wgbV9pc1Nl
bGZQYWludGluZ0xheWVyIDogMTsKIAogICAgIC8vIElmIGhhdmUgbm8gc2VsZi1wYWludGluZyBk
ZXNjZW5kYW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3YWxrIG91ciBjaGlsZHJlbiBkdXJpbmcgcGFp
bnRpbmcuIFRoaXMgY2FuIGxlYWQgdG8KQEAgLTEyNjAsMTQgKzExMDAsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGVuZGVkIHVwIHBhaW50aW5n
IHRoaXMgbGF5ZXIgb3IgYW55IGRlc2NlbmRhbnRzIChhbmQgdGhlcmVmb3JlIG5lZWQgdG8KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJsZW5kKS4KICAgICBib29sIG1fcGFp
bnRpbmdJbnNpZGVSZWZsZWN0aW9uIDogMTsgIC8vIEEgc3RhdGUgYml0IHRyYWNraW5nIGlmIHdl
IGFyZSBwYWludGluZyBpbnNpZGUgYSByZXBsaWNhLgotICAgIGJvb2wgbV9pbk92ZXJmbG93UmVs
YXlvdXQgOiAxOwogICAgIHVuc2lnbmVkIG1fcmVwYWludFN0YXR1cyA6IDI7IC8vIFJlcGFpbnRT
dGF0dXMKIAogICAgIGJvb2wgbV92aXNpYmxlQ29udGVudFN0YXR1c0RpcnR5IDogMTsKICAgICBi
b29sIG1faGFzVmlzaWJsZUNvbnRlbnQgOiAxOwogICAgIGJvb2wgbV92aXNpYmxlRGVzY2VuZGFu
dFN0YXR1c0RpcnR5IDogMTsKICAgICBib29sIG1faGFzVmlzaWJsZURlc2NlbmRhbnQgOiAxOwot
ICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgOiAxOwogICAgIGJvb2wgbV9pc0Zp
eGVkSW50ZXJzZWN0aW5nVmlld3BvcnQgOiAxOwogICAgIGJvb2wgbV9iZWhhdmVzQXNGaXhlZCA6
IDE7CiAKQEAgLTEyNzgsNyArMTExNiw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faGFzQ29t
cG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzIDogMTsKICAgICBib29sIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGluZ0FuY2VzdG9yIDogMTsgLy8gSW4gdGhlIGxheWVyLW9yZGVyIHRyZWUuCi0g
ICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgOiAxOwogCiAgICAgYm9v
bCBtX2hhc1RyYW5zZm9ybWVkQW5jZXN0b3IgOiAxOwogICAgIGJvb2wgbV9oYXMzRFRyYW5zZm9y
bWVkQW5jZXN0b3IgOiAxOwpAQCAtMTI4OCwxNyArMTEyNSw2IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIDogNDsgLy8gSW5kaXJlY3RDb21wb3Np
dGluZ1JlYXNvbgogICAgIHVuc2lnbmVkIG1fdmlld3BvcnRDb25zdHJhaW5lZE5vdENvbXBvc2l0
ZWRSZWFzb24gOiAyOyAvLyBWaWV3cG9ydENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbgog
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBib29sIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nIDog
MTsKLSNlbmRpZgotICAgIGJvb2wgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgOiAx
OwotI2VuZGlmCi0KLSAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0
aW9uIDogMTsKLSAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsK
LSAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOwotCiAjaWYgQVNTRVJUX0VO
QUJMRUQKICAgICBib29sIG1fbGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkIDogMTsKICNlbmRpZgpA
QCAtMTMzOSwyNSArMTE2NSwxMSBAQCBwcml2YXRlOgogICAgIC8vIFRoZSBsYXllcidzIHdpZHRo
L2hlaWdodAogICAgIEludFNpemUgbV9sYXllclNpemU7CiAKLSAgICBTY3JvbGxQb3NpdGlvbiBt
X3Njcm9sbFBvc2l0aW9uOwotICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvbjsKLQotICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2Ygb3VyIHNjcm9s
bGVkIGFyZWEuCi0gICAgSW50U2l6ZSBtX3Njcm9sbFNpemU7Ci0KLSAgICAvLyBGb3IgbGF5ZXJz
IHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBwYWlyIG9mIHNjcm9sbGJhcnMuCi0gICAgUmVmUHRy
PFNjcm9sbGJhcj4gbV9oQmFyOwotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKLQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDbGlwUmVjdHNDYWNoZT4gbV9jbGlwUmVjdHNDYWNoZTsKLSAgICAK
LSAgICBJbnRQb2ludCBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQ7CiAKICAgICBNYXJr
YWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29w
ZSwgMD4+IG1fYm94U2Nyb2xsaW5nU2NvcGU7CiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUs
IEludGVncmFsTWFya2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2NvbnRlbnRzU2Ny
b2xsaW5nU2NvcGU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTWFycXVlZT4gbV9tYXJx
dWVlOyAvLyBVc2VkIGZvciA8bWFycXVlZT4uCi0gICAgCiAgICAgLy8gQ2FjaGVkIG5vcm1hbCBm
bG93IHZhbHVlcyBmb3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cyB3aXRoIHN0YXRpYyBs
ZWZ0L3RvcCB2YWx1ZXMuCiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0lubGluZVBvc2l0aW9uOwog
ICAgIExheW91dFVuaXQgbV9zdGF0aWNCbG9ja1Bvc2l0aW9uOwpAQCAtMTM2NywxMCArMTE3OSw2
IEBAIHByaXZhdGU6CiAgICAgLy8gTWF5IHVsdGltYXRlbHkgYmUgZXh0ZW5kZWQgdG8gbWFueSBy
ZXBsaWNhcyAod2l0aCB0aGVpciBvd24gcGFpbnQgb3JkZXIpLgogICAgIFJlbmRlclB0cjxSZW5k
ZXJSZXBsaWNhPiBtX3JlZmxlY3Rpb247CiAKLSAgICAvLyBSZW5kZXJlcnMgdG8gaG9sZCBvdXIg
Y3VzdG9tIHNjcm9sbCBjb3JuZXIgYW5kIHJlc2l6ZXIuCi0gICAgUmVuZGVyUHRyPFJlbmRlclNj
cm9sbGJhclBhcnQ+IG1fc2Nyb2xsQ29ybmVyOwotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxi
YXJQYXJ0PiBtX3Jlc2l6ZXI7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBlbmNsb3NpbmcgUmVu
ZGVyTGF5ZXIgdGhhdCBjYXVzZWQgdXMgdG8gYmUgcGFnaW5hdGVkLiBJdCBpcyAwIGlmIHdlIGFy
ZSBub3QgcGFnaW5hdGVkLgogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+IG1fZW5jbG9zaW5nUGFn
aW5hdGlvbkxheWVyOwogCkBAIC0xMzc4LDYgKzExODYsNyBAQCBwcml2YXRlOgogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckxheWVyRmlsdGVycz4gbV9maWx0ZXJzOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJMYXllckJhY2tpbmc+IG1fYmFja2luZzsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4gbV9zY3JvbGxhYmxlQXJlYTsKICAgICAKICAg
ICBQYWludEZyZXF1ZW5jeVRyYWNrZXIgbV9wYWludEZyZXF1ZW5jeVRyYWNrZXI7CiB9OwpAQCAt
MTQ1MCw2ICsxMjU5LDMgQEAgdm9pZCBzaG93UGFpbnRPcmRlclRyZWUoY29uc3QgV2ViQ29yZTo6
UmVuZGVyTGF5ZXIqKTsKIHZvaWQgc2hvd0xheWVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJP
YmplY3QqKTsKICNlbmRpZgogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlJlbmRlckxheWVyKQotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTY3Jv
bGxhYmxlQXJlYSYgYXJlYSkgeyByZXR1cm4gYXJlYS5pc1JlbmRlckxheWVyKCk7IH0KLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMTFkOTRhMTFlOGNmZWQyNjdjODU1MTI4MjYyYmZl
NzIwZDNmMGMwNy4uOWRkMTYyNzg4MDBhMjI1NGU3MDU0ZGQ3Y2I4ZmFmOGMzZDNkMzhmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAg
LTU4LDggKzU4LDkgQEAKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVkZSAi
UmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJSZW5k
ZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDE4LDExICs0MTksMTMg
QEAgc3RhdGljIFRpbGVkQmFja2luZzo6VGlsZUNvdmVyYWdlIGNvbXB1dGVPdmVyZmxvd1RpbGVk
QmFja2luZ0NvdmVyYWdlKGNvbnN0IFJlbmQKICAgICBUaWxlZEJhY2tpbmc6OlRpbGVDb3ZlcmFn
ZSB0aWxlQ292ZXJhZ2UgPSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmlzaWJsZUFyZWE7CiAg
ICAgYm9vbCB1c2VNaW5pbWFsVGlsZXNEdXJpbmdMaXZlUmVzaXplID0gZnJhbWVWaWV3LmluTGl2
ZVJlc2l6ZSgpOwogICAgIGlmICghdXNlTWluaW1hbFRpbGVzRHVyaW5nTGl2ZVJlc2l6ZSkgewot
ICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAg
ICAgICAgICAgdGlsZUNvdmVyYWdlIHw9IFRpbGVkQmFja2luZzo6Q292ZXJhZ2VGb3JIb3Jpem9u
dGFsU2Nyb2xsaW5nOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+aGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHRpbGVDb3Zl
cmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9ySG9yaXpvbnRhbFNjcm9sbGluZzsKIAot
ICAgICAgICBpZiAobGF5ZXIuaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKLSAgICAg
ICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxlZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGljYWxT
Y3JvbGxpbmc7CisgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICAgICAgICAgIHRpbGVDb3ZlcmFnZSB8PSBUaWxl
ZEJhY2tpbmc6OkNvdmVyYWdlRm9yVmVydGljYWxTY3JvbGxpbmc7CisgICAgICAgIH0KICAgICB9
CiAgICAgcmV0dXJuIHRpbGVDb3ZlcmFnZTsKIH0KQEAgLTEyMjgsOSArMTIzMSwxMiBAQCBMYXlv
dXRSZWN0IFJlbmRlckxheWVyQmFja2luZzo6Y29tcHV0ZVBhcmVudEdyYXBoaWNzTGF5ZXJSZWN0
KGNvbnN0IFJlbmRlckxheWVyKgogICAgIH0KIAogICAgIGlmIChjb21wb3NpdGVkQW5jZXN0b3It
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkgeworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlQ29tcG9zaXRlZEFuY2VzdG9yID0gY29tcG9zaXRlZEFuY2VzdG9yLT5zY3JvbGxhYmxl
QXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJsZUNvbXBvc2l0ZWRBbmNlc3Rvcik7CisK
ICAgICAgICAgTGF5b3V0UmVjdCBhbmNlc3RvckNvbXBvc2l0ZWRCb3VuZHMgPSBhbmNlc3RvckJh
Y2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKTsKICAgICAgICAgTGF5b3V0UmVjdCBzY3JvbGxDb250
YWluZXJCb3ggPSBzY3JvbGxDb250YWluZXJMYXllckJveChhbmNlc3RvclJlbmRlckJveCk7Ci0g
ICAgICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBjb21wb3NpdGVkQW5jZXN0b3ItPnNj
cm9sbE9mZnNldCgpOworICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
YWJsZUNvbXBvc2l0ZWRBbmNlc3Rvci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHBhcmVudEdy
YXBoaWNzTGF5ZXJSZWN0ID0gTGF5b3V0UmVjdCgoc2Nyb2xsQ29udGFpbmVyQm94LmxvY2F0aW9u
KCkgLSB0b0xheW91dFNpemUoYW5jZXN0b3JDb21wb3NpdGVkQm91bmRzLmxvY2F0aW9uKCkpIC0g
dG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkpLCBzY3JvbGxDb250YWluZXJCb3guc2l6ZSgpKTsK
ICAgICB9CiAKQEAgLTEzNjcsNyArMTM3MywxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAg
ICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludChzY3Jv
bGxDb250YWluZXJCb3gubG9jYXRpb24oKSAtIHBhcmVudExheWVyQm91bmRzLmxvY2F0aW9uKCkp
KTsKICAgICAgICAgbV9zY3JvbGxDb250YWluZXJMYXllci0+c2V0U2l6ZShyb3VuZGVkSW50U2l6
ZShMYXlvdXRTaXplKHNjcm9sbENvbnRhaW5lckJveC53aWR0aCgpLCBzY3JvbGxDb250YWluZXJC
b3guaGVpZ2h0KCkpKSk7CiAKLSAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IG1f
b3duaW5nTGF5ZXIuc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXll
ciA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgQVNTRVJUKHNjcm9s
bGFibGVMYXllcik7CisKKyAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCk7CiAgICAgICAgIHVwZGF0ZVNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQpOwogCiAgICAgICAgIEZsb2F0U2l6ZSBvbGRTY3JvbGxpbmdMYXllck9mZnNl
dCA9IG1fc2Nyb2xsQ29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwpAQCAtMTM4
MSw3ICsxMzkwLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNv
bnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAKICAgICAgICAgYm9vbCBwYWRk
aW5nQm94T2Zmc2V0Q2hhbmdlZCA9IG9sZFNjcm9sbGluZ0xheWVyT2Zmc2V0ICE9IG1fc2Nyb2xs
Q29udGFpbmVyTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpOwogCi0gICAgICAgIEludFNpemUg
c2Nyb2xsU2l6ZShtX293bmluZ0xheWVyLnNjcm9sbFdpZHRoKCksIG1fb3duaW5nTGF5ZXIuc2Ny
b2xsSGVpZ2h0KCkpOworICAgICAgICBJbnRTaXplIHNjcm9sbFNpemU7CisgICAgICAgIGlmIChz
Y3JvbGxhYmxlTGF5ZXIpCisgICAgICAgICAgICBzY3JvbGxTaXplID0gSW50U2l6ZShzY3JvbGxh
YmxlTGF5ZXItPnNjcm9sbFdpZHRoKCksIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsSGVpZ2h0KCkp
OwogICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPSBtX3Njcm9sbGVkQ29udGVudHNMYXllci0+c2l6
ZSgpIHx8IHBhZGRpbmdCb3hPZmZzZXRDaGFuZ2VkKQogICAgICAgICAgICAgbV9zY3JvbGxlZENv
bnRlbnRzTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCkBAIC0xNDkwLDE0ICsxNTAxLDE3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhT
Y3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRh
dGVTY3JvbGxPZmZzZXQoU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCkKIHsKLSAgICBpZiAobV9v
d25pbmdMYXllci5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKKyAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7
CisgICAgQVNTRVJUKHNjcm9sbGFibGVMYXllcik7CisKKyAgICBpZiAoc2Nyb2xsYWJsZUxheWVy
LT5jdXJyZW50U2Nyb2xsVHlwZSgpID09IFNjcm9sbFR5cGU6OlVzZXIpIHsKICAgICAgICAgLy8g
SWYgc2Nyb2xsaW5nIGlzIGhhcHBlbmluZyBleHRlcm5hbGx5LCB3ZSBkb24ndCB3YW50IHRvIHRv
dWNoIHRoZSBsYXllciBib3VuZHMgb3JpZ2luIGhlcmUgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2Ug
aml0dGVyLgogICAgICAgICBzZXRMb2NhdGlvbk9mU2Nyb2xsZWRDb250ZW50cyhzY3JvbGxPZmZz
ZXQsIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb246OlN5bmMpOwotICAgICAgICBtX293bmlu
Z0xheWVyLnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbih0cnVlKTsKKyAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24odHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGltcGxl
bWVudCB0aGUgY29udGVudHMgb2Zmc2V0IHZpYSB0aGUgYm91bmRzIG9yaWdpbiBvbiB0aGlzIGxh
eWVyLCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uIG9uIHRoZSBzdWJsYXllci4KICAgICAgICAgc2V0
TG9jYXRpb25PZlNjcm9sbGVkQ29udGVudHMoc2Nyb2xsT2Zmc2V0LCBTY3JvbGxpbmdMYXllclBv
c2l0aW9uQWN0aW9uOjpTZXQpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldFJlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSk7CisgICAgICAgIHNjcm9sbGFibGVMYXll
ci0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKTsKICAgICB9
CiAKICAgICBBU1NFUlQobV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnBvc2l0aW9uKCkuaXNaZXJv
KCkpOwpAQCAtMTkwOSw3ICsxOTIzLDkgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0
ZUNsaXBwaW5nU3RhY2tMYXllckdlb21ldHJ5KExheWVyQW5jZXN0b3JDbGlwcGluZ1MKICAgICAg
ICAgZW50cnkuY2xpcHBpbmdMYXllci0+c2V0U2l6ZShzbmFwcGVkQ2xpcHBpbmdMYXllclJlY3Qu
c2l6ZSgpKTsKIAogICAgICAgICBpZiAoZW50cnkuY2xpcERhdGEuaXNPdmVyZmxvd1Njcm9sbCkg
ewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldCA9IGVudHJ5LmNsaXBEYXRh
LmNsaXBwaW5nTGF5ZXIgPyBlbnRyeS5jbGlwRGF0YS5jbGlwcGluZ0xheWVyLT5zY3JvbGxPZmZz
ZXQoKSA6IFNjcm9sbE9mZnNldCgpOworICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldDsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBlbnRyeS5jbGlw
RGF0YS5jbGlwcGluZ0xheWVyID8gZW50cnkuY2xpcERhdGEuY2xpcHBpbmdMYXllci0+c2Nyb2xs
YWJsZUFyZWEoKSA6IG51bGxwdHIpCisgICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKIAogICAgICAgICAgICAgZW50cnkuY2xpcHBp
bmdMYXllci0+c2V0Qm91bmRzT3JpZ2luKHNjcm9sbE9mZnNldCk7CiAgICAgICAgICAgICBsYXN0
Q2xpcExheWVyUmVjdC5tb3ZlQnkoLXNjcm9sbE9mZnNldCk7CkBAIC0yMDExLDEyICsyMDI3LDE2
IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKFNj
cm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVx
dWlyZXNIb3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXIoKSBjb25zdAogewotICAgIHJldHVybiByZXF1
aXJlc0xheWVyRm9yU2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9yaXpvbnRhbFNjcm9sbGJhcigp
KTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxh
YmxlQXJlYSgpKQorICAgICAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihzY3Jv
bGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXIoKSk7CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6cmVxdWlyZXNWZXJ0aWNhbFNjcm9sbGJhckxh
eWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9sbGJhcihtX293
bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCkpOworICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgIHJldHVybiBy
ZXF1aXJlc0xheWVyRm9yU2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxi
YXIoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlckxheWVyQmFja2luZzo6
cmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0CkBAIC0yMDI0LDEyICsyMDQ0LDE2IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpyZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29u
c3QKICAgICBpZiAoIWlzPFJlbmRlckJveD4obV9vd25pbmdMYXllci5yZW5kZXJlcigpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBjb3JuZXJSZWN0ID0gbV9vd25pbmdMYXll
ci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5zY3JvbGxDb3JuZXJPclJlc2l6ZXJSZWN0KCk7Cisg
ICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgp
OworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0
cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICBpZiAoY29ybmVyUmVjdC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gdmVydGljYWxTY3JvbGxi
YXIgPSBtX293bmluZ0xheWVyLnZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0gICAgYXV0byBzY3JvbGxi
YXIgPSB2ZXJ0aWNhbFNjcm9sbGJhciA/IHZlcnRpY2FsU2Nyb2xsYmFyIDogbV9vd25pbmdMYXll
ci5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJhciA9IHNj
cm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBhdXRvIHNjcm9sbGJhciA9
IHZlcnRpY2FsU2Nyb2xsYmFyID8gdmVydGljYWxTY3JvbGxiYXIgOiBzY3JvbGxhYmxlTGF5ZXIt
Pmhvcml6b250YWxTY3JvbGxiYXIoKTsKICAgICByZXR1cm4gcmVxdWlyZXNMYXllckZvclNjcm9s
bGJhcihzY3JvbGxiYXIpOwogfQogCkBAIC0yMDY1LDEwICsyMDg5LDEyIEBAIGJvb2wgUmVuZGVy
TGF5ZXJCYWNraW5nOjp1cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jp
em9udGFsU2Nyb2xsCiAgICAgbGF5ZXJzQ2hhbmdlZCB8PSBjcmVhdGVPckRlc3Ryb3lMYXllciht
X2xheWVyRm9yU2Nyb2xsQ29ybmVyLCBuZWVkc1Njcm9sbENvcm5lckxheWVyLCB0cnVlLCAic2Ny
b2xsIGNvcm5lciIpOwogCiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9v
d25pbmdMYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAo
aG9yaXpvbnRhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5n
TGF5ZXIsIEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgICAgICBpZiAodmVydGljYWxTY3JvbGxi
YXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xs
YWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNj
cm9sbGJhcik7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xh
eWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xs
YmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
Y3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlTGF5ZXIsIEhv
cml6b250YWxTY3JvbGxiYXIpOworICAgICAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5
ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxh
YmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlTGF5ZXIsIFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBsYXllcnNDaGFuZ2Vk
OwpAQCAtMjA3Niw3ICsyMTAyLDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZU92
ZXJmbG93Q29udHJvbHNMYXllcnMoYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGwKIAogdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiB7Ci0g
ICAgaWYgKCFtX293bmluZ0xheWVyLmhhc1Njcm9sbGJhcnMoKSkKKyAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgaWYgKCFzY3Jv
bGxhYmxlTGF5ZXIgfHwgIXNjcm9sbGFibGVMYXllci0+aGFzU2Nyb2xsYmFycygpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIGRvIGRldmljZS1waXhlbCBzbmFwcGlu
Zy4KQEAgLTIwOTgsMTYgKzIxMjUsMTUgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBvc2l0
aW9uT3ZlcmZsb3dDb250cm9sc0xheWVycygpCiAgICAgfTsKIAogICAgIC8vIFRoZXNlIHJlY3Rz
IGFyZSByZWxhdGl2ZSB0byB0aGUgYm9yZGVyQm94UmVjdC4KLSAgICBhdXRvIHJlY3RzID0gbV9v
d25pbmdMYXllci5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQorICAgIGF1dG8gcmVjdHMgPSBz
Y3JvbGxhYmxlTGF5ZXItPm92ZXJmbG93Q29udHJvbHNSZWN0cygpOwogICAgIGlmIChhdXRvKiBs
YXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7CiAgICAgICAgIHBvc2l0aW9u
U2Nyb2xsYmFyTGF5ZXIoKmxheWVyLCByZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLCBwYWRkaW5n
Qm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3duaW5nTGF5ZXIu
aG9yaXpvbnRhbFNjcm9sbGJhcigpICYmICFsYXllci0+dXNlc0NvbnRlbnRzTGF5ZXIoKSk7Cisg
ICAgICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQoc2Nyb2xsYWJsZUxheWVyLT5ob3Jpem9udGFs
U2Nyb2xsYmFyKCkgJiYgIWxheWVyLT51c2VzQ29udGVudHNMYXllcigpKTsKICAgICB9CiAKICAg
ICBpZiAoYXV0byogbGF5ZXIgPSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpIHsKICAgICAg
ICAgcG9zaXRpb25TY3JvbGxiYXJMYXllcigqbGF5ZXIsIHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFy
LCBwYWRkaW5nQm94SW5zZXQpOwotICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KG1fb3du
aW5nTGF5ZXIudmVydGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVy
KCkpOworICAgICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KHNjcm9sbGFibGVMYXllci0+dmVy
dGljYWxTY3JvbGxiYXIoKSAmJiAhbGF5ZXItPnVzZXNDb250ZW50c0xheWVyKCkpOwogICAgIH0K
IAogICAgIGlmIChhdXRvKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKQEAgLTMw
ODYsNyArMzExMiwxMCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVk
RGlzcGxheUluUmVjdChjb25zdCBMYXlvdXRSZWN0JiByLCBHcmFwaAogCiAgICAgaWYgKG1fc2Ny
b2xsZWRDb250ZW50c0xheWVyICYmIG1fc2Nyb2xsZWRDb250ZW50c0xheWVyLT5kcmF3c0NvbnRl
bnQoKSkgewogICAgICAgICBGbG9hdFJlY3QgbGF5ZXJEaXJ0eVJlY3QgPSBwaXhlbFNuYXBwZWRS
ZWN0Rm9yUGFpbnRpbmc7Ci0gICAgICAgIGxheWVyRGlydHlSZWN0Lm1vdmUoLW1fc2Nyb2xsZWRD
b250ZW50c0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSArIHRvTGF5b3V0U2l6ZShtX293bmlu
Z0xheWVyLnNjcm9sbE9mZnNldCgpKSAtIG1fc3VicGl4ZWxPZmZzZXRGcm9tUmVuZGVyZXIpOwor
ICAgICAgICBTY3JvbGxPZmZzZXQgc2Nyb2xsT2Zmc2V0OworICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUxheWVyID0gbV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAg
ICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgbGF5ZXJEaXJ0eVJlY3QubW92ZSgtbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPm9mZnNldEZy
b21SZW5kZXJlcigpICsgdG9MYXlvdXRTaXplKHNjcm9sbE9mZnNldCkgLSBtX3N1YnBpeGVsT2Zm
c2V0RnJvbVJlbmRlcmVyKTsKICAgICAgICAgbV9zY3JvbGxlZENvbnRlbnRzTGF5ZXItPnNldE5l
ZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVjdCwgc2hvdWxkQ2xpcCk7CiAgICAgfQogfQpA
QCAtMzEzMiw3ICszMTYxLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xh
eWVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICAgICAgaWYg
KCZsYXllciA9PSAmbV9vd25pbmdMYXllcikgewogICAgICAgICAgICAgbGF5ZXIucGFpbnRMYXll
ckNvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFncyk7CiAKLSAgICAgICAg
ICAgIGlmIChsYXllci5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRS
ZWdpb25Db250ZXh0KQorICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXIu
c2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlTGF5ZXIgJiYgc2Ny
b2xsYWJsZUxheWVyLT5jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhZXZlbnRS
ZWdpb25Db250ZXh0KQogICAgICAgICAgICAgICAgIGxheWVyLnBhaW50TGF5ZXJDb250ZW50cyhj
b250ZXh0LCBwYWludGluZ0luZm8sIHBhaW50RmxhZ3MgfCBSZW5kZXJMYXllcjo6UGFpbnRMYXll
ckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGxheWVyLnBhaW50TGF5ZXJXaXRoRWZmZWN0cyhjb250ZXh0LCBwYWludGluZ0luZm8s
IHBhaW50RmxhZ3MpOwpAQCAtMzQxOCwxNyArMzQ0OCwyNiBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBH
cmFwaAogICAgICAgICAgICAgcGFpbnREZWJ1Z092ZXJsYXlzKGdyYXBoaWNzTGF5ZXIsIGNvbnRl
eHQpOwogCiAgICAgfSBlbHNlIGlmIChncmFwaGljc0xheWVyID09IGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpKSB7Ci0gICAgICAgIHBhaW50U2Nyb2xsYmFyKG1fb3duaW5nTGF5ZXIuaG9y
aXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCisgICAgICAgIHBhaW50U2Nyb2xsYmFyKHNjcm9s
bGFibGVMYXllci0+aG9yaXpvbnRhbFNjcm9sbGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOwog
ICAgIH0gZWxzZSBpZiAoZ3JhcGhpY3NMYXllciA9PSBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFy
KCkpIHsKLSAgICAgICAgcGFpbnRTY3JvbGxiYXIobV9vd25pbmdMYXllci52ZXJ0aWNhbFNjcm9s
bGJhcigpLCBjb250ZXh0LCBkaXJ0eVJlY3QpOworICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VSVChzY3Jv
bGxhYmxlTGF5ZXIpOworCisgICAgICAgIHBhaW50U2Nyb2xsYmFyKHNjcm9sbGFibGVMYXllci0+
dmVydGljYWxTY3JvbGxiYXIoKSwgY29udGV4dCwgZGlydHlSZWN0KTsKICAgICB9IGVsc2UgaWYg
KGdyYXBoaWNzTGF5ZXIgPT0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSkgewotICAgICAgICBhdXRv
IGNvcm5lclJlY3QgPSBtX293bmluZ0xheWVyLm92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lck9yUmVzaXplclJlY3QoKTsKKyAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0g
bV9vd25pbmdMYXllci5zY3JvbGxhYmxlQXJlYSgpOworICAgICAgICBBU1NFUlQoc2Nyb2xsYWJs
ZUxheWVyKTsKKworICAgICAgICBhdXRvIGNvcm5lclJlY3QgPSBzY3JvbGxhYmxlTGF5ZXItPm92
ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lck9yUmVzaXplclJlY3QoKTsKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgICAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgtY29ybmVyUmVjdC5sb2NhdGlvbigpKTsKICAgICAgICAgTGF5
b3V0UmVjdCB0cmFuc2Zvcm1lZENsaXAgPSBMYXlvdXRSZWN0KGNsaXApOwogICAgICAgICB0cmFu
c2Zvcm1lZENsaXAubW92ZUJ5KGNvcm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAgIG1fb3du
aW5nTGF5ZXIucGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBlZElu
dFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIucGFpbnRSZXNp
emVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CisgICAgICAgIHNjcm9s
bGFibGVMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIoY29udGV4dCwgSW50UG9pbnQoKSwgc25hcHBl
ZEludFJlY3QodHJhbnNmb3JtZWRDbGlwKSk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cGFp
bnRSZXNpemVyKGNvbnRleHQsIEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgfQog
I2lmbmRlZiBOREVCVUcKICAgICByZW5kZXJlcigpLnBhZ2UoKS5zZXRJc1BhaW50aW5nKGZhbHNl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAKaW5kZXggZmYxMjMwZWRlOGE4NmE4ODhmMjMyMzEzZmMzZjg1NzFjYmM2MzBjNC4uNjk3
OTM5Zjg4YzUzYTQ1NzlhMTFjY2Q2NGY0NTQ0ZWQxYmZiMjM4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00NjYyLDggKzQ2NjMs
MTEgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xs
aW5nTm9kZUZvclZpZXdwb3J0Q29uc3RyYWluZWQKIExheW91dFJlY3QgUmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpwYXJlbnRSZWxhdGl2ZVNjcm9sbGFibGVSZWN0KGNvbnN0IFJlbmRlckxheWVyJiBs
YXllciwgY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2VzdG9yTGF5ZXIpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IGFuY2VzdG9yTGF5ZXIgbmVlZHMgdG8gYmUgYWx3YXlzIG5vbi1udWxsLCBzbyBzaG91
bGQgYmVjb21lIGEgcmVmZXJlbmNlLgotICAgIGlmICghYW5jZXN0b3JMYXllcikKLSAgICAgICAg
cmV0dXJuIExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnZpc2libGVTaXplKCkpKTsK
KyAgICBpZiAoIWFuY2VzdG9yTGF5ZXIpIHsKKyAgICAgICAgaWYgKCFsYXllci5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKKyAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoeyB9LCBMYXlvdXRTaXplKGxheWVyLnNjcm9sbGFibGVBcmVhKCktPnZpc2li
bGVTaXplKCkpKTsKKyAgICB9CiAKICAgICBMYXlvdXRSZWN0IHNjcm9sbGFibGVSZWN0OwogICAg
IGlmIChpczxSZW5kZXJCb3g+KGxheWVyLnJlbmRlcmVyKCkpKQpAQCAtNDY4MywxMSArNDY4Nywx
NCBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVy
cyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCBSZQogICAgICAgICAgICAgZml4ZWRSb290QmFja2dy
b3VuZExheWVyKCksIGNsaXBMYXllcigpLCByb290Q29udGVudHNMYXllcigpLAogICAgICAgICAg
ICAgZnJhbWVWaWV3LmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpLCBmcmFtZVZpZXcubGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIH0pOwogICAgIH0gZWxzZSB7CisgICAgICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIEFTU0VS
VChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgICAgIGF1dG8mIGJhY2tpbmcgPSAqbGF5ZXIuYmFj
a2luZygpOwogICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci5zZXROb2RlTGF5ZXJzKG5vZGVJ
RCwgeyBiYWNraW5nLmdyYXBoaWNzTGF5ZXIoKSwKICAgICAgICAgICAgIGJhY2tpbmcuc2Nyb2xs
Q29udGFpbmVyTGF5ZXIoKSwgYmFja2luZy5zY3JvbGxlZENvbnRlbnRzTGF5ZXIoKSwKICAgICAg
ICAgICAgIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsCi0gICAgICAgICAgICBsYXllci5sYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSwgbGF5ZXIubGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJh
cigpIH0pOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSwgc2Nyb2xsYWJsZUxheWVyLT5sYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkg
fSk7CiAgICAgfQogfQogCkBAIC00NzI1LDggKzQ3MzIsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUo
UmVuZGUKICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6Okxh
eWVyKQogICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxh
eWVyLCAqc2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Ny
b2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnRO
b2RlSUQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9k
ZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChj
aGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVT
dGF0ZS5wYXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5
ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2Rl
SUQsICpzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5l
d05vZGVJRDsKQEAgLTQ5MDEsNyArNDkxMCw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXll
ckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAg
ICAgaWYgKG5vZGVJRCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlE
KCkpCiAgICAgICAgIHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0
dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0
dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVBcmVh
KCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5n
TGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYg
YmFja2luZykKQEAgLTUwNDAsMTEgKzUwNDksMTQgQEAgdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxp
bmdMYXllckNvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxpbmdMYXllcihSZW5kZXJMYXllciYgbGEK
ICAgICBhdXRvKiBiYWNraW5nID0gbGF5ZXIuYmFja2luZygpOwogICAgIEFTU0VSVChiYWNraW5n
KTsKIAotICAgIGJvb2wgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyID0gIWxheWVyLmhvcml6b250
YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7Ci0gICAgYm9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xs
YmFyID0gIWxheWVyLnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIGF1dG8q
IHNjcm9sbGFibGVMYXllciA9IGxheWVyLnNjcm9sbGFibGVBcmVhKCk7CisgICAgQVNTRVJUKHNj
cm9sbGFibGVMYXllcik7CisKKyAgICBib29sIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciA9ICFz
Y3JvbGxhYmxlTGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CisgICAg
Ym9vbCBhbGxvd1ZlcnRpY2FsU2Nyb2xsYmFyID0gIXNjcm9sbGFibGVMYXllci0+dmVydGljYWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCk7CiAKICAgICBtX2Nocm9tZUNsaWVudC5hZGRPclVwZGF0
ZVNjcm9sbGluZ0xheWVyKGxheWVyLnJlbmRlcmVyKCkuZWxlbWVudCgpLCBiYWNraW5nLT5zY3Jv
bGxDb250YWluZXJMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGJhY2tpbmctPnNjcm9sbGVkQ29u
dGVudHNMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksCi0gICAgICAgIGxheWVyLnJlYWNoYWJsZVRv
dGFsQ29udGVudHNTaXplKCksIGFsbG93SG9yaXpvbnRhbFNjcm9sbGJhciwgYWxsb3dWZXJ0aWNh
bFNjcm9sbGJhcik7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+cmVhY2hhYmxlVG90YWxDb250
ZW50c1NpemUoKSwgYWxsb3dIb3Jpem9udGFsU2Nyb2xsYmFyLCBhbGxvd1ZlcnRpY2FsU2Nyb2xs
YmFyKTsKIH0KIAogdm9pZCBMZWdhY3lXZWJLaXRTY3JvbGxpbmdMYXllckNvb3JkaW5hdG9yOjpy
ZWdpc3RlckFsbFNjcm9sbGluZ0xheWVycygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggMDUyYTljNzVlNjM1NTZhM2Vl
YWJiZmRmMWMyMjFiZTNjMTNiNGNhYy4uYzdmYzY2YzcwMTNiN2U4ZGU2YWEwNmM0MzEzYmQyOWE4
MTg1MWFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcApAQCAtMTc2LDggKzE3Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0CiAgICAgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlID0gc3R5bGUoKTsKICAgICBpZiAo
b2xkU3R5bGUgJiYgc2Nyb2xsU25hcENvbnRhaW5lclJlcXVpcmVzVXBkYXRlRm9yU3R5bGVVcGRh
dGUoKm9sZFN0eWxlLCBuZXdTdHlsZSkpIHsKICAgICAgICAgaWYgKFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciA9IGxheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlckxheWVyLT51cGRhdGVTbmFw
T2Zmc2V0cygpOwotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNjcm9sbFNuYXBTdGF0
ZSgpOworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcmVuZGVyTGF5ZXItPmVu
c3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
dXBkYXRlU25hcE9mZnNldHMoKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+dXBkYXRl
U2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb2R5KCkgfHwgaXNEb2N1
bWVudEVsZW1lbnRSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBGcmFtZVZpZXcmIGZyYW1lVmll
dyA9IHZpZXcoKS5mcmFtZVZpZXcoKTsKICAgICAgICAgICAgIGZyYW1lVmlldy51cGRhdGVTbmFw
T2Zmc2V0cygpOwpAQCAtMTk1LDggKzE5Niw5IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0CiAg
ICAgICAgIGlmIChzY3JvbGxTbmFwQm94ICYmIHNjcm9sbFNuYXBCb3gtPmxheWVyKCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9IHNjcm9sbFNuYXBCb3gtPnN0eWxl
KCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUuc2Nyb2xsU25hcFR5cGUoKS5zdHJpY3RuZXNzICE9
IFNjcm9sbFNuYXBTdHJpY3RuZXNzOjpOb25lKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsU25h
cEJveC0+bGF5ZXIoKS0+dXBkYXRlU25hcE9mZnNldHMoKTsKLSAgICAgICAgICAgICAgICBzY3Jv
bGxTbmFwQm94LT5sYXllcigpLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBzY3JvbGxTbmFwQm94LT5sYXllcigpLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVy
LT51cGRhdGVTbmFwT2Zmc2V0cygpOworICAgICAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+
dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFNuYXBC
b3gtPmlzQm9keSgpIHx8IHNjcm9sbFNuYXBCb3gtPmlzRG9jdW1lbnRFbGVtZW50UmVuZGVyZXIo
KSkKICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsU25hcEJveC0+dmlldygpLmZyYW1lVmlldygp
LnVwZGF0ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yU2Nyb2xsU25hcFByb3BlcnRpZXMoKTsKICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmNwcAppbmRleCA4OTk5ZTAwMzdhMTUyN2ViY2RjMzVmYTE3NTg2OGJj
ZDI3YWVjN2FmLi5hZjJiOTQ5ZTAwMDY2OTU1Y2M2ZmUxYWQ1Y2Q0Yjk5OTA0MzcwN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuY3BwCkBAIC0xLDE5ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlh
IFMuTC4KICAqCi0gKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotICoKLSAqIE90aGVyIGNvbnRyaWJ1dG9yczoKLSAq
ICAgUm9iZXJ0IE8nQ2FsbGFoYW4gPHJvYytAY3MuY211LmVkdT4KLSAqICAgRGF2aWQgQmFyb24g
PGRiYXJvbkBmYXMuaGFydmFyZC5lZHU+Ci0gKiAgIENocmlzdGlhbiBCaWVzaW5nZXIgPGNiaWVz
aW5nZXJAd2ViLmRlPgotICogICBSYW5kYWxsIEplc3VwIDxyamVzdXBAd2dhdGUuY29tPgotICog
ICBSb2xhbmQgTWFpbnogPHJvbGFuZC5tYWluekBpbmZvcm1hdGlrLm1lZC51bmktZ2llc3Nlbi5k
ZT4KLSAqICAgSm9zaCBTb3JlZiA8dGltZWxlc3NAbWFjLmNvbT4KLSAqICAgQm9yaXMgWmJhcnNr
eSA8YnpiYXJza3lAbWl0LmVkdT4KLSAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKQEAgLTQ5LDEy
ICszNiw2MiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKLSAgICA6
IG1fbGF5ZXIobGF5ZXIpCisgICAgOiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAg
ICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYShmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhm
YWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
ZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlv
bihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQor
ICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uU2V0KGZhbHNlKQorICAgICwgbV9sYXllcihsYXllcikKIHsKIH0KIAog
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEoKQog
eworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEFTU0VSVCht
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9PSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCku
Y29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisKKyAgICBpZiAobV9yZWdpc3RlcmVkU2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1vdmVT
Y3JvbGxhYmxlQXJlYSh0aGlzKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAg
IHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworI2VuZGlmCisg
ICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVs
ZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKKwor
ICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgZGVzdHJveVNj
cm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7CisKKyAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29v
cmRpbmF0b3IgPSByZW5kZXJlci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAg
ICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPndpbGxEZXN0cm95U2Nyb2xsYWJsZUFyZWEoKnRoaXMp
OworCisgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICBjbGVhclJlc2l6ZXIoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzdG9yZVNjcm9sbFBvc2l0aW9uKCkKK3sK
KyAgICBhdXRvKiBlbGVtZW50ID0gbV9sYXllci5yZW5kZXJlcigpLmVsZW1lbnQoKTsKKyAgICBp
ZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2xheWVyLnJlbmRlckJv
eCgpKSB7CisgICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25seSB0aGUgc2Nyb2xsT2Zm
c2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1bGF0ZWQuCisgICAgICAg
IG1fc2Nyb2xsUG9zaXRpb24gPSBlbGVtZW50LT5zYXZlZExheWVyU2Nyb2xsUG9zaXRpb24oKTsK
KyAgICAgICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQorICAgICAgICAgICAgc2Ny
b2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisgICAg
fQorCisgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkp
OwogfQogCiBib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tE
aXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdApAQCAtNjIsNCArOTksMTc0MCBAQCBib29s
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3Jv
bGxiYXJPbkxlZnQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkuc2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOwogfQogCisjaWYgRU5BQkxFKElP
U19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRv
dWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQoreworICAgIC8v
IElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9sbGluZyBiZSBo
YW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xs
aW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBp
ZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQo
KS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lz
dGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCAhbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVy
LmRvY3VtZW50KCkucmVtb3ZlVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7
CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSBmYWxz
ZTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKworSW50UmVjdCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlz
SW5zaWRlRml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5hYnNv
bHV0ZUJvdW5kaW5nQm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4
ZWQpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbElu
UHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9s
YXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xs
QW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3Jv
bGxBbmltYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoYXV0byBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblBy
b2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChhdXRvIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRv
cigpKQorICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jl
c3MoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZv
cm1hbmNlVGVzdGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5z
ZXR0aW5ncygpLnNjcm9sbGluZ1BlcmZvcm1hbmNlVGVzdGluZ0VuYWJsZWQoKTsKK30KKworLy8g
RklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVycy4KK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllci5jb21wb3NpdG9yKCkudXNlQ29vcmRpbmF0ZWRTY3JvbGxpbmdG
b3JMYXllcihtX2xheWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0
aW9uKQoreworICAgIGlmICghcG9zaXRpb24pIHsKKyAgICAgICAgbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgICAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvblNldCA9IGZhbHNlOworICAgIH0KKworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0
aW9uID0gcG9zaXRpb24udmFsdWUoKTsKKyAgICBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvblNl
dCA9IHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXBwbHlQb3N0
TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvblNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsVG9PZmZzZXQo
c2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uKSk7Cisg
ICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBTY3JvbGxQb3NpdGlvbigpOworICAgIG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uU2V0ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcsIEFuaW1hdGVkU2Nyb2xsIGFuaW1hdGVk
KQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKHgsIG1fc2Nyb2xsUG9zaXRpb24ueSgp
KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcs
IGFuaW1hdGVkKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxU
b1lQb3NpdGlvbihpbnQgeSwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgU2Nyb2xsUG9zaXRpb24g
cG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbi54KCksIHkpOworICAgIHNldFNjcm9sbFBvc2l0aW9u
KHBvc2l0aW9uLCBzY3JvbGxUeXBlLCBjbGFtcGluZywgYW5pbWF0ZWQpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9sbFBv
c2l0aW9uJiBwb3NpdGlvbiwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZywgQW5pbWF0ZWRTY3JvbGwgYW5pbWF0ZWQpCit7CisgICAgaWYgKGFuaW1hdGVkID09
IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlv
bihzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGlu
Zyk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9z
aXRpb24ocG9zaXRpb24pLCBzY3JvbGxUeXBlLCBjbGFtcGluZyk7Cit9CisKK1Njcm9sbE9mZnNl
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0
LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlv
blVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xs
VHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9M
TElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8
PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlm
IChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nv
b3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBp
bmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0LCBTY3JvbGxUeXBlIHNjcm9sbFR5cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQorewor
ICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0
YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2Fu
Y2VsQW5pbWF0aW9ucygpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQg
PSBjbGFtcGluZyA9PSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCA/IGNsYW1wU2Nyb2xsT2Zmc2V0
KHNjcm9sbE9mZnNldCkgOiBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZz
ZXQgPT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
cHJldmlvdXNTY3JvbGxUeXBlID0gY3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzZXRDdXJyZW50
U2Nyb2xsVHlwZShzY3JvbGxUeXBlKTsKKworICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9u
VXBkYXRlKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xsT2Zmc2V0KSwgc2Ny
b2xsVHlwZSwgY2xhbXBpbmcpKQorICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY2xhbXBlZFNjcm9sbE9mZnNldCwgY2xhbXBpbmcpOworICAgIHNldFNjcm9sbEJlaGF2aW9y
U3RhdHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7CisKKyAgICBzZXRD
dXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihjb25zdCBTY3Jv
bGxPZmZzZXQmIG9mZnNldCwgU2Nyb2xsVHlwZSBzY3JvbGxUeXBlLCBTY3JvbGxDbGFtcGluZyBj
bGFtcGluZykKK3sKKyAgICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxU
eXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5cGUoc2Nyb2xsVHlwZSk7CisKKyAgICBTY3Jv
bGxPZmZzZXQgbmV3U2Nyb2xsT2Zmc2V0ID0gY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNs
YW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChvZmZzZXQpIDogb2Zmc2V0OworICAgIGlmIChjdXJy
ZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25O
YXRpdmVBbmltYXRpb24pCisgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9u
cygpOworICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgIT0gdGhpcy0+c2Nyb2xsT2Zmc2V0KCkpCisg
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24obmV3U2Ny
b2xsT2Zmc2V0KTsKKworICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKHByZXZpb3VzU2Nyb2xsVHlw
ZSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8oY29uc3Qg
U2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXll
ci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTE9H
X1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzY3JvbGxUbyAiIDw8IHBvc2l0aW9uIDw8ICIgZnJvbSAiIDw8IG1fc2Nyb2xsUG9zaXRp
b24gPDwgIiAoaXMgdXNlciBzY3JvbGwgIiA8PCAoY3VycmVudFNjcm9sbFR5cGUoKSA9PSBTY3Jv
bGxUeXBlOjpVc2VyKSA8PCAiKSIpOworCisgICAgU2Nyb2xsUG9zaXRpb24gbmV3UG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICBpZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpKSB7CisgICAgICAgIC8v
IEVuc3VyZSB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVk
IHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCisgICAgICAgIGlmIChtX3Njcm9s
bERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgICAgIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGFkanVzdEZvcklPU0NhcmV0
V2hlblNjcm9sbGluZygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXQncyBub3QgY2xlYXIg
d2hhdCB0aGlzIGNvZGUgaXMgdHJ5aW5nIHRvIGRvLiBCZWhhdmlvciBzZWVtcyByZWFzb25hYmxl
IHdpdGggaXQgcmVtb3ZlZC4KKyAgICAgICAgICAgIGludCBtYXhPZmZzZXQgPSBzY3JvbGxXaWR0
aCgpIC0gcm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICAgICAgU2Nyb2xs
T2Zmc2V0IG5ld09mZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihuZXdQb3NpdGlvbik7
CisgICAgICAgICAgICBpbnQgc2Nyb2xsWE9mZnNldCA9IG5ld09mZnNldC54KCk7CisgICAgICAg
ICAgICBpZiAoc2Nyb2xsWE9mZnNldCA+IG1heE9mZnNldCAtIGNhcmV0V2lkdGgpIHsKKyAgICAg
ICAgICAgICAgICBzY3JvbGxYT2Zmc2V0ICs9IGNhcmV0V2lkdGg7CisgICAgICAgICAgICAgICAg
aWYgKHNjcm9sbFhPZmZzZXQgPD0gY2FyZXRXaWR0aCkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsWE9mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFhPZmZzZXQgPCBt
X3Njcm9sbFBvc2l0aW9uLngoKSAtIGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgc2Nyb2xs
WE9mZnNldCAtPSBjYXJldFdpZHRoOworCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0WChzY3Jv
bGxYT2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb25Gcm9t
T2Zmc2V0KG5ld09mZnNldCk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIGlmICht
X3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0
YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgeworICAgICAg
ICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkgd2l0aCBh
biB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4KKyAgICAg
ICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1lc3NhZ2Ug
dGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCisgICAgICAgIGlmIChyZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgeworICAgICAgICAgICAgbV9sYXllci5z
ZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgICAgIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9zY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworCisgICAgYXV0
byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyVmlldyYgdmlldyA9
IHJlbmRlcmVyLnZpZXcoKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25zIG9mIG91ciBj
aGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVycyBzaG91bGQgYmUgaW1w
YWN0ZWQgYnkgYSBzY3JvbGwpLgorICAgIC8vIFdlIGRvbid0IHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRlIGZyb20gdGhlIGNvbXBv
c2l0aW5nIGFuY2VzdG9yLgorICAgIGlmICghdmlldy5mcmFtZVZpZXcoKS5sYXlvdXRDb250ZXh0
KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgeworICAgICAgICAvLyBJZiB3ZSdyZSBpbiB0aGUg
bWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJzIG9uY2UgbGF5b3V0IGhh
cyBmaW5pc2hlZC4KKyAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKCk7CisKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVsZVVwZGF0ZVdpZGdldFBv
c2l0aW9ucygpOworCisgICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbikgewor
ICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcgbGF5ZXJzIGlmLCBoaWdo
ZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxheWVyCisgICAgICAgICAg
ICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyByZXF1aXJlcyBhIGZ1bGwg
d2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCisgICAgICAgICAgICAvLyBpbiB0
aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRpb25zOyB3ZSdsbCB1cGRh
dGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCisgICAgICAgICAgICAvLyB3aGVuIHRoYXQgY29t
cGxldGVzLgorICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpIHsKKyAg
ICAgICAgICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgp
OworCisgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxv
Y2F0aW9uIG9mIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5n
IGluIHotb3JkZXIpLAorICAgICAgICAgICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50
IHdhbGsgZnJvbSB0aGUgc3RhY2tpbmcgY29udGV4dC4KKyAgICAgICAgICAgICAgICBpZiAoYXV0
byogcGFpbnRQYXJlbnQgPSBtX2xheWVyLnN0YWNraW5nQ29udGV4dCgpKQorICAgICAgICAgICAg
ICAgICAgICBwYWludFBhcmVudC0+c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhp
ZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVD
b21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBV
cGRhdGUgcmVnaW9ucywgc2Nyb2xsaW5nIG1heSBjaGFuZ2UgdGhlIGNsaXAgb2YgYSBwYXJ0aWN1
bGFyIHJlZ2lvbi4KKyAgICAgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVy
aW5nRGVwZW5kZW50UmVnaW9ucygpOworICAgICAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5
b3V0KHJlbmRlcmVyLmZyYW1lKCkpOworICAgIH0KKworICAgIEZyYW1lJiBmcmFtZSA9IHJlbmRl
cmVyLmZyYW1lKCk7CisgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciA9IHJlbmRlcmVyLmNvbnRhaW5lckZvclJlcGFpbnQoKTsKKyAgICAvLyBUaGUgY2FyZXQgcmVj
dCBuZWVkcyB0byBiZSBpbnZhbGlkYXRlZCBhZnRlciBzY3JvbGxpbmcKKyAgICBmcmFtZS5zZWxl
Y3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOworCisgICAgTGF5b3V0UmVjdCByZWN0
Rm9yUmVwYWludCA9IHJlbmRlcmVyLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIu
cmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRlcmVyLmNsaXBwZWRPdmVy
Zmxvd1JlY3RGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIpOworCisgICAgRmxvYXRRdWFkIHF1
YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQgPSBGbG9hdFF1YWQocmVjdEZvclJlcGFpbnQpOworICAg
IGlmIChyZXBhaW50Q29udGFpbmVyKQorICAgICAgICBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50
ID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChxdWFkRm9yRmFrZU1vdXNl
TW92ZUV2ZW50KTsKKyAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1v
dmVFdmVudFNvb25JblF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7CisKKyAgICBib29s
IHJlcXVpcmVzUmVwYWludCA9IHRydWU7CisgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKKyAgICAgICAgbV9sYXllci5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGll
cmFyY2h5VHJhdmVyc2FsKCk7CisgICAgICAgIHJlcXVpcmVzUmVwYWludCA9IG1fbGF5ZXIuYmFj
a2luZygpLT5uZWVkc1JlcGFpbnRPbkNvbXBvc2l0ZWRTY3JvbGwoKTsKKyAgICB9CisKKyAgICAv
LyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCisgICAgaWYgKHJl
cXVpcmVzUmVwYWludCkKKyAgICAgICAgcmVuZGVyZXIucmVwYWludFVzaW5nQ29udGFpbmVyKHJl
cGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKKworICAgIC8vIFNjaGVkdWxlIHRoZSBz
Y3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVudHMuCisgICAgaWYgKEVsZW1lbnQqIGVs
ZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpCisgICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCku
YWRkUGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKKworICAgIGlmIChzY3JvbGxz
T3ZlcmZsb3coKSkKKyAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZz
ZXQoKTsKKworICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsK
KyAgICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbChtX2xheWVyKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVyc0Fm
dGVyU2Nyb2xsKCkKK3sKKyAgICBpZiAobV9sYXllci5jb21wb3NpdG9yKCkuaGFzQ29udGVudENv
bXBvc2l0aW5nTGF5ZXJzKCkpIHsKKyAgICAgICAgLy8gT3VyIHN0YWNraW5nIGNvbnRhaW5lciBp
cyBndWFyYW50ZWVkIHRvIGNvbnRhaW4gYWxsIG9mIG91ciBkZXNjZW5kYW50cyB0aGF0IG1heSBu
ZWVkCisgICAgICAgIC8vIHJlcG9zaXRpb25pbmcsIHNvIHVwZGF0ZSBjb21wb3NpdGluZyBsYXll
cnMgZnJvbSB0aGVyZS4KKyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBjb21wb3NpdGluZ0FuY2Vz
dG9yID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXll
cigpKSB7CisgICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAg
ICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhD
b21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uQ29tcG9zaXRlZFNjcm9sbCwgY29tcG9zaXRpbmdBbmNl
c3Rvcik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd291
bGQgYmUgbmljZSB0byBvbmx5IGRpcnR5IGxheWVycyB3aG9zZSBwb3NpdGlvbnMgd2VyZSBhZmZl
Y3RlZCBieSBzY3JvbGxpbmcuCisgICAgICAgICAgICAgICAgY29tcG9zaXRpbmdBbmNlc3Rvci0+
c2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOwor
ICAgICAgICAgICAgICAgIG1fbGF5ZXIuY29tcG9zaXRvcigpLnVwZGF0ZUNvbXBvc2l0aW5nTGF5
ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZTo6T25TY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3Ip
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbnQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGgoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVy
LnJlbmRlckJveCgpKTsKKyAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAg
IGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Ny
b2xsRGltZW5zaW9ucygpOworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZElu
dFNpemUoKSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1f
c2Nyb2xsV2lkdGg7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxI
ZWlnaHQoKSBjb25zdAoreworICAgIEFTU0VSVChtX2xheWVyLnJlbmRlckJveCgpKTsKKyAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGgg
YWJzb2x1dGUgY29vcmRpbmF0ZXMuCisgICAgcmV0dXJuIG1fc2Nyb2xsSGVpZ2h0OworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpCit7
CisgICAgaWYgKCFtX21hcnF1ZWUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiB3
b3VsZCBsaWtlIHRvIHVzZSBTZXRGb3JTY29wZTw+IGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCBi
aXRmaWVsZHMuCisgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRp
bmdNYXJxdWVlUG9zaXRpb247CisgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7
CisgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpCit7Cisg
ICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVy
LmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlci5zdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9
IE1hcnF1ZWVCZWhhdmlvcjo6Tm9uZSAmJiByZW5kZXJlci5pc0JveCgpKSB7CisgICAgICAgIGlm
ICghbV9tYXJxdWVlKQorICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJN
YXJxdWVlPigmbV9sYXllcik7CisgICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVN0eWxl
KCk7CisgICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCisgICAgICAgIG1fbWFycXVlZSA9IG51bGxw
dHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsc092ZXJmbG93
KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcikuc2Nyb2xsc092ZXJmbG93
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2FuVXNlQ29tcG9zaXRl
ZFNjcm9sbGluZygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJlci5zdHlsZSgpLnZpc2liaWxpdHko
KSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOworICAgIGlmIChyZW5kZXJlci5zZXR0aW5ncygpLmFz
eW5jT3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBpc1Zpc2libGUg
JiYgc2Nyb2xsc092ZXJmbG93KCkgJiYgIW1fbGF5ZXIuaXNJbnNpZGVTVkdGb3JlaWduT2JqZWN0
KCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSAmJiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQorICAgIHJldHVybiBpc1Zpc2libGUgJiYgc2Nyb2xsc092ZXJmbG93KCkgJiYg
KHJlbmRlcmVyLnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVy
LnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVyZmxvd1Njcm9sbCgpKTsKKyNlbHNl
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zmc2V0KQorewor
ICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsKK30KKworU2Ny
b2xsaW5nTm9kZUlEIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGluZ05vZGVJRCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2xheWVyLmlzQ29tcG9zaXRlZCgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9y
Um9sZShTY3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBPcHRpb25hbDxXaGVlbFNjcm9sbEdlc3R1
cmVTdGF0ZT4gZ2VzdHVyZVN0YXRlKQoreworICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJi
YW5kYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoQVNZTkNfU0NS
T0xMSU5HKQorICAgIGlmICh1c2VzQXN5bmNTY3JvbGxpbmcoKSAmJiBzY3JvbGxpbmdOb2RlSUQo
KSkgeworICAgICAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX2xheWVyLnBh
Z2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5oYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZlbnQsIHNj
cm9sbGluZ05vZGVJRCgpLCBnZXN0dXJlU3RhdGUpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0
dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKHdoZWVsRXZl
bnQsIGdlc3R1cmVTdGF0ZSk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNT
Y3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKKyAgICBpZiAoc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJz
KQorICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOworCisgICAg
YXV0byB2aXNpYmxlU2l6ZSA9IHRoaXMtPnZpc2libGVTaXplKCk7CisgICAgcmV0dXJuIHsgc2Ny
b2xsUG9zaXRpb24oKSwgeyBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS53aWR0aCgpIC0gc2Nyb2xs
YmFyU3BhY2Uud2lkdGgoKSksIHN0ZDo6bWF4KDAsIHZpc2libGVTaXplLmhlaWdodCgpIC0gc2Ny
b2xsYmFyU3BhY2UuaGVpZ2h0KCkpIH0gfTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9C
QU5ESU5HKQorICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
ICghcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lv
bnNFbmFibGVkKCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKCk7CisKKyAgICBJbnRTaXplIHN0
cmV0Y2g7CisKKyAgICAvLyBGSVhNRTogdXNlIG1heGltdW1TY3JvbGxPZmZzZXQoKSwgb3IganVz
dCBtb3ZlIHRoaXMgdG8gU2Nyb2xsYWJsZUFyZWEuCisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9m
ZnNldCA9IHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpKTsKKyAgICBh
dXRvIHJlYWNoYWJsZVNpemUgPSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpOworICAgIGlm
IChzY3JvbGxPZmZzZXQueSgpIDwgMCkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xs
T2Zmc2V0LnkoKSk7CisgICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAmJiBzY3Jv
bGxPZmZzZXQueSgpID4gcmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkK
KyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsT2Zmc2V0LnkoKSAtIChyZWFjaGFibGVT
aXplLmhlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0
LngoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSk7Cisg
ICAgZWxzZSBpZiAocmVhY2hhYmxlU2l6ZS53aWR0aCgpICYmIHNjcm9sbE9mZnNldC54KCkgPiBy
ZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkKKyAgICAgICAgc3RyZXRjaC5z
ZXRXaWR0aChzY3JvbGxPZmZzZXQueCgpIC0gKHJlYWNoYWJsZVNpemUud2lkdGgoKSAtIHZpc2li
bGVXaWR0aCgpKSk7CisKKyAgICByZXR1cm4gc3RyZXRjaDsKKyNlbHNlCisgICAgcmV0dXJuIElu
dFNpemUoKTsKKyNlbmRpZgorfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbENvcm5lclJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKS5zY3JvbGxDb3JuZXI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5y
ZW5kZXJlcigpLmlzQm94KCkpOworICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCgpLmlzRW1w
dHkoKTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsK
KyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiBy
ZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmlu
Z1ZpZXcoJnJlbmRlcmVyLCByZWN0KTsKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAg
YXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UmVjdCByZWN0ID0g
cmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Jl
bmRlcmVyKCZyZW5kZXJlciwgcGFyZW50UmVjdCk7CisgICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJP
ZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBv
aW50KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOwor
ICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3Jv
bGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKS5jb252ZXJ0RnJvbVJlbmRlcmVyVG9Db250YWluaW5nVmlldygmcmVuZGVyZXIsIHBv
aW50KTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBj
b25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgSW50UG9pbnQgcG9pbnQgPSByZW5kZXJlci52aWV3
KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRl
cmVyLCBwYXJlbnRQb2ludCk7CisgICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9s
bGJhcikpOworICAgIHJldHVybiBwb2ludDsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIudmlz
aWJsZVNpemUoKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIHJldHVybiBJbnRTaXplKHNjcm9sbFdpZHRoKCksIHNj
cm9sbEhlaWdodCgpKTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpy
ZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Cit7CisgICAgSW50U2l6ZSBjb250ZW50
c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3RkOjpt
aW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOworCisgICAg
aWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQorICAgICAgICBjb250ZW50c1Np
emUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNpemUo
KS5oZWlnaHQoKSkpOworCisgICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxh
YmxlU2l6ZUNoYW5nZVJlYXNvbiByZWFzb24pCit7CisgICAgU2Nyb2xsYWJsZUFyZWE6OmF2YWls
YWJsZUNvbnRlbnRTaXplQ2hhbmdlZChyZWFzb24pOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlYXNvbiA9PSBBdmFpbGFibGVTaXplQ2hhbmdl
UmVhc29uOjpTY3JvbGxiYXJzQ2hhbmdlZCkgeworICAgICAgICBpZiAoaXM8UmVuZGVyQmxvY2s+
KHJlbmRlcmVyKSkKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlciku
c2V0U2hvdWxkRm9yY2VSZWxheW91dENoaWxkcmVuKHRydWUpOworICAgICAgICByZW5kZXJlci5z
ZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpzaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpIGNvbnN0Cit7CisgICAgYXV0byYg
cmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKS5zaG91bGRTdXNwZW5kU2Nyb2xsQW5pbWF0aW9ucygpOworfQorCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlk
U3RhcnRTY3JvbGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRp
ZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpkaWRFbmRTY3JvbGwoKQoreworICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZEVuZE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6ZGlkVXBkYXRlU2Nyb2xsKCkKK3sKKyAgICAvLyBTZW5kIHRoaXMgbm90aWZpY2F0
aW9uIHdoZW4gd2Ugc2Nyb2xsLCBzaW5jZSB0aGlzIGlzIGhvdyB3ZSBrZWVwIHNlbGVjdGlvbiB1
cGRhdGVkLgorICAgIG1fbGF5ZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZExheW91dChD
aHJvbWVDbGllbnQ6OlNjcm9sbCk7Cit9CisjZW5kaWYKKworUmVuZGVyTGF5ZXI6Ok92ZXJmbG93
Q29udHJvbFJlY3RzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNS
ZWN0cygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgQVNTRVJUKGlzPFJlbmRlckJveD4ocmVuZGVyZXIpKTsKKyAgICBhdXRvJiByZW5kZXJC
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNp
dCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRp
b25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVk
aW5nU2Nyb2xsYmFyKCkpOworCisgICAgYXV0byBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0g
bV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IDA7CisgICAgYXV0byB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoID0gbV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogMDsKKworICAgIGF1dG8gaXNOb25P
dmVybGF5U2Nyb2xsYmFyID0gW10oY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIHsKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhciAmJiAhc2Nyb2xsYmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKTsK
KyAgICB9OworCisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgPSBp
c05vbk92ZXJsYXlTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICBib29sIGhhdmVOb25PdmVy
bGF5VmVydGljYWxTY3JvbGxiYXIgPSBpc05vbk92ZXJsYXlTY3JvbGxiYXIobV92QmFyLmdldCgp
KTsKKyAgICBib29sIHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQgPSBzaG91bGRQbGFj
ZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9
IHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworICAgIGJvb2wgc2Ny
b2xsYmFyc0F2b2lkQ29ybmVyID0gKGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciAm
JiBoYXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyKSB8fCAoaGF2ZVJlc2l6ZXIgJiYgKGhh
dmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciB8fCBoYXZlTm9uT3ZlcmxheVZlcnRpY2Fs
U2Nyb2xsYmFyKSk7CisKKyAgICBJbnRTaXplIGNvcm5lclNpemU7CisgICAgaWYgKHNjcm9sbGJh
cnNBdm9pZENvcm5lcikgeworICAgICAgICAvLyBJZiBvbmx5IG9uZSBzY3JvbGxiYXIgaXMgcHJl
c2VudCwgdGhlIGNvcm5lciBpcyBzcXVhcmUuCisgICAgICAgIGNvcm5lclNpemUgPSBJbnRTaXpl
IHsKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPyB2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoIDogaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCwKKyAgICAgICAgICAgIGhvcml6b250
YWxTY3JvbGxiYXJIZWlnaHQgPyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IDogdmVydGljYWxT
Y3JvbGxiYXJXaWR0aAorICAgICAgICB9OworICAgIH0KKworICAgIFJlbmRlckxheWVyOjpPdmVy
Zmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIGF1
dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7CisgICAgICAgIGJh
clJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCk7CisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQorICAgICAgICAgICAgICAgIGJh
clJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNp
emUud2lkdGgoKSwgMCk7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNj
cm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICBh
dXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgIGJhclJlY3Qu
c2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7CisKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7CisKKyAgICAgICAg
cmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKKyAgICB9CisKKyAgICBhdXRvIGNv
cm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAgIGlmIChwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRD
b3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJv
dHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9
OworICAgIH07CisKKyAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICByZXN1
bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKKworICAgIGlmIChoYXZl
UmVzaXplcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQorICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7CisgICAgICAgICAgICByZXN1bHQucmVzaXplciA9
IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0ludFNpemUgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyKSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVj
dHMoKTsKKworICAgIGlmICgmc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIHRvSW50U2l6ZShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IGlmICgmc2Nyb2xsYmFyID09IG1faEJhci5nZXQoKSkKKyAgICAgICAgcmV0dXJuIHRvSW50U2l6
ZShyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOworCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkp
IHsKKyAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNj
cm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJl
Y3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkpIHsKKyAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNjcm9sbFJl
Y3QgPSByZWN0OworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAg
ICBBU1NFUlQoYm94KTsKKyAgICAvLyBJZiB3ZSBhcmUgbm90IHlldCBpbnNlcnRlZCBpbnRvIHRo
ZSB0cmVlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGFpbnQuCisgICAgaWYgKCFib3gtPnBhcmVu
dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAg
IHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmxvY2F0aW9uKCkpOwor
ICAgIGVsc2UKKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlQnkocmVjdHMuaG9yaXpvbnRhbFNjcm9s
bGJhci5sb2NhdGlvbigpKTsKKworICAgIExheW91dFJlY3QgcmVwYWludFJlY3QgPSBzY3JvbGxS
ZWN0OworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKKyAgICBib3gt
PnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JTY3JvbGxDb3JuZXIo
KSkgeworICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Nj
cm9sbENvcm5lci0+cmVwYWludFJlY3RhbmdsZShyZWN0KTsKKyAgICBpZiAobV9yZXNpemVyKQor
ICAgICAgICBtX3Jlc2l6ZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Cit9CisKK3N0YXRpYyBi
b29sIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAg
cmV0dXJuIHNjcm9sbGJhciAmJiBzY3JvbGxiYXItPmlzSGlkZGVuQnlTdHlsZSgpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsYmFySGlkZGVuQnlTdHlsZShob3Jp
em9udGFsU2Nyb2xsYmFyKCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCkpIHsKKyAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVt
ZW50LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBpZiAoc2hhZG93Um9v
dC0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiAmcmVuZGVyZXI7Cit9CisKK1JlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CisgICAgQVNTRVJUKHJlbmRlcmVyRm9yU2Nyb2xs
YmFyKHJlbmRlcmVyKSk7CisgICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIpOworICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBp
czxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKSAmJiBkb3duY2FzdDxSZW5kZXJCb3g+KGFjdHVh
bFJlbmRlcmVyKS5zdHlsZSgpLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lkOjpTY3JvbGxiYXIpOwor
ICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVy
U2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoKnRoaXMsIG9yaWVudGF0aW9uLCBkb3du
Y2FzdDxSZW5kZXJCb3g+KGFjdHVhbFJlbmRlcmVyKS5lbGVtZW50KCkpOworICAgIGVsc2Ugewor
ICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigqdGhpcywg
b3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplOjpSZWd1bGFyKTsKKyAgICAgICAgZGlk
QWRkU2Nyb2xsYmFyKHdpZGdldC5nZXQoKSwgb3JpZW50YXRpb24pOworICAgICAgICBpZiAobV9s
YXllci5wYWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKKyAgICAgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKG1fbGF5ZXIucGFnZSgpLndoZWVs
RXZlbnRUZXN0TW9uaXRvcigpKTsKKyAgICB9CisgICAgcmVuZGVyZXIudmlldygpLmZyYW1lVmll
dygpLmFkZENoaWxkKCp3aWRnZXQpOworICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwo
KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZXN0cm95U2Nyb2xsYmFy
KFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQoreworICAgIFJlZlB0cjxTY3JvbGxi
YXI+JiBzY3JvbGxiYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbV9o
QmFyIDogbV92QmFyOworICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIXNjcm9sbGJhci0+aXNDdXN0b21TY3JvbGxiYXIoKSkKKyAgICAgICAgd2lsbFJlbW92
ZVNjcm9sbGJhcihzY3JvbGxiYXIuZ2V0KCksIG9yaWVudGF0aW9uKTsKKworICAgIHNjcm9sbGJh
ci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIHNjcm9sbGJhciA9IG51bGxwdHI7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihi
b29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFyID09IGhhc0hvcml6b250
YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGhhc1Njcm9sbGJhcikg
eworICAgICAgICBtX2hCYXIgPSBjcmVhdGVTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5kZXJlciA9IG1f
bGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0g
c2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5kaW5nRm9y
U3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGlj
IDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7
CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7CisjaWYgRU5B
QkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQor
CisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Ny
b2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9z
aXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+
c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNo
YW5nZWQoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNWZXJ0
aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcikKK3sKKyAgICBpZiAoaGFzU2Nyb2xsYmFy
ID09IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICho
YXNTY3JvbGxiYXIpIHsKKyAgICAgICAgbV92QmFyID0gY3JlYXRlU2Nyb2xsYmFyKFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVs
YXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJlci5zZXR0aW5ncygpLnJ1YmJl
ckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNp
dHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKKyAgICAgICAgU2Nyb2xsYWJsZUFy
ZWE6OnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShlbGFzdGljaXR5KTsKKyNlbmRpZgorICAg
IH0gZWxzZSB7CisgICAgICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOwor
I2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldFZl
cnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSk7CisjZW5kaWYKKyAg
ICB9CisKKyAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91
ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUg
b3Bwb3NpdGUgc2Nyb2xsYmFyJ3Mgc3R5bGUuCisgICAgaWYgKG1faEJhcikKKyAgICAgICAgbV9o
QmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICBpZiAobV92QmFyKQorICAgICAgICBtX3ZCYXItPnN0
eWxlQ2hhbmdlZCgpOworfQorCitTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAoreworICAgIGlmIChhdXRvKiBz
Y3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKKworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiAmcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci5pc1Njcm9sbGFibGVPclJ1YmJl
cmJhbmRhYmxlQm94KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgZm9yIChhdXRvKiBu
ZXh0TGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJh
bWVCb3VuZGFyaWVzOjpZZXMpOyBuZXh0TGF5ZXI7IG5leHRMYXllciA9IG5leHRMYXllci0+ZW5j
bG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsK
KyAgICAgICAgaWYgKG5leHRMYXllci0+cmVuZGVyZXIoKS5pc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlQm94KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0aWNhbFNj
cm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29u
c3QKK3sKKyAgICBpZiAoIW1fdkJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRyb2xz
KCkKKyAgICAgICAgfHwgKG1fdkJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2YW5j
eSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV92QmFyLT5zaG91bGRQYXJ0aWNp
cGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1f
dkJhci0+d2lkdGgoKTsKK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgcmVsZXZh
bmN5KSBjb25zdAoreworICAgIGlmICghbV9oQmFyCisgICAgICAgIHx8ICFzaG93c092ZXJmbG93
Q29udHJvbHMoKQorICAgICAgICB8fCAobV9oQmFyLT5pc092ZXJsYXlTY3JvbGxiYXIoKSAmJiAo
cmVsZXZhbmN5ID09IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplIHx8ICFtX2hCYXItPnNob3Vs
ZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gbV9oQmFyLT5oZWlnaHQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oQmFyIHx8
IG1fdkJhciB8fCBtX3Njcm9sbENvcm5lciB8fCBtX2xheWVyLnJlbmRlcmVyKCkuc3R5bGUoKS5y
ZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6cG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmIG9mZnNldEZyb21S
b290KQoreworICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgIW1fbGF5ZXIuY2FuUmVzaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9sYXllci5yZW5kZXJCb3goKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygp
OworCisgICAgaWYgKG1fdkJhcikgeworICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5t
b3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMu
dmVydGljYWxTY3JvbGxiYXIpOworICAgIH0KKworICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAg
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKKyAgICAgICAg
bV9oQmFyLT5zZXRGcmFtZVJlY3QocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgfQor
CisgICAgaWYgKG1fc2Nyb2xsQ29ybmVyKQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0RnJh
bWVSZWN0KHJlY3RzLnNjcm9sbENvcm5lcik7CisKKyAgICBpZiAobV9yZXNpemVyKQorICAgICAg
ICBtX3Jlc2l6ZXItPnNldEZyYW1lUmVjdChyZWN0cy5yZXNpemVyKTsKK30KKworTGF5b3V0VW5p
dCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCgpIGNvbnN0Cit7CisgICAg
UmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3Zl
cmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldy
aXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC55KCk7Cit9
CisKK0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20o
KSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAg
ICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAg
ICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVy
Zmxvd1JlY3QubWF4WSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93TGVmdCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVy
LnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7
CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94
KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQo
Ym94KTsKKworICAgIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5ID0gZmFsc2U7CisKKyAgICBtX3Nj
cm9sbFdpZHRoID0gcm91bmRUb0ludChvdmVyZmxvd1JpZ2h0KCkgLSBvdmVyZmxvd0xlZnQoKSk7
CisgICAgbV9zY3JvbGxIZWlnaHQgPSByb3VuZFRvSW50KG92ZXJmbG93Qm90dG9tKCkgLSBvdmVy
Zmxvd1RvcCgpKTsKKworICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0lu
dChvdmVyZmxvd0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKKyAgICBpZiAoc2hvdWxkUGxh
Y2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQorICAgICAgICBzY3JvbGxhYmxlTGVm
dE92ZXJmbG93IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYWJs
ZVRvcE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3Ao
KSk7CisgICAgc2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93
LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93KSk7CisKKyAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbXB1dGVIYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkKK3sKKyAgICBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgPSBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkg
JiYgKGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpo
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgbV9sYXllci5yZW5kZXJCb3goKS0+c2Nyb2xsc092ZXJm
bG93WCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzVmVydGljYWxPdmVy
ZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpOworCisgICAgcmV0
dXJuIHNjcm9sbFdpZHRoKCkgPiByb3VuZFRvSW50KG1fbGF5ZXIucmVuZGVyQm94KCktPmNsaWVu
dFdpZHRoKCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1ZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdAoreworICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkpOworCisgICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChtX2xheWVyLnJl
bmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSk7Cit9CisKK3N0YXRpYyBib29sIHN0eWxlUmVxdWly
ZXNTY3JvbGxiYXIoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBheGlzKQoreworICAgIE92ZXJmbG93IG92ZXJmbG93ID0gYXhpcyA9PSBTY3JvbGxiYXJPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbFNjcm9sbGJhciA/IHN0eWxlLm92ZXJmbG93WCgpIDogc3R5bGUu
b3ZlcmZsb3dZKCk7CisgICAgYm9vbCBvdmVyZmxvd1Njcm9sbEFjdHNMaWtlQXV0byA9IG92ZXJm
bG93ID09IE92ZXJmbG93OjpTY3JvbGwgJiYgIXN0eWxlLmhhc1BzZXVkb1N0eWxlKFBzZXVkb0lk
OjpTY3JvbGxiYXIpICYmIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnVzZXNPdmVybGF5U2Nyb2xs
YmFycygpOworICAgIHJldHVybiBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFvdmVy
Zmxvd1Njcm9sbEFjdHNMaWtlQXV0bzsKK30KKworc3RhdGljIGJvb2wgc3R5bGVEZWZpbmVzQXV0
b21hdGljU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFy
T3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0
eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBv
dmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1
ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgb3Zl
cmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCkKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7CisKKyAgICAvLyBMaXN0
IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlz
dGJveFBhcnQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJm
bG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJmbG93KCk7CisgICAgYm9vbCBoYXNWZXJ0aWNh
bE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxPdmVyZmxvdygpOworCisgICAgLy8gSWYgb3Zl
cmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBv
ciBkaXNhYmxlLgorICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBI
b3Jpem9udGFsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKGhhc0hvcml6
b250YWxPdmVyZmxvdyk7CisgICAgaWYgKG1fdkJhciAmJiBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFy
KHJlbmRlcmVyLnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkKKyAgICAgICAgbV92QmFyLT5z
ZXRFbmFibGVkKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgLy8gU2Nyb2xsYmFycyB3aXRo
IGF1dG8gYmVoYXZpb3IgbWF5IG5lZWQgdG8gbGF5IG91dCBhZ2FpbiBpZiBzY3JvbGxiYXJzIGdv
dCBhZGRlZCBvciByZW1vdmVkLgorICAgIGJvb2wgYXV0b0hvcml6b250YWxTY3JvbGxCYXJDaGFu
Z2VkID0gYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpICYmICho
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgIT0gaGFzSG9yaXpvbnRhbE92ZXJmbG93KTsKKyAgICBi
b29sIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQgPSBib3gtPmhhc1ZlcnRpY2FsU2Nyb2xs
YmFyV2l0aEF1dG9CZWhhdmlvcigpICYmIChoYXNWZXJ0aWNhbFNjcm9sbGJhcigpICE9IGhhc1Zl
cnRpY2FsT3ZlcmZsb3cpOworCisgICAgaWYgKGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdl
ZCB8fCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKSB7CisgICAgICAgIGlmIChib3gtPmhh
c0hvcml6b250YWxTY3JvbGxiYXJXaXRoQXV0b0JlaGF2aW9yKCkpCisgICAgICAgICAgICBzZXRI
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgICAgIGlm
IChib3gtPmhhc1ZlcnRpY2FsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAg
ICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoaGFzVmVydGljYWxPdmVyZmxvdyk7CisKKyAgICAg
ICAgbV9sYXllci51cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOworCisgICAgICAgIHJlbmRlcmVy
LnJlcGFpbnQoKTsKKworICAgICAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlci5zdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJm
bG93OjpBdXRvKSB7CisgICAgICAgICAgICBpZiAoIW1faW5PdmVyZmxvd1JlbGF5b3V0KSB7Cisg
ICAgICAgICAgICAgICAgbV9pbk92ZXJmbG93UmVsYXlvdXQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJlbmRlcmVyLnNldE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAg
UmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgYmxvY2suc2Nyb2xsYmFyc0NoYW5nZWQoYXV0b0hvcml6b250YWxT
Y3JvbGxCYXJDaGFuZ2VkLCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkKTsKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2subGF5b3V0QmxvY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmxheW91dCgpOworICAgICAgICAgICAg
ICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyLnBhcmVudCgpOwor
ICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC0+aXNGbGV4aWJsZUJveCgpICYmIHJlbmRlcmVy
LmlzQm94KCkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJGbGV4aWJsZUJveD4ocGFyZW50
KS0+Y2xlYXJDYWNoZWRNYWluU2l6ZUZvckNoaWxkKCptX2xheWVyLnJlbmRlckJveCgpKTsKKyAg
ICB9CisKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCku
CisgICAgaWYgKG1faEJhcikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSByb3VuZFRvSW50
KGJveC0+Y2xpZW50V2lkdGgoKSk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IFNjcm9sbGJhcjo6
cGFnZVN0ZXAoY2xpZW50V2lkdGgpOworICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX2hCYXItPnNldFBy
b3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOworICAgIH0KKyAgICBpZiAobV92
QmFyKSB7CisgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+Y2xpZW50
SGVpZ2h0KCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VTdGVwKGNs
aWVudEhlaWdodCk7CisgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CisgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRIZWlnaHQsIG1fc2Nyb2xsSGVpZ2h0KTsKKyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKKy8vIFRoaXMgaXMgY2FsbGVkIGZyb20gbGF5
b3V0IGNvZGUgKGJlZm9yZSB1cGRhdGVMYXllclBvc2l0aW9ucykuCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7CisgICAgU2Ny
b2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7CisKKyAgICBj
b21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5n
TGF5ZXIoKTsKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgLy8gRklYTUU6IEVu
c3VyZSB0aGF0IG9mZnNldHMgYXJlIGFsc28gdXBkYXRlZCBpbiBjYXNlIG9mIHByb2dyYW1tYXRp
YyBzdHlsZSBjaGFuZ2VzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzU5NjQKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKKyAgICBp
ZiAoIWJveC0+aXNIVE1MTWFycXVlZSgpICYmICFpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgJiYg
IWlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSkgeworICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNl
IHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2Ug
bmVlZAorICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBt
YXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KKyAgICAgICAgU2Nyb2xsT2Zmc2V0IGNs
YW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSk7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgbG9va3Mgd3Jv
bmcuIFRoZSBjYXJldCBhZGp1c3QgbW9kZSBzaG91bGQgb25seSBiZSBlbmFibGVkIG9uIGVkaXRp
bmcgcmVsYXRlZCBlbnRyeSBwb2ludHMuCisgICAgICAgIC8vIFRoaXMgY29kZSB3YXMgYWRkZWQg
dG8gZml4IGFuIGlzc3VlIHdoZXJlIHRoZSB0ZXh0IGluc2VydGlvbiBwb2ludCB3b3VsZCBhbHdh
eXMgYmUgZHJhd24gb24gdGhlIHJpZ2h0IGVkZ2UKKyAgICAgICAgLy8gb2YgYSB0ZXh0IGZpZWxk
IHdob3NlIGNvbnRlbnQgb3ZlcmZsb3dlZCBpdHMgYm91bmRzLiBTZWUgPHJkYXI6Ly9wcm9ibGVt
LzE1NTc5Nzk3PiBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcodHJ1ZSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNsYW1wZWRTY3JvbGxP
ZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgICAgICBzY3JvbGxUb09mZnNldChjbGFt
cGVkU2Nyb2xsT2Zmc2V0KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIHNl
dEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CisjZW5kaWYKKyAgICB9CisK
KyAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKTsKKworICAgIGlmIChvcmlnaW5hbFNj
cm9sbE9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKEludFBvaW50KHNjcm9sbE9mZnNldCgpKSk7CisKKyAgICBpZiAobV9sYXll
ci5pc0NvbXBvc2l0ZWQoKSkgeworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdH
ZW9tZXRyeVVwZGF0ZSgpOworICAgICAgICBtX2xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdDb25m
aWd1cmF0aW9uVXBkYXRlKCk7CisgICAgfQorCisgICAgaWYgKGNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSkKKyAgICAgICAgbV9sYXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1Vw
ZGF0ZSgpOworCisgICAgdXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3Qg
SW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKworICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVy
c2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMu
dmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3Qp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2Vj
dHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8vIE9uIGlPUywg
dGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCisgICAgcmV0dXJuICFj
YW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmZsb3dDb250cm9s
cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykK
K3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIG5vIG92ZXJmbG93LgorICAg
IGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIu
aGFzT3ZlcmZsb3dDbGlwKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE92ZXJsYXkgc2Nyb2xs
YmFycyBwYWludCBpbiBhIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgc28gdGhh
dCB0aGV5IHdpbGwgcGFpbnQKKyAgICAvLyBvbiB0b3Agb2YgZXZlcnl0aGluZyBlbHNlLiBJZiB0
aGlzIGlzIHRoZSBub3JtYWwgcGFpbnRpbmcgcGFzcywgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMK
KyAgICAvLyB3aWxsIGJlIGZhbHNlLCBhbmQgd2Ugc2hvdWxkIGp1c3QgdGVsbCB0aGUgcm9vdCBs
YXllciB0aGF0IHRoZXJlIGFyZSBvdmVybGF5IHNjcm9sbGJhcnMKKyAgICAvLyB0aGF0IG5lZWQg
dG8gYmUgcGFpbnRlZC4gVGhhdCB3aWxsIGNhdXNlIHRoZSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRo
ZSBsYXllciB0cmVlIHRvIHJ1biwKKyAgICAvLyBhbmQgd2UnbGwgcGFpbnQgdGhlIHNjcm9sbGJh
cnMgdGhlbi4gSW4gdGhlIG1lYW50aW1lLCBjYWNoZSB0eCBhbmQgdHkgc28gdGhhdCB0aGUKKyAg
ICAvLyBzZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUg
dG8gZ2V0IGl0IHJpZ2h0LgorICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWlu
dGluZ092ZXJsYXlDb250cm9scykgeworICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJP
ZmZzZXQgPSBwYWludE9mZnNldDsKKworICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8g
ZG8gdGhlIHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgor
ICAgICAgICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwg
KG1fdkJhciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKKyAgICAg
ICAgbG9jYWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7CisgICAgICAgIGlmICghb3Zl
cmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFJlbmRlckxheWVyKiBwYWludGluZ1Jvb3QgPSBtX2xheWVyLmVu
Y2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKKyAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCisg
ICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5kZXJlci52aWV3KCkubGF5ZXIoKTsKKworICAg
ICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gcGFpbnRpbmdSb290LT5zY3JvbGxhYmxl
QXJlYSgpKQorICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRDb250YWluc0RpcnR5T3Zl
cmxheVNjcm9sbGJhcnModHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBU
aGlzIGNoZWNrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHBhaW50aW5nIGN1c3RvbSBDU1Mgc2Nyb2xs
YmFycyB0d2ljZS4KKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJvbHMgJiYgIWhhc092ZXJs
YXlTY3JvbGxiYXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEludFBvaW50IGFkanVzdGVk
UGFpbnRPZmZzZXQgPSBwYWludE9mZnNldDsKKyAgICBpZiAocGFpbnRpbmdPdmVybGF5Q29udHJv
bHMpCisgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQgPSBtX2NhY2hlZE92ZXJsYXlTY3JvbGxi
YXJPZmZzZXQ7CisKKyAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3Nh
cnkuIFdlIG5vcm1hbGx5IG1vdmUgYW5kIHJlc2l6ZSB3aWRnZXRzIGR1cmluZyBsYXlvdXQsIGJ1
dCBzb21ldGltZXMKKyAgICAvLyB3aWRnZXRzIGNhbiBtb3ZlIHdpdGhvdXQgbGF5b3V0IG9jY3Vy
cmluZyAobW9zdCBub3RhYmx5IHdoZW4geW91IHNjcm9sbCBhIGRvY3VtZW50IHRoYXQKKyAgICAv
LyBjb250YWlucyBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzKS4KKyAgICBwb3NpdGlvbk92ZXJm
bG93Q29udHJvbHModG9JbnRTaXplKGFkanVzdGVkUGFpbnRPZmZzZXQpKTsKKworICAgIC8vIE5v
dyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwg
cGFpbnQgdGhlbS4KKyAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxi
YXIoKSkKKyAgICAgICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKKyAgICBp
ZiAobV92QmFyICYmICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1fdkJh
ci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisKKyAgICBpZiAobGF5ZXJGb3JTY3JvbGxD
b3JuZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgZmlsbCBvdXIgc2Nyb2xsIGNv
cm5lciB3aXRoIHdoaXRlIGlmIHdlIGhhdmUgYSBzY3JvbGxiYXIgdGhhdCBkb2Vzbid0IHJ1biBh
bGwgdGhlIHdheSB1cCB0byB0aGUKKyAgICAvLyBlZGdlIG9mIHRoZSBib3guCisgICAgcGFpbnRT
Y3JvbGxDb3JuZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7CisK
KyAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0
aGUgc2Nyb2xsIGNvcm5lci4KKyAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWlu
dE9mZnNldCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgSW50
UmVjdCBhYnNSZWN0ID0gc2Nyb2xsQ29ybmVyUmVjdCgpOworICAgIGFic1JlY3QubW92ZUJ5KHBh
aW50T2Zmc2V0KTsKKyAgICBpZiAoIWFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
KCkpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikgeworICAgICAgICBtX3Njcm9sbENv
cm5lci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IGEgY29y
bmVyIGlmIHdlIGhhdmUgb3ZlcmxheSBzY3JvbGxiYXJzLCBzaW5jZSB3ZSBuZWVkCisgICAgLy8g
dG8gc2VlIHdoYXQgaXMgYmVoaW5kIGl0LgorICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSkKKyAgICAgICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkucGFpbnRTY3JvbGxDb3JuZXIoY29u
dGV4dCwgYWJzUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZHJh
d1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5
b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xh
eWVyLnJlbmRlcmVyKCk7CisgICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3JuZXJJbWFnZTsKKyAg
ICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7CisgICAgaWYgKHJlbmRlcmVyLmRvY3VtZW50
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSA+PSAyKSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlSGlSZXMoJkltYWdlOjpsb2FkUGxhdGZvcm1S
ZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXJAMngiKS5sZWFrUmVmKCkpOworICAgICAgICBy
ZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlSGlSZXM7CisgICAgICAgIGNvcm5l
clJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICAgICAgY29ybmVy
UmVzaXplclNpemUuc2NhbGUoMC41Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VMb1JlcygmSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpLmxlYWtSZWYoKSk7CisgICAg
ICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VMb1JlczsKKyAgICAgICAg
Y29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAg
ICAgICAgY29udGV4dC5zYXZlKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKHJlc2l6ZXJD
b3JuZXJSZWN0LngoKSArIGNvcm5lclJlc2l6ZXJTaXplLndpZHRoKCksIHJlc2l6ZXJDb3JuZXJS
ZWN0LnkoKSArIHJlc2l6ZXJDb3JuZXJSZWN0LmhlaWdodCgpIC0gY29ybmVyUmVzaXplclNpemUu
aGVpZ2h0KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgtMS4wLCAxLjApKTsK
KyAgICAgICAgaWYgKHJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb3JuZXJS
ZXNpemVyU2l6ZSkpOworICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRS
ZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6
ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgaW1hZ2VS
ZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFJlc2l6ZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBt
X2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkucmVzaXplKCkgPT0g
UmVzaXplOjpOb25lKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBMYXlvdXRSZWN0IHJlc2l6ZXJBYnNSZWN0ID0gcmVj
dHMucmVzaXplcjsKKyAgICByZXNpemVyQWJzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQpOworICAg
IGlmICghcmVzaXplckFic1JlY3QuaW50ZXJzZWN0cyhkYW1hZ2VSZWN0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKKyAg
ICAgICAgdXBkYXRlUmVzaXplclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250
ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0
KTsKKworICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxp
bmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgorICAgIC8vIENsaXBwaW5n
IHdpbGwgZXhjbHVkZSB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyBvZiB0aGlzIGZyYW1lLgor
ICAgIGlmICghaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAobV92QmFyIHx8IG1faEJhcikpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwor
ICAgICAgICBjb250ZXh0LmNsaXAocmVzaXplckFic1JlY3QpOworICAgICAgICBMYXlvdXRSZWN0
IGxhcmdlckNvcm5lciA9IHJlc2l6ZXJBYnNSZWN0OworICAgICAgICBsYXJnZXJDb3JuZXIuc2V0
U2l6ZShMYXlvdXRTaXplKGxhcmdlckNvcm5lci53aWR0aCgpICsgMV9sdSwgbGFyZ2VyQ29ybmVy
LmhlaWdodCgpICsgMV9sdSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKFNSR0JB
PHVpbnQ4X3Q+IHsgMjE3LCAyMTcsIDIxNyB9KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VU
aGlja25lc3MoMS4wZik7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjp0cmFu
c3BhcmVudEJsYWNrKTsKKyAgICAgICAgY29udGV4dC5kcmF3UmVjdChzbmFwcGVkSW50UmVjdChs
YXJnZXJDb3JuZXIpKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBJ
bnRQb2ludCYgbG9jYWxQb2ludCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFt
X2xheWVyLmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHJl
Y3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBJbnRSZWN0IHJlc2l6ZUNvbnRy
b2xSZWN0OworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZSkgeworICAgICAgICBp
ZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0IHRlc3QgdGhlIG1f
c2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVzdWx0LgorICAgIGlm
IChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSB7Cisg
ICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkg
eworICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9oQmFyICYm
IG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAgICBpZiAo
cmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhsb2NhbFBvaW50KSkgeworICAgICAg
ICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQor
eworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
QWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5wYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bGF5ZXIucmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkubGFzdEtub3duTW91c2VQb3NpdGlv
bkluVmlldygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzSGFuZGxp
bmdXaGVlbEV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS51c2VEYXJrQXBwZWFyYW5jZSgpOworfQorCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlU25hcE9mZnNldHMoKQoreworICAgIC8vIEZJWE1FOiBFeHRlbmQgc3VwcG9ydCBi
ZXlvbmQgSFRNTEVsZW1lbnRzLgorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG1fbGF5ZXIuZW5j
bG9zaW5nRWxlbWVudCgpKSB8fCAhbV9sYXllci5lbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJv
eCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIuZW5j
bG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKTsKKyAgICB1cGRhdGVTbmFwT2Zmc2V0c0ZvclNj
cm9sbGFibGVBcmVhKCp0aGlzLCAqYm94LCBib3gtPnN0eWxlKCksIGJveC0+cGFkZGluZ0JveFJl
Y3QoKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNTY3JvbGxTbmFw
SW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
bV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlE
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8qIHNj
cm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsQW5pbWF0b3ItPmlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50
T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRS
ZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvciwg
UmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICghbV9jb250YWluc0Rp
cnR5T3ZlcmxheVNjcm9sbGJhcnMpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckxheWVy
OjpMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8oJm1fbGF5ZXIsIGVuY2xvc2luZ0ludFJl
Y3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3IsIExheW91dFNpemUoKSwgc3VidHJlZVBhaW50
Um9vdCk7CisgICAgbV9sYXllci5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUmVu
ZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzKTsKKwor
ICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25z
dCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVudHMsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
aGl0VGVzdExvY2F0aW9uLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdAorewor
ICAgIGlmIChsYXllckZyYWdtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGF1dG8gYm9y
ZGVyQm94UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIp
LmJvcmRlckJveFJlY3QoKSk7CisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOworCisgICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25zdCBJbnRSZWN0
JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsKKyAgICAgICAg
aWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAg
ICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJlY3QubWluWE1h
eFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkgLSBvZmZzZXRG
cm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQoKSB9LCByZXNp
emVyUmVjdC5zaXplKCkgfTsKKyAgICAgICAgfQorICAgICAgICBJbnRTaXplIG9mZnNldEZyb21C
b3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0
Lm1heFhNYXhZQ29ybmVyKCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJhZ21lbnRCb3Vu
ZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJlc2l6ZXJSZWN0
LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgfTsKKworICAgIGZvciAoaW50IGkg
PSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBjb25z
dCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkpOworICAgICAg
ICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdtZW50KHNuYXBw
ZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7CisgICAgICAg
IGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RMb2NhdGlvbikg
JiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlvbi5yb3VuZGVk
UG9pbnQoKSkpIHsKKyAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5b3V0UG9pbnQo
aGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIoKSA6IG51bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIHJldHVy
biBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXIuYmFja2luZygpID8gbV9sYXllci5iYWNraW5nKCktPmxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkgOiBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxz
T3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKK3sKKyAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3gg
Y29uY2VwdC4KKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAg
aWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIExpc3QgYm94IHBhcnRzIGhhbmRs
ZSB0aGUgc2Nyb2xsYmFycyBieSB0aGVtc2VsdmVzIHNvIHdlIGhhdmUgbm90aGluZyB0byBkby4K
KyAgICBpZiAoYm94LT5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgT3ZlcmZsb3cgb3ZlcmZsb3dYID0gYm94LT5zdHlsZSgpLm92ZXJm
bG93WCgpOworICAgIE92ZXJmbG93IG92ZXJmbG93WSA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1ko
KTsKKworICAgIC8vIFRvIGF2b2lkIGRvaW5nIGEgcmVsYXlvdXQgaW4gdXBkYXRlU2Nyb2xsYmFy
c0FmdGVyTGF5b3V0LCB3ZSB0cnkgdG8ga2VlcCBhbnkgYXV0b21hdGljIHNjcm9sbGJhciB0aGF0
IHdhcyBhbHJlYWR5IHByZXNlbnQuCisgICAgYm9vbCBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIg
PSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaG9yaXpvbnRhbFNjcm9sbGJhcigpICYmIHN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRh
bFNjcm9sbGJhcikpOworICAgIGJvb2wgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciA9IGJveC0+aGFz
T3ZlcmZsb3dDbGlwKCkgJiYgKCh2ZXJ0aWNhbFNjcm9sbGJhcigpICYmIHN0eWxlRGVmaW5lc0F1
dG9tYXRpY1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSkgfHwgc3R5
bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIFZlcnRpY2FsU2Nyb2xsYmFyKSk7Cisg
ICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihuZWVkc0hvcml6b250YWxTY3JvbGxiYXIpOwor
ICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKG5lZWRzVmVydGljYWxTY3JvbGxiYXIpOworCisg
ICAgLy8gV2l0aCBub24tb3ZlcmxheSBvdmVyZmxvdzpzY3JvbGwsIHNjcm9sbGJhcnMgYXJlIGFs
d2F5cyB2aXNpYmxlIGJ1dCBtYXkgYmUgZGlzYWJsZWQuCisgICAgLy8gV2hlbiBzd2l0Y2hpbmcg
dG8gYW5vdGhlciB2YWx1ZSwgd2UgbmVlZCB0byByZS1lbmFibGUgdGhlbSAoc2VlIGJ1ZyAxMTk4
NSkuCisgICAgaWYgKG1faEJhciAmJiBuZWVkc0hvcml6b250YWxTY3JvbGxiYXIgJiYgb2xkU3R5
bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WCgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZs
b3dYICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZCh0cnVl
KTsKKworICAgIGlmIChtX3ZCYXIgJiYgbmVlZHNWZXJ0aWNhbFNjcm9sbGJhciAmJiBvbGRTdHls
ZSAmJiBvbGRTdHlsZS0+b3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxv
d1kgIT0gT3ZlcmZsb3c6OlNjcm9sbCkKKyAgICAgICAgbV92QmFyLT5zZXRFbmFibGVkKHRydWUp
OworCisgICAgaWYgKCFtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKKyAgICAgICAgdXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Nj
cm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpCit7Cisg
ICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgRnJhbWVWaWV3JiBm
cmFtZVZpZXcgPSByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCk7CisKKyAgICBib29sIGlzVmlz
aWJsZVRvSGl0VGVzdCA9IHJlbmRlcmVyLnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKyAgICBpZiAo
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5mcmFtZSgpLm93bmVyRWxl
bWVudCgpKQorICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3duZXItPnJlbmRlcmVyKCkg
JiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3RpbmcoKTsKKworICAgIGJvb2wg
aXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9IaXRUZXN0OworICAgIGJv
b2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYSA9PSBmcmFtZVZpZXcuY29udGFpbnNTY3JvbGxhYmxlQXJlYSh0aGlzKSk7CisK
KyAgICBpZiAoaXNTY3JvbGxhYmxlKSB7CisgICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xs
YWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNj
cm9sbGFibGVBcmVhKHRoaXMpOworICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEgPSB0cnVlOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxh
YmxlQXJlYSkgeworICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3Jv
bGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBm
YWxzZTsKKyAgICB9CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAgICBpZiAoYWRk
ZWRPclJlbW92ZWQpIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29tcG9z
aXRlZFNjcm9sbGluZygpKQorICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5l
ckZvclNjcm9sbGluZygpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIG9ubHkg
bmVlZCB0aGUgdG91Y2ggbGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Nyb2xs
aW5nLCBzbyBpZiB3ZSBiZWNhbWUKKyAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1vdmUg
b3Vyc2VsdmVzIGFzIGEgdG91Y2ggZXZlbnQgbGlzdGVuZXIuCisgICAgICAgICAgICB1bnJlZ2lz
dGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgfQorICAgIH0K
KyNlbHNlCisgICAgVU5VU0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKKyNlbmRpZgorfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxl
KCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBSZW5k
ZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVy
KTsKKyAgICBhdXRvIGNvcm5lciA9IHJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFs
UmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29y
bmVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOworCisgICAgaWYgKCFj
b3JuZXIpIHsKKyAgICAgICAgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQYXJ0PihyZW5kZXJlci5kb2N1bWVu
dCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hv
dWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNl
dFBhcmVudCgmcmVuZGVyZXIpOworICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0
eWxlKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZN
b3ZlKCpjb3JuZXIpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVh
clNjcm9sbENvcm5lcigpCit7CisgICAgaWYgKCFtX3Njcm9sbENvcm5lcikKKyAgICAgICAgcmV0
dXJuOworICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVsbHB0cik7CisgICAgbV9zY3Jv
bGxDb3JuZXIgPSBudWxscHRyOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVJlc2l6ZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJl
bmRlcmVyKCk7CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZv
clNjcm9sbGJhcihyZW5kZXJlcik7CisgICAgYXV0byByZXNpemVyID0gcmVuZGVyZXIuaGFzT3Zl
cmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBz
ZXVkb0lkOjpSZXNpemVyIH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwor
CisgICAgaWYgKCFyZXNpemVyKSB7CisgICAgICAgIGNsZWFyUmVzaXplcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc2l6ZXIpIHsKKyAgICAgICAgbV9yZXNpemVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQo
KSwgV1RGTW92ZSgqcmVzaXplcikpOworICAgICAgICAvLyBGSVhNRTogQSByZW5kZXJlciBzaG91
bGQgYmUgYSBjaGlsZCBvZiBpdHMgcGFyZW50IQorICAgICAgICBtX3Jlc2l6ZXItPnNldFBhcmVu
dCgmcmVuZGVyZXIpOworICAgICAgICBtX3Jlc2l6ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAg
IH0gZWxzZQorICAgICAgICBtX3Jlc2l6ZXItPnNldFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGVhclJlc2l6ZXIoKQorewor
ICAgIGlmICghbV9yZXNpemVyKQorICAgICAgICByZXR1cm47CisgICAgbV9yZXNpemVyLT5zZXRQ
YXJlbnQobnVsbHB0cik7CisgICAgbV9yZXNpemVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKQor
eworICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAg
aWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKKyAgICB1cGRhdGVT
Y3JvbGxDb3JuZXJTdHlsZSgpOworICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworfQorCisjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQor
eworICAgIC8vIElmIHdlIGhhdmUgYWNjZWxlcmF0ZWQgc2Nyb2xsaW5nLCBsZXQgdGhlIHNjcm9s
bGluZyBiZSBoYW5kbGVkIG91dHNpZGUgb2YgV2ViS2l0LgorICAgIGlmIChoYXNDb21wb3NpdGVk
U2Nyb2xsYWJsZU92ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVy
Rm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSB8fCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVyZXIu
ZG9jdW1lbnQoKS5hZGRUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgpKTsKKyAg
ICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IHRydWU7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVu
dExpc3RlbmVyRm9yU2Nyb2xsaW5nKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXI7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgIW1fcmVnaXN0ZXJlZEFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW5kZXJlci5kb2N1bWVudCgpLnJlbW92ZVRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVt
ZW50KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
ID0gZmFsc2U7Cit9CisjZW5kaWYgLy8gRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisKKy8vIEZJ
WE1FOiB0aGlzIGlzIG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9sYXllci5pc0NvbXBvc2l0ZWQoKSAmJiBtX2xheWVyLmJhY2tpbmco
KS0+aGFzU2Nyb2xsaW5nTGF5ZXIoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWRqdXN0ZWRT
Y3JvbGxEZWx0YShpbnQgYmVnaW5uaW5nRGVsdGEpCit7CisgICAgLy8gVGhpcyBpbXBsZW1lbnRp
b24gbWF0Y2hlcyBGaXJlZm94J3MuCisgICAgLy8gaHR0cDovL214ci5tb3ppbGxhLm9yZy9maXJl
Zm94L3NvdXJjZS90b29sa2l0L2NvbnRlbnQvd2lkZ2V0cy9icm93c2VyLnhtbCM4NTYuCisgICAg
Y29uc3QgaW50IHNwZWVkUmVkdWNlciA9IDEyOworCisgICAgaW50IGFkanVzdGVkRGVsdGEgPSBi
ZWdpbm5pbmdEZWx0YSAvIHNwZWVkUmVkdWNlcjsKKyAgICBpZiAoYWRqdXN0ZWREZWx0YSA+IDEp
CisgICAgICAgIGFkanVzdGVkRGVsdGEgPSBzdGF0aWNfY2FzdDxpbnQ+KGFkanVzdGVkRGVsdGEg
KiBzcXJ0KHN0YXRpY19jYXN0PGRvdWJsZT4oYWRqdXN0ZWREZWx0YSkpKSAtIDE7CisgICAgZWxz
ZSBpZiAoYWRqdXN0ZWREZWx0YSA8IC0xKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGlj
X2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KC1hZGp1
c3RlZERlbHRhKSkpICsgMTsKKworICAgIHJldHVybiBhZGp1c3RlZERlbHRhOworfQorCitzdGF0
aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0
YSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRo
KCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50
JiBzb3VyY2VQb2ludCkKK3sKKyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uID0g
bV9sYXllci5yZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91c2VQ
b3NpdGlvbigpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBt
b3VzZSBwb3NpdGlvbiBpcyBvdXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0
IG9mIHRoZSB3aW5kb3csIHRoZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50CisgICAgc3RhdGljIElu
dFBvaW50IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBpZiAobGFzdEtub3duTW91c2VQb3Np
dGlvbi54KCkgPCAwIHx8IGxhc3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKKyAgICAgICAg
bGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKKyAgICBlbHNl
CisgICAgICAgIHByZXZpb3VzTW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247
CisKKyAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBv
aW50OworCisgICAgaWYgKGFicyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNj
cm9sbFJhZGl1cykgLy8gYXQgdGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNv
bgorICAgICAgICBkZWx0YS5zZXRXaWR0aCgwKTsKKyAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgp
KSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykKKyAgICAgICAgZGVsdGEuc2V0SGVp
Z2h0KDApOworCisgICAgc2Nyb2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRl
bHRhKSk7Cit9CisKK09wdGlvbmFsPExheW91dFJlY3Q+IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbFBvc2l0aW9uKFNjcm9sbEJlaGF2aW9yIGJlaGF2aW9yLCBjb25zdCBM
YXlvdXRSZWN0JiByZXZlYWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3Qp
Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIuYWxsb3dzQ3VycmVudFNjcm9sbCgpKTsKKworICAgIFJl
bmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94KTsKKwor
ICAgIGF1dG8gc2hvdWxkVXNlQW5pbWF0ZWRTY3JvbGwgPSBbdGhpc10oRWxlbWVudCogZWxlbWVu
dCwgU2Nyb2xsQmVoYXZpb3IgYmVoYXZpb3IpCisgICAgeworICAgICAgICBib29sIHVzZUFuaW1h
dGVkU2Nyb2xsaW5nID0gIW1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigp
LmF1dG9zY3JvbGxJblByb2dyZXNzKCkKKyAgICAgICAgICAgICYmIGVsZW1lbnQgJiYgdXNlU21v
b3RoU2Nyb2xsaW5nKGJlaGF2aW9yLCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIHVzZUFuaW1h
dGVkU2Nyb2xsaW5nID8gQW5pbWF0ZWRTY3JvbGw6OlllcyA6IEFuaW1hdGVkU2Nyb2xsOjpObzsK
KyAgICB9OworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZl
YWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0gc2Ny
b2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xsQmVo
YXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBvbGRT
Y3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgYXV0byBhbmltYXRlZCA9IHNo
b3VsZFVzZUFuaW1hdGVkU2Nyb2xsKGJveC0+ZWxlbWVudCgpLCBiZWhhdmlvcik7CisgICAgICAg
IHNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChjbGFtcGVkU2Nyb2xs
T2Zmc2V0KSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6Q2xhbXBl
ZCwgYW5pbWF0ZWQpOworICAgICAgICBJbnRTaXplIHNjcm9sbE9mZnNldERpZmZlcmVuY2UgPSBj
bGFtcGVkU2Nyb2xsT2Zmc2V0IC0gb2xkU2Nyb2xsT2Zmc2V0OworCisgICAgICAgIGF1dG8gbG9j
YWxFeHBvc2VSZWN0U2Nyb2xsZWQgPSBsb2NhbEV4cG9zZVJlY3Q7CisgICAgICAgIGxvY2FsRXhw
b3NlUmVjdFNjcm9sbGVkLm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVuY2UpOworICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0
UmVjdChsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0Jv
eCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYg
ZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5p
c1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAg
ICBpZiAocmVuZGVyZXIucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9
ICFyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAg
IGlmIChyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1w
KSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAg
ICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7
CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0
aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUg
cmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVy
LnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxl
IGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIg
PSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9s
bEJ5UmVjdXJzaXZlbHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZW5kZXJlci5mcmFtZSgpLmV2ZW50SGFuZGxlcigp
LnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVyZXIgdGhh
dCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKKyAgICAgICAg
Ly8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEgZG9jdW1l
bnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KKyAgICAgICAgcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLnNjcm9sbEJ5KGRlbHRhKTsKKyAgICAgICAgaWYgKHNjcm9sbGVkQXJlYSkKKyAg
ICAgICAgICAgICpzY3JvbGxlZEFyZWEgPSAmcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOwor
CisgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRv
IHdlIHdhbnQgdG8gdHJ5IGxvb2tpbmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/CisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODIzNworICAg
IH0KK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKQoreworICAgIEFTU0VSVCgmbV9sYXllciA9PSBtX2xh
eWVyLnJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpOworCisgICAgTE9HKFNjcm9sbGluZywgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVu
dFNjcm9sbCIpOworCisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNm
b3Jtcyk7CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9t
ZXRyeU1hcCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5
ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Nyb2xsKCkKK3sKKyAgICBSZW5kZXJHZW9tZXRyeU1h
cCBnZW9tZXRyeU1hcChVc2VUcmFuc2Zvcm1zKTsKKyAgICBpZiAoJm1fbGF5ZXIgIT0gbV9sYXll
ci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKQorICAgICAgICBnZW9tZXRyeU1hcC5wdXNoTWFw
cGluZ3NUb0FuY2VzdG9yKG1fbGF5ZXIucGFyZW50KCksIG51bGxwdHIpOworCisgICAgLy8gRklY
TUU6IHdoeSBpcyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVy
IGluIG9yZGVyIHRvCisgICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3Ry
YWluZWRBbmNlc3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8K
KyAgICBtX2xheWVyLnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoJmdlb21ldHJ5TWFw
LCBSZW5kZXJMYXllcjo6SXNPdmVyZmxvd1Njcm9sbCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIERlcHJlY2F0ZWRHbG9iYWxTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRv
ck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAoreworICAgIG1fbGF5ZXIucmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6Ok90aGVy
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCAiUmVuZGVyTGF5ZXI6ICIgKyBtZXNzYWdlKTsKK30KKwor
U3RyaW5nIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyLmRlYnVnRGVzY3JpcHRpb24oKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhLmgKaW5kZXggNmQ5Y2RlYzIyNTU3NmMwOTExZTJlMjAxMTgw
NzcyYWYwMGU5MDU0OS4uNmFiMTAwNTAwZTdkMDk1Njg2MTdmMjJjOGFjYWRjZjVmZDFmYjM1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oCkBAIC0xLDE4ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCiAgKgotICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAo
QykgMTk5OCBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBPdGhl
ciBjb250cmlidXRvcnM6Ci0gKiAgIFJvYmVydCBPJ0NhbGxhaGFuIDxyb2MrQGNzLmNtdS5lZHU+
Ci0gKiAgIERhdmlkIEJhcm9uIDxkYmFyb25AZmFzLmhhcnZhcmQuZWR1PgotICogICBDaHJpc3Rp
YW4gQmllc2luZ2VyIDxjYmllc2luZ2VyQHdlYi5kZT4KLSAqICAgUmFuZGFsbCBKZXN1cCA8cmpl
c3VwQHdnYXRlLmNvbT4KLSAqICAgUm9sYW5kIE1haW56IDxyb2xhbmQubWFpbnpAaW5mb3JtYXRp
ay5tZWQudW5pLWdpZXNzZW4uZGU+Ci0gKiAgIEpvc2ggU29yZWYgPHRpbWVsZXNzQG1hYy5jb20+
Ci0gKiAgIEJvcmlzIFpiYXJza3kgPGJ6YmFyc2t5QG1pdC5lZHU+Ci0gKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwogICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCkBAIC00OSwxNyArMzcsMjU1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ly8gRklYTUU6IE1hcmsgYXMgJ2ZpbmFsJyBvbmNlIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24g
bGFuZHMuCi1jbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIDogcHVibGljIFNjcm9sbGFi
bGVBcmVhIHsKK2NsYXNzIFJlbmRlck1hcnF1ZWU7CisKK2NsYXNzIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEoUmVuZGVyTGF5ZXImKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhKCk7CiAKKyAgICBSZW5kZXJMYXllciYgbGF5ZXIoKSB7IHJldHVybiBtX2xheWVyOyB9CisK
KyAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdl
dCgpOyB9CisgICAgdm9pZCB1cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKKyAgICB2b2lkIGNyZWF0
ZU9yRGVzdHJveU1hcnF1ZWUoKTsKKworICAgIHZvaWQgc3RvcmVTY3JvbGxQb3NpdGlvbigpOwor
CisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgdm9pZCByZWdpc3RlckFzVG91Y2hF
dmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIGFw
cGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKKworICAgIGludCBzY3JvbGxX
aWR0aCgpIGNvbnN0OworICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQg
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisKKyAgICAvLyBTY3JvbGxpbmcg
bWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KKyAgICB2
b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVB
cmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxU
eXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1w
ZWQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRoQW5pbWF0aW9u
KGNvbnN0IFNjcm9sbE9mZnNldCYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0
aWMsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQpOworCisgICAgdm9p
ZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBT
Y3JvbGxDbGFtcGluZzo6Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6
Tm8pOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50IHksIFNjcm9sbFR5cGUsIFNjcm9s
bENsYW1waW5nID0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQsIEFuaW1hdGVkU2Nyb2xsID0gQW5p
bWF0ZWRTY3JvbGw6Ok5vKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiwgU2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6
Q2xhbXBlZCwgQW5pbWF0ZWRTY3JvbGwgPSBBbmltYXRlZFNjcm9sbDo6Tm8pOworCisgICAgLy8g
VGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0
KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55
KCkpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENsYW1waW5nOjpVbmNsYW1wZWQp
OyB9CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Ny
b2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7IH0KKworICAgIGJvb2wgc2Nyb2xsc092ZXJm
bG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Owor
ICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3JvbGxi
YXIoKSB8fCB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9CisgICAgYm9v
bCBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFy
KCk7IH0KKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7CisgICAgdm9p
ZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsKKworICAgIFJlZjxTY3JvbGxiYXI+IGNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbik7CisgICAgdm9pZCBkZXN0cm95U2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKworICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQ
b3NpdGlvblJlY29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBv
c2l0aW9uUmVjb25jaWxpYXRpb247IH0KKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1f
cmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlh
dGlvbjsgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRv
dWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVh
bGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCisgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xs
aW5nKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkg
c2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgor
ICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorCisgICAgaW50IHZlcnRpY2Fs
U2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVy
bGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFy
U2l6ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKKyAg
ICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCk7CisgICAgYm9vbCBoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgTGF5b3V0UG9pbnQm
IHBvaW50SW5GcmFnbWVudCkgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9s
cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7CisgICAgdm9pZCBw
YWludFNjcm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7
CisgICAgdm9pZCBwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiwgUmVuZGVy
T2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290ID0gbnVsbHB0cik7CisKKyAgICB2b2lkIHVwZGF0ZVNj
cm9sbEluZm9BZnRlckxheW91dCgpOworCisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworCitwdWJsaWM6Cisg
ICAgLy8gQWxsIG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIG92ZXJyaWRlIFNjcm9sbGFibGVhQXJl
YSBtZXRob2RzIChmaW5hbCkuCisgICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQo
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7CisKKyAgICBib29sIGhvcml6b250YWxT
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKworICAgIFNjcm9sbFBvc2l0aW9u
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsg
fQorCisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9oQmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorICAgIFNjcm9sbGFibGVBcmVh
KiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBoYW5k
bGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIE9wdGlv
bmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRlPikgZmluYWw7CisgICAgYm9vbCBpc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7CisgICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJi
ZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdm9pZCB1cGRh
dGVTbmFwT2Zmc2V0cygpIGZpbmFsOworI2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgaGFuZGxlVG91Y2hFdmVu
dChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBk
aWRTdGFydFNjcm9sbCgpIGZpbmFsOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Cisg
ICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKKyNlbmRpZgorCisgICAgR3JhcGhpY3NM
YXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3Jh
cGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOworICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QgZmluYWw7CisKKyAg
ICBib29sIHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7CisgICAgYm9vbCB1
c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKwogICAgIGJvb2wgc2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsOwogCisgICAgYm9vbCBp
c1JlbmRlckxheWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbENvcm5lclJlY3QoY29uc3QgSW50UmVjdCYpIGZpbmFs
OworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSgpIGNvbnN0IGZpbmFsOworICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyUmVjdCgp
IGNvbnN0IGZpbmFsOworICAgIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAg
ICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IElu
dFBvaW50JikgY29uc3QgZmluYWw7CisgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFBvaW50JikgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgZmlu
YWw7CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IGZpbmFsOwor
CisgICAgSW50UmVjdCB2aXNpYmxlQ29udGVudFJlY3RJbnRlcm5hbChWaXNpYmxlQ29udGVudFJl
Y3RJbmNsdWRlc1Njcm9sbGJhcnMsIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRTaXplIG92ZXJoYW5nQW1vdW50KCkgY29uc3QgZmluYWw7CisgICAgSW50
UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgaXNIYW5kbGluZ1doZWVsRXZlbnQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHNob3VsZFN1
c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxh
YmxlQXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQgPSBudWxscHRyKSBjb25zdCBm
aW5hbDsKKyAgICBib29sIGlzVXNlclNjcm9sbEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGZv
cmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVzdGluZygpIGNv
bnN0IGZpbmFsOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgYm9vbCBpc1Njcm9s
bFNuYXBJblByb2dyZXNzKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKyAgICBib29sIHVzZXNNb2Nr
U2Nyb2xsQW5pbWF0b3IoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGxvZ01vY2tTY3JvbGxBbmlt
YXRvck1lc3NhZ2UoY29uc3QgU3RyaW5nJikgY29uc3QgZmluYWw7CisKKyAgICBTdHJpbmcgZGVi
dWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworCisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgp
IGNvbnN0IGZpbmFsOworICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3QgZmluYWw7Cisg
ICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZpbmFsOworCisg
ICAgYm9vbCByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24m
LCBTY3JvbGxUeXBlID0gU2Nyb2xsVHlwZTo6VXNlciwgU2Nyb2xsQ2xhbXBpbmcgPSBTY3JvbGxD
bGFtcGluZzo6Q2xhbXBlZCkgZmluYWw7CisKKyAgICBib29sIGNvbnRhaW5zRGlydHlPdmVybGF5
U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzOyB9CisgICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBk
aXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBkaXJ0
eVNjcm9sbGJhcnM7IH0KKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFu
Z2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9sbGJh
cnNBZnRlckxheW91dCgpOworCisgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgY2xlYXJTY3JvbGxDb3JuZXIoKTsKKyAgICB2b2lkIGNs
ZWFyUmVzaXplcigpOworCisgICAgdm9pZCB1cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUo
KTsKKworICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KTsKKworICAgIExheW91dFVuaXQg
b3ZlcmZsb3dUb3AoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93Qm90dG9tKCkgY29u
c3Q7CisgICAgTGF5b3V0VW5pdCBvdmVyZmxvd0xlZnQoKSBjb25zdDsKKyAgICBMYXlvdXRVbml0
IG92ZXJmbG93UmlnaHQoKSBjb25zdDsKKworICAgIFJlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRy
b2xSZWN0cyBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdDsKKworICAgIGJvb2wgb3ZlcmZs
b3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdDsK
KworICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworCisgICAg
dm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKworICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJm
bG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisKKyAg
ICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworCisgICAgLy8gTk9URTogVGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0
IGZyb20gU2Nyb2xsYWJsZUFyZWEuCisgICAgdm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3Np
dGlvbiYpOworICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwor
CisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7CisK
KyAgICB2b2lkIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFzT3ZlcmZsb3cpOworCisg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGNv
bnN0OworCisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwo
KTsKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwor
CisgICAgT3B0aW9uYWw8TGF5b3V0UmVjdD4gdXBkYXRlU2Nyb2xsUG9zaXRpb24oU2Nyb2xsQmVo
YXZpb3IsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxv
Y2FsRXhwb3NlUmVjdCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgYWRq
dXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hZGp1c3RGb3JJ
T1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyAgICB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hl
blNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeyBtX2FkanVz
dEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZzsgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVTY3JvbGxDb3JuZXJTdHls
ZSgpOworICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7CisKIHByaXZhdGU6CisgICAgLy8g
TWluaW11bSBwYWRkaW5nIG9uIHg4Nl82NCAoNCBieXRlcyksIGFmdGVyIG1fc2Nyb2xsSGVpZ2h0
KQorICAgIGJvb2wgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgOiAxOworICAgIGJvb2wgbV9pbk92
ZXJmbG93UmVsYXlvdXQgOiAxOworICAgIGJvb2wgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEg
OiAxOworICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93IDogMTsKKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7
CisjZW5kaWYKKyAgICBib29sIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsK
KyNlbmRpZgorICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24g
OiAxOworICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgOiAxOworICAg
IGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7CisgICAgYm9vbCBtX3Bvc3RMYXlv
dXRTY3JvbGxQb3NpdGlvblNldCA6IDE7CisKKyAgICAvLyBUaGUgd2lkdGgvaGVpZ2h0IG9mIG91
ciBzY3JvbGxlZCBhcmVhLgorICAgIGludCBtX3Njcm9sbFdpZHRoOworICAgIGludCBtX3Njcm9s
bEhlaWdodDsKKwogICAgIFJlbmRlckxheWVyJiBtX2xheWVyOworICAgIFNjcm9sbFBvc2l0aW9u
IG1fc2Nyb2xsUG9zaXRpb247CisgICAgU2Nyb2xsUG9zaXRpb24gbV9wb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb247CisKKyAgICAvLyBGb3IgbGF5ZXJzIHdpdGggb3ZlcmZsb3csIHdlIGhhdmUgYSBw
YWlyIG9mIHNjcm9sbGJhcnMuCisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9oQmFyOworICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKKworICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNj
cm9sbGJhck9mZnNldDsKKworICAgIC8vIFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Ny
b2xsIGNvcm5lciBhbmQgcmVzaXplci4KKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFy
dD4gbV9zY3JvbGxDb3JuZXI7CisgICAgUmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1f
cmVzaXplcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7
IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA4ZThhZDcwNDNh
MWQ3NDA2MTE3ZTI3MmViMGEyMDQ1YWZlNjVjMmRlLi5lOTE2ZTFjNjg0NmJjM2I3MTg3ZWJlZmZh
YTRmNTZmOWMwNTIyZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
aW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxheW91dFN0YXRlLmgiCiAjaW5j
bHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtODgy
LDcgKzg4MywxMSBAQCBTY3JvbGxhYmxlQXJlYSogUmVuZGVyTGlzdEJveDo6ZW5jbG9zaW5nU2Ny
b2xsYWJsZUFyZWEoKSBjb25zdAogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVk
ZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAg
YXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKTsKKyAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXllcikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5zY3Jv
bGxhYmxlQXJlYSgpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKQpAQCAtODkyLDcgKzg5NywxMCBAQCBib29sIFJlbmRlckxpc3RCb3g6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQogCiBib29sIFJlbmRlckxpc3RCb3g6Omhhc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQogewotICAgIHJldHVybiBlbmNsb3Np
bmdMYXllcigpICYmIGVuY2xvc2luZ0xheWVyKCktPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKTsKKyAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5n
TGF5ZXIoKSA/IGVuY2xvc2luZ0xheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKQor
ICAgICAgICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCk7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIEludFJlY3QgUmVuZGVy
TGlzdEJveDo6c2Nyb2xsYWJsZUFyZWFCb3VuZGluZ0JveChib29sKikgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAppbmRleCA3NmUyM2U0ZDA5OTZlNmJm
YmU0MGE2NDQxMTY0NDU5YWE2NzgwZDhiLi43YjRlNzZkYzU3YTFjYTkwODU5YWY0NTJhYWYzMDk0
YzExZWVmNTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFy
cXVlZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CkBAIC02MCw3ICs2MCw4IEBAIFJlbmRlck1hcnF1ZWU6OlJlbmRlck1hcnF1ZWUoUmVuZGVyTGF5
ZXIqIGxheWVyKQogICAgIDogbV9sYXllcihsYXllcikKICAgICAsIG1fdGltZXIoKnRoaXMsICZS
ZW5kZXJNYXJxdWVlOjp0aW1lckZpcmVkKQogewotICAgIGxheWVyLT5zZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZShmYWxzZSk7CisgICAgQVNTRVJUKGxheWVyLT5zY3JvbGxhYmxl
QXJlYSgpKTsKKyAgICBsYXllci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwogfQogCiBSZW5kZXJNYXJxdWVlOjp+UmVuZGVyTWFy
cXVlZSgpID0gZGVmYXVsdDsKQEAgLTE3MSwxMSArMTcyLDE0IEBAIHZvaWQgUmVuZGVyTWFycXVl
ZTo6c3RhcnQoKQogICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkgfHwgbV9sYXllci0+cmVuZGVy
ZXIoKS5zdHlsZSgpLm1hcnF1ZWVJbmNyZW1lbnQoKS5pc1plcm8oKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci0+c2Nyb2xsYWJsZUFyZWEo
KTsKKyAgICBBU1NFUlQoc2Nyb2xsYWJsZUxheWVyKTsKKwogICAgIGlmICghbV9zdXNwZW5kZWQg
JiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAg
ICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQobV9zdGFydCwgMCksIFNjcm9s
bFR5cGU6OlByb2dyYW1tYXRpYywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CisgICAgICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChtX3N0YXJ0
LCAwKSwgU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljLCBTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVk
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoU2Ny
b2xsT2Zmc2V0KDAsIG1fc3RhcnQpLCBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMsIFNjcm9sbENs
YW1waW5nOjpVbmNsYW1wZWQpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxU
b09mZnNldChTY3JvbGxPZmZzZXQoMCwgbV9zdGFydCksIFNjcm9sbFR5cGU6OlByb2dyYW1tYXRp
YywgU2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9z
dXNwZW5kZWQgPSBmYWxzZTsKICAgICAgICAgbV9zdG9wcGVkID0gZmFsc2U7CkBAIC0yNDMsMTMg
KzI0NywxNiBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQoKQogewogICAgIGlmICht
X2xheWVyLT5yZW5kZXJlcigpLnZpZXcoKS5uZWVkc0xheW91dCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgCisKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLT5zY3JvbGxhYmxl
QXJlYSgpOworICAgIEFTU0VSVChzY3JvbGxhYmxlTGF5ZXIpOworCiAgICAgaWYgKG1fcmVzZXQp
IHsKICAgICAgICAgbV9yZXNldCA9IGZhbHNlOwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkp
Ci0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb1hPZmZzZXQobV9zdGFydCk7CisgICAgICAg
ICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNldChtX3N0YXJ0KTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG1fc3RhcnQpOworICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb1lPZmZzZXQobV9zdGFydCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0yNzIsNyArMjc5LDcgQEAgdm9pZCBSZW5kZXJN
YXJxdWVlOjp0aW1lckZpcmVkKCkKICAgICAgICAgYm9vbCBwb3NpdGl2ZSA9IHJhbmdlID4gMDsK
ICAgICAgICAgaW50IGNsaWVudFNpemUgPSAoaXNIb3Jpem9udGFsKCkgPyByb3VuZFRvSW50KG1f
bGF5ZXItPnJlbmRlckJveCgpLT5jbGllbnRXaWR0aCgpKSA6IHJvdW5kVG9JbnQobV9sYXllci0+
cmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSk7CiAgICAgICAgIGludCBpbmNyZW1lbnQgPSBh
YnMoaW50VmFsdWVGb3JMZW5ndGgobV9sYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLm1hcnF1ZWVJ
bmNyZW1lbnQoKSwgY2xpZW50U2l6ZSkpOwotICAgICAgICBpbnQgY3VycmVudFBvcyA9IChpc0hv
cml6b250YWwoKSA/IG1fbGF5ZXItPnNjcm9sbE9mZnNldCgpLngoKSA6IG1fbGF5ZXItPnNjcm9s
bE9mZnNldCgpLnkoKSk7CisgICAgICAgIGludCBjdXJyZW50UG9zID0gKGlzSG9yaXpvbnRhbCgp
ID8gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxPZmZzZXQoKS54KCkgOiBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLnkoKSk7CiAgICAgICAgIG5ld1BvcyA9ICBjdXJyZW50UG9zICsgKGFk
ZEluY3JlbWVudCA/IGluY3JlbWVudCA6IC1pbmNyZW1lbnQpOwogICAgICAgICBpZiAocG9zaXRp
dmUpCiAgICAgICAgICAgICBuZXdQb3MgPSBzdGQ6Om1pbihuZXdQb3MsIGVuZFBvaW50KTsKQEAg
LTI4OSw5ICsyOTYsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnRpbWVyRmlyZWQoKQogICAgIH0K
ICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
WE9mZnNldChuZXdQb3MpOworICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbFRvWE9mZnNl
dChuZXdQb3MpOwogICAgIGVsc2UKLSAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5l
d1Bvcyk7CisgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1Bvcyk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKaW5kZXggMTU0NzE3NGU3NDIxYjhiY2ZhOWY4NzMzZGNiMzhhN2VmNWU5
NzVlMS4uYzFlNjQ0M2MzODJlMmEzMDFhZWM3MTlkZDdkYTYyNzRmZjM1ZTI5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTEwMDIsNyArMTAwMiw3IEBA
IE9wdGlvbmFsPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0Ojpjb21wdXRlRmxvYXRWaXNpYmxlUmVj
dEluQ29udGFpbmVyKGNvbnN0IEZsb2F0CiBzdGF0aWMgdm9pZCBvdXRwdXRSZW5kZXJUcmVlTGVn
ZW5kKFRleHRTdHJlYW0mIHN0cmVhbSkKIHsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKLSAgICBz
dHJlYW0gPDwgIihCKWxvY2svKEkpbmxpbmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmko
WCllZC8oUillbGF0aXZlL1N0aWMoSyl5LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFu
b24oWSltb3VzLCAoRyllbmVyYXRlZCwgaGFzKEwpYXllciwgKEMpb21wb3NpdGVkLCAoKylEaXJ0
eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKKyAgICBzdHJlYW0gPDwgIihCKWxvY2svKEkpbmxp
bmUvSShOKWxpbmUtYmxvY2ssIChBKWJzb2x1dGUvRmkoWCllZC8oUillbGF0aXZlL1N0aWMoSyl5
LCAoRilsb2F0aW5nLCAoTyl2ZXJmbG93IGNsaXAsIEFub24oWSltb3VzLCAoRyllbmVyYXRlZCwg
aGFzKEwpYXllciwgaGFzTGF5ZXIoUyljcm9sbGFibGVBcmVhLCAoQylvbXBvc2l0ZWQsICgrKURp
cnR5IHN0eWxlLCAoKylEaXJ0eSBsYXlvdXQiOwogICAgIHN0cmVhbS5uZXh0TGluZSgpOwogfQog
CkBAIC0xMTE2LDEwICsxMTE2LDE0IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpvdXRwdXRSZW5kZXJP
YmplY3QoVGV4dFN0cmVhbSYgc3RyZWFtLCBib29sIG1hcmssIGludCBkZXB0aCkKICAgICBlbHNl
CiAgICAgICAgIHN0cmVhbSA8PCAiLSI7CiAKLSAgICBpZiAoaGFzTGF5ZXIoKSkKKyAgICBpZiAo
aGFzTGF5ZXIoKSkgewogICAgICAgICBzdHJlYW0gPDwgIkwiOwotICAgIGVsc2UKLSAgICAgICAg
c3RyZWFtIDw8ICItIjsKKyAgICAgICAgaWYgKGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q+KCp0aGlzKS5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgc3RyZWFt
IDw8ICJTIjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RyZWFtIDw8ICItIjsKKyAgICB9
IGVsc2UKKyAgICAgICAgc3RyZWFtIDw8ICItLSI7CiAKICAgICBpZiAoaXNDb21wb3NpdGVkKCkp
CiAgICAgICAgIHN0cmVhbSA8PCAiQyI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKaW5kZXggZDNhNjY3MWM2N2FjMWQ5MzRhZjZiMmVmNGQ3ZmVkMGNmZmY5MzA3ZC4uOTgx
YWJjMGU0NjMyOTc0MGFkZjRhMDA3MGYwODlmNWE1MjYzNmVkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMTAwLDYgKzEwMCw3IEBAIGNsYXNzIFJlbmRlck9i
amVjdCA6IHB1YmxpYyBDYWNoZWRJbWFnZUNsaWVudCwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJl
bmRlck9iamVjCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckJsb2NrRmxvdzsKICAgICBmcmllbmQg
Y2xhc3MgUmVuZGVyRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXI7CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE7CiBwdWJsaWM6CiAgICAgLy8g
QW5vbnltb3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5vZGUs
IGFuZCB0aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFzIGFu
b255bW91cyBpbiB0aGUgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IGEwNzUwODFm
NTY1Y2VkYjU1ZGRiZWM5NjhlYzJjYjEzOWQ2MGJhYjguLjI1N2FmYmUxOTA0MGM4MjI2NWM2NDkw
Nzg0MmVmZmZiNWJkYjZiYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTM5NywxOSArMzk4LDIwIEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCwg
U2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhCiAKIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCwgUmVuZGVy
Qm94KiBzdGFydEJveCwgY29uc3QgSW50UG9pbnQmIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KQog
ewotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayogcmVuZGVyZXIgPSBpbm5lclRleHRF
bGVtZW50KCktPnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSBpbm5lclRleHRFbGVt
ZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlcmVyLT5sYXllcigpOwotICAgIGlm
IChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpKQorICAgIGF1dG8qIGJveExheWVyU2Nyb2xsYWJsZSA9IHJlbmRlcmVyLT5sYXllcigpID8g
cmVuZGVyZXItPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHI7
CisgICAgaWYgKGJveExheWVyU2Nyb2xsYWJsZSAmJiBib3hMYXllclNjcm9sbGFibGUtPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIsIHN0b3BFbGVtZW50LCBzdGFydEJveCwgd2hlZWxFdmVudEFic29s
dXRlUG9pbnQpOwogfQogCiBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNh
bFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIEVsZW1lbnQqKiBzdG9wRWxlbWVudCkK
IHsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlcmVy
KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5
c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KSkKKyAgICBhdXRvKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyZXIoKS0+bGF5
ZXIoKTsKKyAgICBhdXRvKiBib3hMYXllclNjcm9sbGFibGUgPSBsYXllciA/IGxheWVyLT5lbnN1
cmVMYXllclNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOworICAgIGlmIChib3hMYXllclNjcm9s
bGFibGUgJiYgYm94TGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGly
ZWN0aW9uLCBzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbFNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggN2Mw
MWYwMjBmZTgyY2VhY2Y0YzQxMmNhZDY5YWNlMTMxZWJjZDNkZC4uNTkyMGQ1OGYyMGIwMDk1Njg1
NTc2ZmY0NjgyZWVmMzRmN2UzZjAxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlJlbmRlckl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ckJhY2tpbmcuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCkBAIC02MDAsMjAgKzYwMSwyNCBAQCBzdGF0aWMg
dm9pZCB3cml0ZUxheWVyKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIs
IGNvbnN0IExheW91dFJlYwogICAgIH0KIAogICAgIGlmIChsYXllci5yZW5kZXJlcigpLmhhc092
ZXJmbG93Q2xpcCgpKSB7Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS54KCkpCi0g
ICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFggIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS54KCk7
Ci0gICAgICAgIGlmIChsYXllci5zY3JvbGxPZmZzZXQoKS55KCkpCi0gICAgICAgICAgICB0cyA8
PCAiIHNjcm9sbFkgIiA8PCBsYXllci5zY3JvbGxPZmZzZXQoKS55KCk7Ci0gICAgICAgIGlmIChs
YXllci5yZW5kZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRX
aWR0aCgpKSAhPSBsYXllci5zY3JvbGxXaWR0aCgpKQotICAgICAgICAgICAgdHMgPDwgIiBzY3Jv
bGxXaWR0aCAiIDw8IGxheWVyLnNjcm9sbFdpZHRoKCk7Ci0gICAgICAgIGlmIChsYXllci5yZW5k
ZXJCb3goKSAmJiByb3VuZFRvSW50KGxheWVyLnJlbmRlckJveCgpLT5jbGllbnRIZWlnaHQoKSkg
IT0gbGF5ZXIuc2Nyb2xsSGVpZ2h0KCkpCi0gICAgICAgICAgICB0cyA8PCAiIHNjcm9sbEhlaWdo
dCAiIDw8IGxheWVyLnNjcm9sbEhlaWdodCgpOworICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJs
ZUxheWVyID0gbGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKSkgeworICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpKQorICAgICAgICAgICAgICAgIHRzIDw8ICIg
c2Nyb2xsWCAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueCgpOworICAgICAg
ICAgICAgaWYgKHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0KCkueSgpKQorICAgICAgICAg
ICAgICAgIHRzIDw8ICIgc2Nyb2xsWSAiIDw8IHNjcm9sbGFibGVMYXllci0+c2Nyb2xsT2Zmc2V0
KCkueSgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRlckJveCgpICYmIHJvdW5kVG9JbnQo
bGF5ZXIucmVuZGVyQm94KCktPmNsaWVudFdpZHRoKCkpICE9IHNjcm9sbGFibGVMYXllci0+c2Ny
b2xsV2lkdGgoKSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbFdpZHRoICIgPDwgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxXaWR0aCgpOworICAgICAgICAgICAgaWYgKGxheWVyLnJlbmRl
ckJveCgpICYmIHJvdW5kVG9JbnQobGF5ZXIucmVuZGVyQm94KCktPmNsaWVudEhlaWdodCgpKSAh
PSBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEhlaWdodCgpKQorICAgICAgICAgICAgICAgIHRzIDw8
ICIgc2Nyb2xsSGVpZ2h0ICIgPDwgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxIZWlnaHQoKTsKKyAg
ICAgICAgfQogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgU2Nyb2xsYmFyVGhlbWUmIHNjcm9s
bGJhclRoZW1lID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCk7Ci0gICAgICAgIGlmICghc2Nyb2xs
YmFyVGhlbWUuaXNNb2NrVGhlbWUoKSAmJiBsYXllci5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7
Ci0gICAgICAgICAgICBTY3JvbGxiYXJUaGVtZU1hYyYgbWFjVGhlbWUgPSAqc3RhdGljX2Nhc3Q8
U2Nyb2xsYmFyVGhlbWVNYWMqPigmc2Nyb2xsYmFyVGhlbWUpOwotICAgICAgICAgICAgaWYgKG1h
Y1RoZW1lLmlzTGF5b3V0RGlyZWN0aW9uUlRMKCpsYXllci52ZXJ0aWNhbFNjcm9sbGJhcigpKSkK
LSAgICAgICAgICAgICAgICB0cyA8PCAiIHNjcm9sbGJhckhhc1JUTExheW91dERpcmVjdGlvbiI7
CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJl
YSgpKSB7CisgICAgICAgICAgICBpZiAoIXNjcm9sbGJhclRoZW1lLmlzTW9ja1RoZW1lKCkgJiYg
c2Nyb2xsYWJsZUxheWVyLT5oYXNWZXJ0aWNhbFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICAg
ICAgU2Nyb2xsYmFyVGhlbWVNYWMmIG1hY1RoZW1lID0gKnN0YXRpY19jYXN0PFNjcm9sbGJhclRo
ZW1lTWFjKj4oJnNjcm9sbGJhclRoZW1lKTsKKyAgICAgICAgICAgICAgICBpZiAobWFjVGhlbWUu
aXNMYXlvdXREaXJlY3Rpb25SVEwoKnNjcm9sbGFibGVMYXllci0+dmVydGljYWxTY3JvbGxiYXIo
KSkpCisgICAgICAgICAgICAgICAgICAgIHRzIDw8ICIgc2Nyb2xsYmFySGFzUlRMTGF5b3V0RGly
ZWN0aW9uIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCBiMTAzM2RhMDc5MzA0Njc5
YjU1N2EyZDEyNDQ5MTQzNTZiNjIzZTdiLi5mZjQyMjIwNzMyMThjNmU1MTAxMzcxNmRmNDk2N2Fi
YWFlNThkMmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgpAQCAtMzMyLDggKzMzMywxMCBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0
KCkpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgfQogCi0gICAgaWYgKGhhc0xh
eWVyKCkgJiYgbGF5ZXIoKS0+Y2FuUmVzaXplKCkpCi0gICAgICAgIGxheWVyKCktPnBhaW50UmVz
aXplcihwYWludEluZm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldCksIHBhaW50SW5mby5yZWN0KTsKKyAgICBpZiAoaGFzTGF5ZXIoKSAmJiBsYXllcigpLT5j
YW5SZXNpemUoKSkgeworICAgICAgICBBU1NFUlQobGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSk7
CisgICAgICAgIGxheWVyKCktPnNjcm9sbGFibGVBcmVhKCktPnBhaW50UmVzaXplcihwYWludElu
Zm8uY29udGV4dCgpLCByb3VuZGVkSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldCksIHBhaW50
SW5mby5yZWN0KTsKKyAgICB9CiB9CiAKIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRPdmVybGFwVGVz
dFJlc3VsdChib29sIGlzT3ZlcmxhcHBlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCBhYjYwMmQwYWNlY2QyM2ZkY2EzYzBkNDljNzhiZDc3MDIyZjQ1OWFmLi5jNTA0OWVk
YWE1YmE4OWVjNjdhOGMwYWI5NGNhOGE0NmUxZjM2Y2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC0xNTgsNiArMTU4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRl
ZE9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJl
bmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxp
c3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtMTgzOCw3ICsxODM5LDggQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzY3JvbGxCeVNpbXVsYXRpbmdXaGVlbEV2ZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIGRvdWIKICAgICAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhh
c1Njcm9sbGFibGVBcmVhKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZEFjY2Vzc0Vycm9yIH07CiAKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBib3gubGF5ZXIoKTsK
KyAgICAgICAgQVNTRVJUKGJveC5sYXllcigpKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBi
b3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzY3Jv
bGxhYmxlQXJlYSkKQEAgLTI4NTksOCArMjg2MSwxMCBAQCBFeGNlcHRpb25PcjxTY3JvbGxhYmxl
QXJlYSo+IEludGVybmFsczo6c2Nyb2xsYWJsZUFyZWFGb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0
CiAKICAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCkpCiAgICAgICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9ICZkb3duY2FzdDxSZW5kZXJMaXN0Qm94PihyZW5kZXJCb3gpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXll
cigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChyZW5kZXJCb3gubGF5ZXIo
KSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlbmRlckJveC5sYXllcigpLT5zY3Jv
bGxhYmxlQXJlYSgpOworICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkTm9kZVR5cGVFcnJvciB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01IVE1MLm1tCmluZGV4IDg1ODRjMjMxZmVmOGM4ZDhiNzA2ZThmOTZlZDA4ZDczODg1M2Rk
NTAuLmNiYzU2N2UzYmU1NDY3NzkzMzA1MjNjYTBhN2ZjYjc2ZDUzNDNiZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MLm1tCkBAIC01Myw2ICs1Myw3IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pT
RXhlY1N0YXRlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlckxheWVyLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FL
V2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWRNZXNzYWdlLmg+CiAjZW5k
aWYKQEAgLTc3LDcgKzc4LDE0IEBAIC0gKGludClzY3JvbGxYT2Zmc2V0CiAgICAgaWYgKCFpczxX
ZWJDb3JlOjpSZW5kZXJCb3g+KCpyZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNPdmVyZmxvd0Ns
aXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6
UmVuZGVyQm94PigqcmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbE9mZnNldCgpLngoKTsKKyAgICBh
dXRvKiBsYXllciA9IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXll
cigpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJs
ZUxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXIt
PnNjcm9sbE9mZnNldCgpLngoKTsKIH0KIAogLSAoaW50KXNjcm9sbFlPZmZzZXQKQEAgLTkxLDcg
Kzk5LDE0IEBAIC0gKGludClzY3JvbGxZT2Zmc2V0CiAgICAgaWYgKCFpczxXZWJDb3JlOjpSZW5k
ZXJCb3g+KCpyZW5kZXJlcikgfHwgIXJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8V2ViQ29yZTo6UmVuZGVyQm94Pigq
cmVuZGVyZXIpLmxheWVyKCktPnNjcm9sbE9mZnNldCgpLnkoKTsKKyAgICBhdXRvKiBsYXllciA9
IGRvd25jYXN0PFdlYkNvcmU6OlJlbmRlckJveD4oKnJlbmRlcmVyKS5sYXllcigpOworICAgIGlm
ICghbGF5ZXIpCisgICAgICAgIHJldHVybiAwOworICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9
IGxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghc2Nyb2xsYWJsZUxheWVyKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbE9mZnNl
dCgpLnkoKTsKIH0KIAogLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0OihpbnQpeCBzY3JvbGxZT2Zm
c2V0OihpbnQpeQpAQCAtMTExLDExICsxMjYsMTQgQEAgLSAodm9pZClzZXRTY3JvbGxYT2Zmc2V0
OihpbnQpeCBzY3JvbGxZT2Zmc2V0OihpbnQpeSBhZGp1c3RGb3JJT1NDYXJldDooQk9PTClhZGoK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxXZWJDb3JlOjpS
ZW5kZXJCb3g+KCpyZW5kZXJlcikubGF5ZXIoKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICBy
ZXR1cm47CisgICAgYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Ny
b2xsYWJsZUFyZWEoKTsKICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2FyZXQpCi0gICAgICAgIGxheWVy
LT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7Ci0gICAgbGF5ZXItPnNj
cm9sbFRvT2Zmc2V0KFdlYkNvcmU6OlNjcm9sbE9mZnNldCh4LCB5KSwgV2ViQ29yZTo6U2Nyb2xs
VHlwZTo6UHJvZ3JhbW1hdGljLCBXZWJDb3JlOjpTY3JvbGxDbGFtcGluZzo6VW5jbGFtcGVkKTsK
KyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CisgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxUb09mZnNldChXZWJDb3JlOjpT
Y3JvbGxPZmZzZXQoeCwgeSksIFdlYkNvcmU6OlNjcm9sbFR5cGU6OlByb2dyYW1tYXRpYywgV2Vi
Q29yZTo6U2Nyb2xsQ2xhbXBpbmc6OlVuY2xhbXBlZCk7CiAgICAgaWYgKGFkanVzdEZvcklPU0Nh
cmV0KQotICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZh
bHNlKTsKKyAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoZmFsc2UpOwogfQogCiAtICh2b2lkKWFic29sdXRlUG9zaXRpb246KGludCAqKXgg
OihpbnQgKil5IDooaW50ICopdyA6KGludCAqKWgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGUwZDQwZmIyNjI3NGE5YmMwODMxZGQwMWFhMDQ3MmI2
MzA3ODdhZTcuLjhjMmQwMGU4MGMyNDljOWQ5MWJmYjAzMjBmYWM3MGJlMTRhZWEzMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTUsNiArOTUs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJW
aWV3Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlbmRlcldpZGdldC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmg+CkBAIC03MzgsOSArNzM5LDEwIEBAIC0gKHZvaWQp
X3Njcm9sbERPTVJhbmdlVG9WaXNpYmxlOihET01SYW5nZSAqKXJhbmdlCiAjZWxzZQogICAgICAg
ICBhdXRvKiBsYXllciA9IHN0YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKTsK
ICAgICAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0QWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworICAgICAgICAgICAgYXV0byogc2Nyb2xsYWJsZUxh
eWVyID0gbGF5ZXItPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgICAgIHNj
cm9sbGFibGVMYXllci0+c2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOwog
ICAgICAgICAgICAgc3RhcnROb2RlLT5yZW5kZXJlcigpLT5zY3JvbGxSZWN0VG9WaXNpYmxlKFdl
YkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmFuZ2VSZWN0KSwgaW5zaWRlRml4ZWQsIHsgV2ViQ29y
ZTo6U2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBXZWJDb3JlOjpTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduVG9FZGdlSWZOZWVkZWQsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0Vk
Z2VJZk5lZWRlZCwgV2ViQ29yZTo6U2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVz
IH0pOwotICAgICAgICAgICAgbGF5ZXItPnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGlu
ZyhmYWxzZSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNldEFkanVzdEZvcklPU0Nh
cmV0V2hlblNjcm9sbGluZyhmYWxzZSk7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVkc1VwZGF0ZSgpOwogICAgICAgICAgICAgX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFyYW5jZSgpOwogICAgICAg
ICB9CkBAIC03NTgsOSArNzYwLDEwIEBAIC0gKHZvaWQpX3Njcm9sbERPTVJhbmdlVG9WaXNpYmxl
OihET01SYW5nZSAqKXJhbmdlIHdpdGhJbnNldDooQ0dGbG9hdClpbnNldAogICAgIGlmIChzdGFy
dE5vZGUgJiYgc3RhcnROb2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgIGF1dG8qIGxheWVyID0g
c3RhcnROb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5
ZXIpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcodHJ1ZSk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5z
dXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5z
ZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7CiAgICAgICAgICAgICBzdGFy
dE5vZGUtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUoV2ViQ29yZTo6ZW5jbG9zaW5n
SW50UmVjdChyYW5nZVJlY3QpLCBpbnNpZGVGaXhlZCwgeyBXZWJDb3JlOjpTZWxlY3Rpb25SZXZl
YWxNb2RlOjpSZXZlYWwsIFdlYkNvcmU6OlNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZCwgV2ViQ29yZTo6U2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkLCBXZWJD
b3JlOjpTaG91bGRBbGxvd0Nyb3NzT3JpZ2luU2Nyb2xsaW5nOjpZZXN9KTsKLSAgICAgICAgICAg
IGxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworICAgICAg
ICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmco
ZmFsc2UpOwogCiAgICAgICAgICAgICBhdXRvIGNvcmVGcmFtZSA9IGNvcmUoc2VsZik7CiAgICAg
ICAgICAgICBpZiAoY29yZUZyYW1lKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmlu
ZGV4IGFhNTIwODk3NjI2NjUxNDYwZjEzNDU5ZmU2OTZiZDk3ODQzYzQzYWEuLjI0NmRmMTA1MTYz
ZjQyOWNjNDBmMGNiYzg5ZWNmZjRhMDIxZjY3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwCkBAIC0xNDcsNiArMTQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BvcHVwTWVudVdp
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvZ3Jlc3NUcmFja2VyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclZpZXcu
aD4KQEAgLTIwNDgsOCArMjA0OSwxMSBAQCBib29sIFdlYlZpZXc6Omdlc3R1cmUoV1BBUkFNIHdQ
YXJhbSwgTFBBUkFNIGxQYXJhbSkKICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGRpcmVjdGx5IGhp
dCB0aGUgZG9jdW1lbnQgd2l0aG91dCBoaXR0aW5nIGFueSBub2RlcwogICAgICAgICAgICAgY29y
ZUZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KGxvZ2ljYWxTY3JvbGxEZWx0YSk7CiAgICAgICAgICAg
ICBzY3JvbGxlZEFyZWEgPSBjb3JlRnJhbWUtPnZpZXcoKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZlbHkobG9naWNhbFNjcm9s
bERlbHRhLCAmc2Nyb2xsZWRBcmVhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICghc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEo
KS0+c2Nyb2xsQnlSZWN1cnNpdmVseShsb2dpY2FsU2Nyb2xsRGVsdGEsICZzY3JvbGxlZEFyZWEp
OworICAgICAgICB9CiAKICAgICAgICAgaWYgKCEoVXBkYXRlUGFubmluZ0ZlZWRiYWNrUHRyKCkg
JiYgQmVnaW5QYW5uaW5nRmVlZGJhY2tQdHIoKSAmJiBFbmRQYW5uaW5nRmVlZGJhY2tQdHIoKSkp
IHsKICAgICAgICAgICAgIENsb3NlR2VzdHVyZUluZm9IYW5kbGVQdHIoKShnZXN0dXJlSGFuZGxl
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417571</attachid>
            <date>2021-01-13 15:25:13 -0800</date>
            <delta_ts>2021-01-13 15:44:19 -0800</delta_ts>
            <desc>Patch, v21</desc>
            <filename>bug-60305-20210114002511.patch</filename>
            <type>text/plain</type>
            <size>244812</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNkMTc2ZGVlYmQ4ODEy
NzI3OTlhM2EwY2YyMjUyMjExZDkxMzcxNC4uNjM4NDYyMWJlMGRmNTAxZTMzYmUzM2I0ZWE0ZTkz
YmFlMjY4NDVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1OCBAQAorMjAyMS0wMS0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93
IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllciwgdG8KKyAgICAgICAgc3RyZWFtbGluZSBpdHMg
aW50ZXJmYWNlIGFuZCBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIKKyAgICAgICAgdHlwZXMg
dGhhdCBkbyBub3QgbmVlZCBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAg
ICAgTWFueSB2YXJpYWJsZXMgdHJhY2tpbmcgc2Nyb2xsaW5nL292ZXJmbG93IHN0YXRlIHdlcmUg
bWlncmF0ZWQgdG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSwgd2hpY2ggaXMg
b25seSBjcmVhdGVkIGlmIHRoZSByZW5kZXJlcgorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBsYXllciBoYXMgYSBDU1MgJ3Jlc2l6ZScgcHJvcGVydHkgIT0gJ25vbmUnLAorICAgICAgICBo
YXMgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyBjb250ZW50IG9yIDxtYXJxdWVlPi4K
KworICAgICAgICBGb3IgdGhlIGNvbW1vbiBjYXNlIChubyBzY3JvbGxhYmxlIG92ZXJmbG93KSwg
dGhlIFJlbmRlckxheWVyCisgICAgICAgIG92ZXJoZWFkIGlzIHJlZHVjZWQ6IGxlc3MgbWVtb3J5
LCBsZXNzIHN0YXRlIHRyYWNraW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2Ug
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCisgICAgICAgIGluY2x1ZGUgd29yayBpbiBXZWJL
aXQgcHJvamVjdC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwOiBBZGFwdCB0byB0aGUgZmFjdCB0aGF0CisgICAgICAgIFJlbmRlckxheWVyIGlz
IG5vIGxvbmdlciBhIFNjcm9sbGFibGVBcmVhLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUgY29uc3QpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdC
b3gpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAg
KiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsYWJsZUFyZWFGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFi
bGVBcmVhIGNvbnN0KTogRGVjaWRlcworICAgICAgICB3aGV0aGVyIGEgUmVuZGVyTGF5ZXIgbmVl
ZHMgYSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLiBUaGUgcHJlc2VuY2UKKyAgICAgICAgb2Yg
cmVzaXplL21hcnF1ZWUvb3ZlcmZsb3cgdHJpZ2dlcnMgY3JlYXRpb24gb2YgYQorICAgICAgICBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIG9iamVjdC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogTW92ZSBhbGwg
b3ZlcmZsb3cvcmVzaXplL21hcnF1ZWUvc2Nyb2xsCisgICAgICAgIGhhbmRsaW5nIHRvIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEgYW5kIGFkYXB0IHRoZSBhZmZlY3RlZCBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmN1cnJlbnRTY3JvbGxUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzZXRDdXJyZW50U2Nyb2xsVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsVG9YUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRv
WVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UmVxdWlyZXNTY3JvbGxQb3Np
dGlvblJlY29uY2lsaWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6bWFycXVlZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWFj
aGFibGVUb3RhbENvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhv
cml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YWxsb3dzQ3VycmVudFNjcm9sbCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNQb2ludElu
UmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZT2Zmc2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDogQWRhcHQgdG8gdGhlIGZhY3QgdGhhdAorICAg
ICAgICBSZW5kZXJMYXllciBpcyBubyBsb25nZXIgYSBTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxp
bmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDogTW9zdGx5IG1v
dmVkIGZyb20gUmVuZGVyTGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1w
U2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxz
T3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29y
bmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW5k
ZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
T3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZs
b3dMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtu
b3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXll
ckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6
ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
bGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3Nh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
IEFkYXB0IHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8gbG9uZ2Vy
IGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKTogQWRk
ICdTJyBzdGF0ZSBpbiBkZWJ1ZyBvdXRwdXQsCisgICAgICAgIGluZGljYXRpbmcgd2hldGhlciB0
aGUgUmVuZGVyTGF5ZXIgaGFzIGEgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0IGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IEFkZCBmcmllbmRzaGlwIHdpdGgKKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5jcHA6IEFkYXB0IHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8g
bG9uZ2VyIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNj
cm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToK
KwogMjAyMS0wMS0xMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzE0MDEuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDE5YTA5MTE4NDMx
YjNiZmJlZjVmMDA2NmMwMTMwNDIyZjA0N2VjZi4uYWM5MDRkMzg2MDlkNzg3YTMxNzc3NTg4OTEz
YTljMmQ1MTllZjE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDA4NSw2ICs0MDg1LDcgQEAKIAkJQkNFQTQ4NzYwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VB
NDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzOTA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVySW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzQjA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0MTA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0
ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLzsgfTsKIAkJQkNFQTQ4OEEw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
VGhlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMzQyMjMsNiArMzQyMjQsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIw
MDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTND
MjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4
IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzEx
MkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMDIzMDBkOTg3ODUxYWJhMDRkN2QzM2Q1NmQwMGJj
NjkwMGZlNWFjYy4uM2M1NTMyNGY5NmRjMTM1MDVmNzE3YzQ5ZGE4OWE4YTg2ZDEwN2JkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MDYsNyArMzkwNyw3IEBAIFNjcm9sbGFibGVBcmVhKiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSgp
IGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAg
IHJldHVybiBib3gubGF5ZXIoKSA/IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cjsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
aW5kZXggYTkzZWM1NTUwODkzNjBkOTYyMTBmMDQyZGQyZWNjODNlNzg5ZGY5Mi4uZDY5ZjI5NzA0
NTMxZTc4NzI1ODhkNGE1ZmY4ZDNhNTRiZTM2ZWFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcApAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgpAQCAtMTg1Myw3ICsxODU0LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFu
ZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKIAogICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkg
ewogICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0yOTg0LDcgKzI5ODUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hl
ZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjbwogCiAg
ICAgUmVuZGVyQm94KiBjdXJyZW50RW5jbG9zaW5nQm94ID0gJmluaXRpYWxFbmNsb3NpbmdCb3g7
CiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdCb3gpIHsKLSAgICAgICAgaWYgKFJlbmRlckxh
eWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSA/IGN1cnJl
bnRFbmNsb3NpbmdCb3gtPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CiAg
ICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0
Zm9ybUV2ZW50KCk7CiAgICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7CiAgICAg
ICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IDQ3MGRkYzhmYTIyYzk5YmNkYTRjODdiOTc1OTU5YjFiODE5NGFlOTguLmZjMmIzNTc4NjMz
OTE2ZjM0MzJlOTM1MmMxZWNjYjE3NzA0NDY1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMzg2Myw3ICszODY0LDExIEBAIFNjcm9sbGFibGVBcmVh
KiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxh
eWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9
IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogSW50UmVjdCBGcmFt
ZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggZjY0OGQ2ZTIyYjE3NmIzOTcy
MjZiZjY5OTRjYzZiODRkMDIyZThmYy4uMWQ0Yzg2MTE3NmZlZGVmMjA2NGUyMjAyMzYzOTAxNDU2
Mzg0MWQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpA
QCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW1wb3J0
ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RCb3guaCIKICNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtNzkxLDcgKzc5MiwxMiBA
QCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRlckJveCYg
Ym94KQogICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyTGlzdEJveD4oJmJveCk7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgaWYgKGJveC5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4gaW4gdGVybXMgb2YgU2Nyb2xsYWJsZUFyZWE6OmVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CmluZGV4IDZiOWMxMTY2ZTk3YjM5YzIyZWYyNzgzYzJjMDJlZjY3ZDJhOTNjZWQuLjA2ZjVjMjVm
YTQ0MDhkNTRiMjQxNmExNzFkMjE5NDM1YzRiMTdhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCkBAIC05MjEsNiArOTIxLDI3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3Jv
bGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJl
c0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgUmVuZGVyVmll
dyBpcyBhbHdheXMgZXhwZWN0ZWQgdG8gYmUgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZS4KKyAgICBp
ZiAoaXNSZW5kZXJWaWV3KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE92ZXJmbG93IGhhbmRsaW5nIG5lZWRzIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBSZXNpemUgaGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS4KKyAgICBpZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTWFycXVlZSBoYW5kbGluZyBuZWVkcyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLgorICAgIGlmIChpc0hUTUxNYXJxdWVlKCkgJiYgc3R5bGUoKS5t
YXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBGSVhNRTogVGhpcyBpcyBiYWRs
eSBuYW1lZC4gb3ZlcmZsb3c6aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVk
LCB5ZXQgdGhpcyByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZS4KIGJvb2wgUmVuZGVyQm94Ojpj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAppbmRleCA2MDRlYTlhNWQ3N2ViYTI2NmFmNTU0NDk4YjUzOWMwOGQ0YjJj
NDNhLi4wZmI4NzNkMjYxOWUxNWVlNjI5MDQ4NzY3MzcyMTA2YTcxM2IyNTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHx8ICFzdHlsZSgpLmhhc0F1dG9Vc2VkWkluZGV4KCkgfHwgaGFzUnVubmluZ0FjY2Vs
ZXJhdGVkQW5pbWF0aW9ucygpOwogICAgIH0KIAorICAgIGJvb2wgcmVxdWlyZXNMYXllcldpdGhT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3Bh
cXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QgZmluYWw7CiAgICAg
CiAgICAgLy8gUmV0dXJucyBmYWxzZSBmb3IgdGhlIGJvZHkgcmVuZGVyZXIgaWYgaXRzIGJhY2tn
cm91bmQgaXMgcHJvcGFnYXRlZCB0byB0aGUgcm9vdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDMzZjhlNmM5ZDA1ZWI1MTVmNDI5NTcxZWNjYjI5M2RhMWRl
N2Q4YWIuLmE5M2Q5YTA2MTgzZTViMWQ3ZTAzZmMwNTU2NmNlOWQxNzI4OWU4MWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJp
Z2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAg
LTk3LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1
ZGUgIlJlbmRlclJlcGxpY2EuaCIKQEAgLTMwMSwxOCArMzAzLDE1IEBAIFJlbmRlckxheWVyOjpS
ZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmpl
Y3QpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRp
dmVaT3JkZXJMaXN0KGZhbHNlKQogICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9w
YWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91
dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAg
LCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNv
bnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2Up
CiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9y
dChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNm
b3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMyMCwyMSArMzE5LDExIEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSkK
ICAgICAsIG1faGFzQ29tcG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzKGZhbHNlKQogICAg
ICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCi0gICAgLCBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2hhc1RyYW5zZm9ybWVk
QW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkK
ICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihm
YWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93
ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzU4LDE2ICszNDcsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVy
TGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQog
ICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9o
YXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCi0gICAgICAgIGlmIChyZW5kZXJCb3goKSkgewotICAgICAgICAgICAgbV9zY3JvbGxQ
b3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAg
ICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotICAgICAg
ICB9Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQpAQCAtMzc1LDI5
ICszNTQsMTAgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgaWYgKGluUmVzaXpl
TW9kZSgpKQogICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXpl
TGF5ZXJEZXN0cm95ZWQoKTsKIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVh
KHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5
ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJl
cigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9y
ZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9s
bENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigpOwotCisgICAgY2xlYXJMYXllclNjcm9sbGFi
bGVBcmVhKCk7CiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRv
UHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxNiw2ICszNzYsMjcxIEBAIFJlbmRlckxheWVyOjp+
UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04ocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhZmlyc3RDaGlsZCgp
KTsKIH0KIAorLy8gU3RhcnQgb2YgdGVtcG9yYXJ5IGdsdWUgY29kZSB0byBoZWxwIGxhbmRpbmcg
d2Via2l0Lm9yZy9iLzYwMzA1IChzcGxpdCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpCitTY3JvbGxUeXBlIFJlbmRlckxheWVyOjpjdXJyZW50
U2Nyb2xsVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHJldHVy
biBTY3JvbGxUeXBlOjpVc2VyOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzZXRDdXJyZW50U2Ny
b2xsVHlwZShTY3JvbGxUeXBlIHNjcm9sbFR5cGUpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKK30KKworU2Nyb2xsQW5pbWF0b3ImIFJlbmRlckxheWVyOjpzY3JvbGxB
bmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRvcigpOworfQor
CitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OnNjcm9sbE9mZnNldCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4geyAwLCAwIH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBjb25z
dCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXQsIG9wdGlvbnMp
OworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihvZmZzZXQsIGNsYW1waW5nKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9Y
UG9zaXRpb24oaW50IHgsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvWFBvc2l0aW9u
KHgsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQoreworICAg
IGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9YUG9zaXRpb24oeSwgb3B0aW9u
cyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2V0U2Nyb2xsUG9z
aXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9s
bGVkQXJlYSkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsQnlSZWN1cnNpdmVseShkZWx0YSwgc2Nyb2xsZWRBcmVhKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbikKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKHJlcXVpcmVzUmVjb25jaWxpYXRpb24pOworfQorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykKK3sKKyAgICBpZiAo
IWFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeworICAgICAgICBpZiAoIW1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCgpCit7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZEVuZFNjcm9sbCgpOwor
fQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hl
ZFN0YXRlKGJvb2wgc2hvdWxkQ2xlYXIpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRl
KHNob3VsZENsZWFyKTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCku
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCitib29sIFJl
bmRlckxheWVyOjpjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAoreworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1JlbmRlck1hcnF1ZWUqIFJlbmRlckxheWVyOjptYXJxdWVlKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPm1hcnF1ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwg
bG9jYWxQb2ludCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVy
bGF5Q29udHJvbHMpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCBwb2ludCwgZGFtYWdl
UmVjdCwgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBhaW50UmVzaXplcihjb250ZXh0
LCBwb2ludCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBwb2lu
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9s
bGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gYmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkYW1hZ2VSZWN0
LCBiZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXI6
OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIHsgMCwgMCB9OworfQorCitib29sIFJlbmRlckxh
eWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9w
dGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKHBvc2l0aW9uKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJvbVBvaW50KHBvaW50KTsKK30KKwor
U2Nyb2xsUG9zaXRpb24gUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKCk7Cit9CisKK0dy
YXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBj
b25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworU2Nyb2xsYmFyKiBSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1Njcm9sbGJhciogUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQo
KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KTsKKyAgICByZXR1
cm4gMDsKK30KKworaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBl
bnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSkK
K3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoY29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UpOworfQorLy8gRW5kIG9mIHRlbXBvcmFyeSBnbHVlIGNvZGUKKwogdm9pZCBS
ZW5kZXJMYXllcjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXImIGNoaWxkLCBSZW5kZXJMYXllciogYmVm
b3JlQ2hpbGQpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQg
PyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTk0Niw3
ICsxMTcxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxh
eW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbigmZmxhZ3MpOwotICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVk
ZWQoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdl
b21ldHJ5TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0
aGlzLCBwYXJlbnQoKSk7CkBAIC05NTQsNyArMTE4MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAg
Y2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0Nv
bnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAg
aWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXpl
KHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsK
QEAgLTk2Myw3ICsxMTg5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAg
IC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0
b3IgbGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rv
cihyb290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhy
b3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5wb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3Qp
KTsKICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEw
MzksMTQgKzEyNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIGZvciAoUmVuZGVy
TGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFw
LCBmbGFncyk7CiAKLSAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93
IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsK
LSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0
IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAog
ICAgIGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7
CiAgICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5
ZXJJbnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTEyNiwyNyArMTM0Niw2IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVw
YWludExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVy
ZXIoKS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVy
R2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRl
ckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9
IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBp
cyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVy
IHRvCi0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNl
c3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9s
bCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUK
QEAgLTExOTksMTIgKzEzOTgsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcAogICAgIC8vIG9m
IGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYg
cHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwogICAgIC8vIHVwZGF0ZWQgYWJvdmUu
CiAKLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAKICAgICBp
ZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQogICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFw
cGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKQEAgLTE2OTUsOCArMTg5MCwxMCBAQCBib29sIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+KiBmbGFncwogICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwogICAg
IGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFy
ZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9z
aXRpb24oKSkpKSB7CiAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJh
Y3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0g
ICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVu
dC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcG9zaXRp
b25lZFBhcmVudFNjcm9sbGFibGVBcmVhID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5pc0luRmxv
d1Bvc2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRl
cmVyKCkpKSB7CiAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRl
cklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5GbG93UG9z
aXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CkBAIC0xNzA2
LDggKzE5MDMsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNTRVJUKHBv
c2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94
U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAg
ICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlv
bigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYSA9
IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9p
bnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0
aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50
c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50
TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKQEAgLTE4MzksOSArMjAzOCw5IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09y
ZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKK1Jl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0
CiB7Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOworICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKQEAgLTE4NTIsMTUgKzIwNTEsMTUgQEAgc3RhdGljIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikK
ICAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKIH0KIAotc3RhdGlj
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQor
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBp
ZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFp
bmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNy
b3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihs
YXllcik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpIGNvbnN0CkBAIC0xODc0LDcgKzIwNzMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxm
LAogICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAm
JiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKICAgICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmll
cyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIo
Km5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgZm9yIChhdXRvKiBuZXh0
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmll
cyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKICAgICAgICAgaWYgKGlzQ29uc2lk
ZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCiAgICAgICAgICAgICByZXR1cm4gbmV4dExheWVy
OwogICAgIH0KQEAgLTE4ODIsNTAgKzIwODEsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0
cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Ci17
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZCgp
OwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5j
ZXN0b3IoKSBjb25zdAogewogICAgIFJlbmRlckxheWVyKiBjdXJyID0gcGFyZW50KCk7CkBAIC0y
NDUxLDE5ICsyNjA2LDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFuY2Vz
dG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDb2wKICAgICByZXR1cm4gdG9M
YXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50
KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJl
cigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAgaWYg
KHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0luc2lk
ZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJM
RShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3Jv
bGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVy
Zmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KICNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIGJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewpAQCAtMjQ5Mywz
MDUgKzI2MzUsMzMgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVy
cy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3N0
YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFt
ZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsK
LSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXll
cigpOwotfQorICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4cGxpY2l0bHkgZm9yYmlkZGVu
LCBwZXJtaXQgc2Nyb2xsaW5nLgorICAgIGlmIChmcmFtZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxl
bWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAg
IHJldHVybiB0cnVlOwogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3Zl
IG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9y
TGF5ZXIoKnRoaXMpOworICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBp
bml0aWF0ZWQgc2Nyb2xscyBzaG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCisgICAgaWYgKGZy
YW1lVmlldy53YXNTY3JvbGxlZEJ5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBGb3JiaWQgYXV0b3Njcm9sbHMgd2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJt
aXRzIG90aGVyIHByb2dyYW1tYXRpYyBzY3JvbGxzLAorICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0
byBhbiBhbmNob3IuCisgICAgcmV0dXJuICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3Rl
ZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK2Jvb2wgUmVuZGVyTGF5ZXI6OmFsbG93
c0N1cnJlbnRTY3JvbGwoKSBjb25zdAogewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNo
ZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3Vy
Y2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0IGlu
dCBzcGVlZFJlZHVjZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5n
RGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAg
ICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChz
dGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFk
anVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGlu
dD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0
YSkpKSArIDE7CisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KKyAgICAvLyBE
b24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3Rl
ZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgIC8vIEZJWE1FOiBJcyB0
aGlzIHN0aWxsIG5lZWRlZD8gSXQgdXNlZCB0byBiZSByZWxldmFudCBmb3IgU2FmYXJpIFJTUy4K
KyAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSAmJiAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5
bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1zdGF0
aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0
YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRo
KCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQp
Ci17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBv
dXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRo
ZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxh
c3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3Vz
TW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRl
bHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFi
cyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQg
dGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5z
ZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Ny
b2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJ
WE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBm
YWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5
TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNO
b25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJp
Y3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3Jv
bGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9s
bGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUg
c2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0g
ICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0g
c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVy
bygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwg
c2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVy
ZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAg
ICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEg
ZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRB
cmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hv
bGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVt
ZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9z
dExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRv
T2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxv
cHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBjb25z
dCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgU2Nyb2xsUG9z
aXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIHNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG9ZUG9zaXRpb24oaW50IHksIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngo
KSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYg
cG9zaXRpb24sIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBv
cHRpb25zKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xs
T2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlzIDw8ICIg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBvcHRpb25zLmNsYW1waW5nID09IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9s
bE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZz
ZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKG9wdGlvbnMudHlw
ZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgc25hcHBlZE9mZnNldCA9IGNlaWxlZEludFBvaW50KHNj
cm9sbEFuaW1hdG9yKCkuYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChjbGFt
cGVkU2Nyb2xsT2Zmc2V0LCBvcHRpb25zLnNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCkpOwotICAg
IGlmIChvcHRpb25zLmFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc25hcHBlZE9mZnNldCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gc25hcHBlZFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KHNuYXBwZWRPZmZzZXQpOwotICAgICAgICBpZiAoIXJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZShzbmFwcGVkUG9zaXRpb24sIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5jbGFt
cGluZykpCi0gICAgICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oc25hcHBl
ZE9mZnNldCwgb3B0aW9ucy5jbGFtcGluZyk7Ci0gICAgICAgIHNldFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7Ci0gICAgfQotCi0gICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3Np
dGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNj
cm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlv
biA9IHBvc2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5l
ZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVh
ciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFi
bGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdp
ZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3Jv
bGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9u
KTsKLSAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAg
ICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAg
ICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAg
ICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8
IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3Jv
bGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNj
cm9sbFhPZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZy
b21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAg
IGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhh
dmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewot
ICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkg
d2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4K
LSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1l
c3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0
TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRl
clZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9z
aXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVy
cyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0
ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRl
IGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXco
KS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJ
ZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJz
IG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVs
ZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcg
bGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxh
eWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyBy
ZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAg
ICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRp
b25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAv
LyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0
IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEg
c2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVz
Y2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIHBhaW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGll
cmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVw
ZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3Vs
YXIgcmVnaW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRl
cmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExh
eW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJl
bmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNh
cmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlv
dXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMo
KSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0K
LSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0
Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JG
YWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRp
c3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhp
ZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCkt
Pm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qg
c2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNS
ZXBhaW50KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50
Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xs
IGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRk
UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3Zl
cmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQo
KTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAg
ICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVs
ZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKLXsKLSAg
ICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNj
cm9sbGluZy4KLSAgICBpZiAoZnJhbWVFbGVtZW50QmFzZSAmJiBmcmFtZUVsZW1lbnRCYXNlLT5z
Y3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQg
c2Nyb2xscyBzaG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCi0gICAgaWYgKGZyYW1lVmlldy53
YXNTY3JvbGxlZEJ5VXNlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Ji
aWQgYXV0b3Njcm9sbHMgd2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJtaXRzIG90aGVy
IHByb2dyYW1tYXRpYyBzY3JvbGxzLAotICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0byBhbiBhbmNo
b3IuCi0gICAgcmV0dXJuICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Ny
b2xsSW5Qcm9ncmVzcygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjphbGxvd3NDdXJyZW50U2Ny
b2xsKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4g
b3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xh
bXAgcHJvcGVydHkuCi0gICAgLy8gRklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2Vk
IHRvIGJlIHJlbGV2YW50IGZvciBTYWZhcmkgUlNTLgotICAgIGlmIChyZW5kZXJlcigpLnBhcmVu
dCgpICYmICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOwotICAgIEFTU0VSVChib3gpOyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xp
cCBzZXQuCisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsgLy8gT25seSBib3hlcyBjYW4gaGF2ZSBvdmVyZmxvd0NsaXAgc2V0LgogCiAgICAgaWYgKHJl
bmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpKSB7
CiAgICAgICAgIC8vIFRoZSAicHJvZ3JhbW1hdGljYWxseSIgaGVyZSBpcyBtaXNsZWFkaW5nOyB0
aGlzIGFza3Mgd2hldGhlciB0aGUgYm94IGhhcyBzY3JvbGxhYmxlIG92ZXJmbG93LApAQCAtMjgw
OSw3ICsyNjc5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKIAogICAgIExheW91dFJlY3Qg
bmV3UmVjdCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7
CisgICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogCiAgICAgYXV0byBzY3JvbGxQb3NpdGlvbkNoYW5n
ZU9wdGlvbnNGb3JFbGVtZW50ID0gW3RoaXMsIG9wdGlvbnNdKEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgewpAQCAtMjgyMCw2ICsyNjkwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9
OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8g
RG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0
ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3
aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBp
biBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAt
MjgzMCwyMyArMjcwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBi
b3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxl
IGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+
Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAg
IC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwg
dGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAg
ICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28g
dGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0
aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQo
LXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VS
ZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRz
KDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAg
ICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xs
UGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlv
dXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhw
b3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0
KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9s
ZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoY2xhbXBlZFNjcm9sbE9mZnNldCwgc2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zRm9yRWxl
bWVudChib3gtPmVsZW1lbnQoKSkpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRE
aWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAg
ICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAg
ICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3Vu
ZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxh
YmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9u
c0ZvckVsZW1lbnQoYm94LT5lbGVtZW50KCkpLCByZXZlYWxSZWN0LCBsb2NhbEV4cG9zZVJlY3Qp
KQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAo
IXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCkBAIC0yODYwLDcg
KzI3MjYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExh
eW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50
IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRT
Y29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAg
ICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qg
dmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIGVs
ZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3duZXJFbGVtZW50LT5j
b250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVudC0+cmVuZGVyQm94
KCkgOiBudWxscHRyOwpAQCAtMjkzNiwyMyArMjgwMiw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGlu
c2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250
ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFp
bmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQg
bWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5n
IGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5n
QW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigp
KSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdV
cGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2Ug
dG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Ny
b2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRh
bnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAg
ICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRh
dGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4
cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhw
b3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgs
IGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYg
ZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBAIC0zMDk5LDcgKzI5
NDgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQtPnNldE1pbmltdW1T
aXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91dFNpemUgYWRqdXN0
ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwg
b2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5kZXJlci0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgIG5ld09mZnNl
dC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1c3RlZE9sZE9mZnNl
dC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAgfQpAQCAtMzEyMiwx
MDgwICsyOTcxLDE2MCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIH0KIAogICAgIGlm
IChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsK
LSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAg
ICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0
IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgp
IC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAg
TGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5n
Qm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQo
KSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdo
dCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0g
ICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRo
ZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3Ig
aW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNj
cm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShT
Y3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+IGdlc3R1cmVTdGF0
ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAodXNl
c0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCksIGdlc3R1cmVTdGF0
ZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgZ2VzdHVyZVN0YXRlKTsKLX0KLQotSW50
UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRl
bnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAg
ICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IElu
Y2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1
c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgp
OwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNp
emUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxl
U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNp
emUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0
cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJs
ZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwot
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRo
KHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAm
JiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRo
KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7
Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVy
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNj
cm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQot
Ci1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3Qp
IGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAg
IHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBz
Y3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21S
ZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBv
aW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9J
bnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7
Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlm
ICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1Np
emUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCku
d2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQot
ICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWln
aHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6
ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0g
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1
ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJl
bmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlk
RW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZs
b3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgp
Ci17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2Ug
dGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGlu
Z1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZl
bnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92
ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRv
JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNj
cm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0Jv
eFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAg
YXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
cikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNj
cm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhh
dmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
LSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVS
ZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Ny
b2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJT
aXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1
dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJh
clJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJh
clJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNp
emUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNj
cm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBh
dXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Qu
c2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
cmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNv
cm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRD
b3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJv
dHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9
OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1
bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZl
UmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9
IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJl
IG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBh
aW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIg
PT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRS
ZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldy
aXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUo
cmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Nj
cm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVj
dCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFu
Z2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5p
c0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZl
cnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5l
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50
LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+
bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9
IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0
dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7
Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5k
ZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRv
d25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBk
aWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChw
YWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1h
dG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0
b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxk
KCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9t
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
LCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAg
ICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3Zl
cmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Nj
cm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxl
LgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAg
aWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17
Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZs
b3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95
aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRv
IGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidz
IHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQot
U2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAm
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRv
KiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
IHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17
Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAg
aWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxl
bWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBi
b3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZz
ZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRk
aW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9
IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
LT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNl
bmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxl
dmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5k
ZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lk
dGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0Zp
bHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAg
aWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJh
Y2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxl
bmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7
Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBT
dHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0g
c3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJX
aWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAg
ICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndp
ZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8
IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgp
OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0g
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3Qu
bWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0
dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFy
IHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAh
bV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5k
ZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFt
ZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9o
QmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9t
Um9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1f
cmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7
Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VS
VChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndp
ZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkK
LSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUo
KSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xs
U2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3Ao
KSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5m
bGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0
LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFko
KTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3Qo
Ym94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUo
b3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5k
VG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNp
emUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkp
KTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93
IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJm
bG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAg
c2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xs
YWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94
KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
IW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4g
cm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRU
b0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xs
YmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6
IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8g
PSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQ
c2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVm
aW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNj
cm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dY
KCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VB
dXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5
bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092
ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRv
IHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5k
bGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
Ci0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFz
SG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhp
cy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMg
YSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAg
IGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCks
IEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9y
aXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxi
YXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJh
ci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMg
d2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFy
cyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFy
Q2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAm
JiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0g
ICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNj
cm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBo
YXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNo
YW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAg
ICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAg
ICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5y
ZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsK
LSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVy
KCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9y
aXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwot
ICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAg
ICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJl
bmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhp
YmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVu
ZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0
ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0
aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVw
ID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAg
IG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkp
OwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBy
b3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBT
Y3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3Rl
cHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1f
dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQot
Ci0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0g
ICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0K
LSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1
cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMg
c3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYg
KCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1
cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5l
ZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4
IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25n
LiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5n
IHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRv
IGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlz
IGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3
aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8x
NTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBl
ZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9z
aXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwot
ICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOwotICAgIH0K
LQotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRz
UG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJl
Y3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0g
cmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQg
PSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0
ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAot
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Ny
b2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBj
dXJzb3IgaW4gdmlldy4KIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKIHsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMg
YXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Ci0jZW5kaWYKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCBy
b3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIC8vIERvbid0
IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKIAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3Jv
bGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hS
ZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBh
aW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkg
d2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMg
dGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8v
IHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRo
YXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBw
YWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVy
IHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVu
LiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBz
ZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0
IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092
ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQg
PSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhl
IHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAg
ICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJh
ciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9j
YWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dD
b250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZl
UmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAK
LSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGlu
Z1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworICAgIE92ZXJmbG93Q29udHJvbFJl
Y3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXpl
KSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAg
ICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsg
Ym90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5o
ZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICAgICAgcGFpbnRpbmdSb290
LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25l
c3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3Jv
bGxiYXJUaGlja25lc3MgfSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJl
ZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYg
KHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworICAgIHJldHVy
biByZXN1bHQ7Cit9CiAKLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNl
c3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0
LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBv
Y2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0g
ICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CitTdHJpbmcg
UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgp
LndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIE5vdyB0aGF0IHdlJ3Jl
IHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4K
LSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAg
ICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYm
ICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29u
dGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3Jv
bGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3Qg
cnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBw
YWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0
KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9u
IHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRq
dXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKGhhc0JhY2tkcm9wRmls
dGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAg
ICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgaWYg
KGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXNvbGF0
ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5n
Il9zKTsKIAotICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJl
dHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRT
dHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJh
cnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAg
aWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNp
emVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNp
emVyQ29ybmVyUmVjdCkKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3Ju
ZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdl
PiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0g
ICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VI
aVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAy
eCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVy
SW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFn
ZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3Ju
ZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXpl
Q29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVD
b3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5l
ckltYWdlLT5zaXplKCk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNp
emUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVp
Z2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2Up
Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQu
cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXpl
Q29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhN
YXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3
SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcmVzaXplclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29y
bmVyID0gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91
dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0
Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3Rz
KGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlk
YXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAg
IG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFi
c1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFdpZHRoKCk7CiAKLSAg
ICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0
aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4
Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAo
IWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAg
Y29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJD
b3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5
b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQo
KSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90
PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29y
bmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92
ZXJmbG93UmVjdC54KCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVD
b250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9s
bEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50
KG92ZXJmbG93UmVjdC5tYXhZKCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCgpCiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2Fu
UmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworfQogCi0gICAgSW50UmVjdCByZXNpemVDb250cm9s
UmVjdDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZSkgewotICAgICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KK2Jvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0
IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVz
dWx0LgotICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhs
b2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJl
bmRlckxheWVyOjpoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKLSAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkgewotICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhs
b2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJl
bmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBSZW5kZXJMYXllcjo6
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBp
ZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2
ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQyMTMsMTcgKzMxNDIsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkK
LXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9z
aW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0
cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFp
bnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6
Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxl
KQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00NzQ5LDggKzM2NjcsMTAgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygp
LCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhh
c1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsK
KyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygp
KQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdl
IGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMg
cmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIyMCwxMSArNDE0MCwx
MyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRz
KGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAg
ICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7
IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRy
b2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0lu
Zm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdt
ZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQ
YWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0
KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3Jl
Q2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qp
OwogICAgIH0KQEAgLTUyNjMsNyArNDE4NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAg
ICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rv
cik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3
cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVy
c2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVn
YWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50
ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChT
Y3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAog
ICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRy
LCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsK
QEAgLTU0OTQsNyArNDQxNiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExh
eWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9m
ZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9p
bnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5
ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2Fu
UmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0
UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2Fs
UG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTY5LDM1ICs0
NDkxLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAo
bGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25z
dCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsK
LSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkg
ewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJl
Y3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkg
LSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQo
KSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9m
ZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJl
c2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJh
Z21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJl
c2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZv
ciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAg
ICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkp
OwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdt
ZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7
Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RM
b2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlv
bi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5
b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAt
NjA1OSw3ICs0OTUyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9u
R2FwcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzOwotICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmVjdC5tb3ZlQnkoLW1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICByZWN0Lmlu
dGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qo
TGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVk
IGZvci4KICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCkBAIC02MzU3LDIxICs1MjUxLDYg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVy
biBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/
IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQot
R3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5l
cigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9y
bShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBi
b29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRz
SW50b1dpbmRvdygpOwpAQCAtNjQwMiwxMSArNTI4MSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNo
b3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Is
IE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50
aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Ny
b2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNP
dmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
IWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQpAQCAtNjY0Nyw3ICs1NTIxLDcgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6aGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBp
ZiAoIWhhc1Zpc2libGVDb250ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCk7CisgICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dy
b3VuZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJm
bG93Q29udHJvbHMoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0
eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CkBAIC02NjU3LDcgKzU1MzEs
NyBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRS
ZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSB8fCAh
cmVuZGVyZXIoKS5zdHlsZSgpLm9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q29udHJv
bHMoKSkgeworICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCAobV9zY3Jv
bGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpKSB7
CiAgICAgICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02
NjgyLDM4ICs1NTU2LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBh
aW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1w
dHlDaGlsZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkK
LXsKLSAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93
WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBi
b3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5
b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1
dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVl
ZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJh
cihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVy
dGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgp
LCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIo
bmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihu
ZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZs
b3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2Fi
bGVkLgotICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8g
cmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAg
ICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRz
VmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09
IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAg
ICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsK
LX0KLQogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25s
eShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjczNCw2ICs1NTc2LDggQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogICAgIH0KIAorICAgIHVwZGF0ZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKwogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMg
dmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhp
cyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVz
dC4KICAgICBpZiAob2xkU3R5bGUpIHsKQEAgLTY3NDUsMTggKzU1ODksMTQgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5w
dXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0
eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgbV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCk7CiAgICAgfQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFy
cXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVl
QmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9t
YXJxdWVlKQotICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVl
Pih0aGlzKTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9
IGVsc2UgaWYgKG1fbWFycXVlZSkKLSAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKLQotICAg
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkgeworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jcmVhdGVPckRlc3Ry
b3lNYXJxdWVlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICB9CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxi
YXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8g
dG8gcmVjb21wdXRlIHRoZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgog
ICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CkBAIC02NzcxLDEzICs1NjExLDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
ZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2Ug
dmVyc2EpLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAK
LSAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51
cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKTsKIAogICAgIHVwZGF0ZURlc2NlbmRhbnRE
ZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjc5OCw5OCArNTYz
Myw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBG
cmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0g
ICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3Rp
bmcoKTsKLSAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5m
cmFtZSgpLm93bmVyRWxlbWVudCgpKQotICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3du
ZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3Rpbmco
KTsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9I
aXRUZXN0OwotICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NF
UlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOwotICAgIAotICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAg
aWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJl
bW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVk
ID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lz
dGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQotICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3Jv
bGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2Nl
bGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAg
Ly8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5l
ci4KLSAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRP
clJlbW92ZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRl
cmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0
eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxl
KCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xs
Q29ybmVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29y
bmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Ny
b2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAg
ICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVu
dCEKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAg
ICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpjbGVhclNjcm9sbENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENv
cm5lcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVs
bHB0cik7Ci0gICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVSZXNpemVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNp
emVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRV
bmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xl
YXJSZXNpemVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXpl
cikgewotICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQ
YXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAg
Ly8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAg
ICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6
ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNl
dFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJS
ZXNpemVyKCkKLXsKLSAgICBpZiAoIW1fcmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
cmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19
Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9yZWZsZWN0aW9uID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0
cjsKQEAgLTY5NzEsNiArNTcxNCwyNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyRmls
dGVycygpCiAgICAgbV9maWx0ZXJzID0gbnVsbHB0cjsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAg
IGJvb2wgaGFkU2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghbV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYSA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4oKnRoaXMpOworCisgICAgaWYgKCFoYWRTY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c3RvcmVTY3JvbGxQb3NpdGlvbigpOwor
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQorCit2b2lkIFJlbmRlckxheWVy
OjpjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNsZWFyUmVzaXplcigpOworICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhID0gbnVsbHB0cjsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZp
bHRlcnNBZnRlclN0eWxlQ2hhbmdlKCkKIHsKICAgICBpZiAoIWhhc0ZpbHRlcigpKSB7CkBAIC02
OTg3LDYgKzU3NTAsMTYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5
bGVDaGFuZ2UoKQogICAgICAgICBtX2ZpbHRlcnMtPnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVu
dHMoKTsKIH0KIAordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpIHx8ICFkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgewor
ICAgICAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKK30KKwogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5
ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUg
bW9kZSwKQEAgLTcwMjEsNyArNTc5NCw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5
ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFy
ZW50ID0gbGF5ZXIucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1
cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFu
c3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdApAQCAtNzA0Myw2ICs1ODE2LDEx
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNpbXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xl
UGFpbnRGcmVxdWVuY3lUcmFja2luZyB7IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCku
bGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2
ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHJlYXNvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggMzZhMDZhNGJmYjIzNTk1Mzg0ZGFjODFjZTYwMzMzNjY1
NTA0ODNkYS4uZmFjZTFkOTdhZGUxYzQ1M2Q2OWM1ZTI5MDA2ODQ0NDU3ZTc2N2U4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBv
cnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29y
cG9yYXRpb24uCiAgKgpAQCAtNTEsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgog
I2luY2x1ZGUgIlJlbmRlclB0ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3Rm
L01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAg
Y2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFz
cyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFz
cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNz
IFJlbmRlclJlcGxpY2E7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsx
NDQsNzIgQEAgc3RydWN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9s
bGluZ1Njb3BlID0gdWludDY0X3Q7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNj
cm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lE
RU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJS
ZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwog
CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAg
IHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KTsKKworICAgIC8vIFN0YXJ0IG9mIHRlbXBvcmFyeSBnbHVlIGNvZGUgdG8gaGVscCBsYW5kaW5n
IHdlYmtpdC5vcmcvYi82MDMwNSAoc3BsaXQgUmVuZGVyTGF5ZXIgaW50byBSZW5kZXJMYXllci9S
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKQorICAgIFNjcm9sbFR5cGUgY3VycmVudFNjcm9sbFR5
cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1cnJlbnRTY3JvbGxUeXBlKFNjcm9sbFR5cGUpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgPSBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpYygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgdm9pZCBzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7Cisg
ICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFu
Z2VPcHRpb25zJik7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworICAgIHZvaWQgc2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKTsKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKGJvb2wpOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCk7CisjZW5kaWYKKyAgICB2
b2lkIHNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKGJvb2wpOworICAgIGJvb2wgc2hv
dWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0OworICAgIGJvb2wg
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3Jv
bGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgUmVuZGVyTWFycXVlZSogbWFy
cXVlZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50
U2Nyb2xsKCk7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2
b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBS
ZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKyAgICBJbnRTaXplIHJl
YWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3Q7CisgICAgYm9vbCBob3Jpem9udGFsU2Ny
b2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgdmVydGljYWxTY3JvbGxiYXJI
aWRkZW5CeVN0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRp
b24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2lu
dChjb25zdCBJbnRQb2ludCYpOworICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkg
Y29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkg
Y29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNv
bnN0OworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0OworICAgIFNj
cm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBib29sIHNjcm9sbGluZ01h
eVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJm
bG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9y
aXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhh
c0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFy
KCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVy
dGljYWxTY3JvbGxiYXIoKTsgfQorICAgIGludCB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJs
YXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNv
bnN0OworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJT
aXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUpIGNvbnN0OworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxKTsKKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09m
ZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWNVbmNsYW1wZWQoKSk7IH0KKyAgICB2b2lk
IHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoc2Ny
b2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zOjpjcmVhdGVQ
cm9ncmFtbWF0aWNVbmNsYW1wZWQoKSk7IH0KKyAgICB2b2lkIHNldENvbnN0cmFpbnNTY3JvbGxp
bmdUb0NvbnRlbnRFZGdlKGJvb2wpOworICAgIC8vIEVuZCBvZiB0ZW1wb3JhcnkgZ2x1ZSBjb2Rl
CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIENhbGxlZCBiZWZvcmUgdGhlIHJl
bmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51bGxlZCBvdXQuCiAgICAgdm9pZCB3
aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyNzksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFnKSB7IG1fbGF5ZXJMaXN0TXV0YXRp
b25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGRlc3Ry
b3koKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9wYWdhdGUgaW4gcGFpbnQg
b3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21wb3NpdGluZyB7CkBAIC00
MTEsOCArNDcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNoYW5nZWQoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0gICAgUmVuZGVyTWFycXVl
ZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQotCiAgICAgYm9v
bCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlbGZQYWludGluZ0xh
eWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNvbnN0OwpAQCAtNDMzLDEw
NiArNDkwLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0
dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0gICAgSW50U2l6ZSB2aXNp
YmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVudHNTaXplKCkgY29uc3Qg
ZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0IGZp
bmFsOworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdDsKIAogICAgIGludCBzY3JvbGxX
aWR0aCgpIGNvbnN0OwogICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKIAotICAgIHZvaWQg
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICAvLyBTY3JvbGxpbmcg
bWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBvdmVyZmxvdy4KLSAgICB2
b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVB
cmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7Ci0KLSAgICBib29sIHJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxU
eXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5h
bDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xs
T2Zmc2V0JiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiA9IFNjcm9sbFBvc2l0
aW9uQ2hhbmdlT3B0aW9uczo6Y3JlYXRlUHJvZ3JhbW1hdGljKCkpOwotCi0gICAgdm9pZCBzY3Jv
bGxUb1hQb3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7
Ci0gICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQ
b3NpdGlvbiYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOwotCi0gICAgLy8g
VGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0
KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55
KCkpLCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xh
bXBlZCgpKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQotCi0gICAgdm9p
ZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsK
LSAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKTsKLQogICAg
IC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRoYXQgaXMgc2Nyb2xsYWJs
ZS4KICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5kZXJWaWV3J3MgbGF5ZXIg
d2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBhcyBhIFNjcm9sbGFibGVB
cmVhLgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OwogCi0gICAgdm9pZCBhdmFpbGFi
bGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbikgZmluYWw7Ci0K
ICAgICAvLyAiYWJzb2x1dGVSZWN0IiBpcyBpbiBzY2FsZWQgZG9jdW1lbnQgY29vcmRpbmF0ZXMu
CiAgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRl
UmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMm
KTsKLQotICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3Jv
bGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Nyb2xsYmFycygpIGNvbnN0
IHsgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAgICB2b2lkIHNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIoYm9vbCk7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sKTsK
LQotICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlv
bik7Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKLQot
ICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250
YWxTY3JvbGxiYXIoKTsgfQotICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7
IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9Ci0KLSAgICBib29sIGhvcml6b250YWxTY3Jv
bGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCB2ZXJ0aWNhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFNjcm9sbGFibGVBcmVh
IG92ZXJyaWRlcwotICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQotCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFyLmdldCgpOyB9Ci0gICAg
U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdkJh
ci5nZXQoKTsgfQotICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgp
IGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIE9wdGlvbmFsPFdoZWVsU2Nyb2xsR2VzdHVyZVN0YXRl
PikgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkgZmluYWw7
Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCkgZmluYWw7
Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFsOwotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIGZpbmFsOwotI2Vu
ZGlmCi0KLSAgICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uOyB9Ci0g
ICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1
aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KLQotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBoYW5kbGVU
b3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOwotI2VuZGlmCi0gICAg
Ci0gICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRW5kU2Nyb2xs
KCkgZmluYWw7Ci0gICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5hbDsKLSNlbmRpZgotCiAg
ICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRvIHRvdWNoIHNjcm9sbGlu
ZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFjdHVhbGx5IHNjcm9sbGFi
bGUgb3ZlcmZsb3cuCiAgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7
CiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBv
dmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUpLgotICAgIGJvb2wgaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9z
aXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFi
bGVPdmVyZmxvdygpIGNvbnN0OwogCi0gICAgaW50IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3Zl
cmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkg
Y29uc3Q7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJh
clNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAg
Ym9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCkgY29uc3Q7CiAgICAgYm9vbCBpc1BvaW50SW5SZXNpemVDb250cm9sKEludFBv
aW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMo
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXpl
IG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0
OwogCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsK
LSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2lu
dCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVTY3Jv
bGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICB2b2lkIGF1dG9z
Y3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAogICAgIGJvb2wgY2FuUmVzaXplKCkgY29uc3Q7CkBA
IC01NTUsOSArNTM1LDYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5
b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVsbFJlcGFpbnQpOwogCi0g
ICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLSAgICB2
b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpOwotCiAgICAgYm9v
bCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25DaGFpbigpIGNvbnN0Owog
ICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgeyBFeGNsdWRlQ29tcG9zaXRlZFBhZ2lu
YXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXllcnMgfTsKICAgICBSZW5k
ZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKFBhZ2luYXRpb25JbmNsdXNpb25Nb2Rl
IG1vZGUpIGNvbnN0CkBAIC02MzcsNiArNjE0LDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlwZSkgY29uc3Q7CiAgICAg
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigp
IGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXllciByZWxhdGl2ZSB0byB3
aGljaCBjbGlwcGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29tcHV0ZWQuCiAgICAgUmVu
ZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7CkBAIC02OTgsNyArNjc3
LDYgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBu
dWxscHRyLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBTZWN1cml0eU9yaWdpblBh
aW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55T3JpZ2luLCBFdmVudFJl
Z2lvbkNvbnRleHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVzdChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RSZXN1bHQmKTsKLSAgICB2
b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVjdCBDbGlwUmVjdHNDb250
ZXh0IHsKICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5kZXJMYXllciogaW5Sb290
TGF5ZXIsIENsaXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVybGF5U2Nyb2xsYmFyU2l6
ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3Zlcmxh
eVNjcm9sbGJhclNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAgaW5SZXNwZWN0T3ZlcmZs
b3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSArNzYyLDYgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikg
eyBtX3N0YXRpY0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAgICB2b2lkIHNldFN0YXRp
Y0Jsb2NrUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0Jsb2NrUG9zaXRp
b24gPSBwb3NpdGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdo
ZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmc7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBy
ZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdHJhbnNm
b3JtIGhhcyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCogdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm0uZ2V0KCk7IH0K
QEAgLTg1OCwxNiArODMxLDExIEBAIHB1YmxpYzoKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGVu
c3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29sIGxheWVyQmVpbmdEZXN0
cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JT
Y3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0
IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvcjsgfQogICAgIHZvaWQg
c2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9s
bGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yID0gaGFzQ29t
cG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKKyAgICBib29sIHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3Q7CisKICAgICAvLyBMYXllcnMgd2l0aCB0aGUgc2FtZSBTY3JvbGxpbmdT
Y29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Igc2Nyb2xsZXIuIFVzZWQg
Zm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gYm94U2Ny
b2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGluZ1Njb3BlOyB9CiAgICAg
T3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4NSwxMSArODUzLDYgQEAg
cHVibGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGluIGxvY2FsIGNvb3JkaW5h
dGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVlSW5SZWN0KGNvbnN0IExh
eW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3Vu
ZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIHZv
aWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZGlydHlTY3JvbGxiYXJz
KSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGlydHlTY3JvbGxiYXJzOyB9
Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCByZXF1aXJl
c0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05MTgsOCArODgxLDYgQEAg
cHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5jZXN0
b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCkuc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRpbmdGcmVxdWVudGx5KCkg
Y29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFpbnRpbmdGcmVxdWVudGx5
KCk7IH0KIApAQCAtOTMwLDcgKzg5MSw3IEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEV2ZW50
UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdEaWRDaGFuZ2UsIFN0eWxl
LCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRhdGVFdmVudFJlZ2lvbihF
dmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJpbmcgZGVidWdEZXNjcmlw
dGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArOTcxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
dXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0Fm
dGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICB2b2lkIHVw
ZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAgICAgICAgICAgICAgICA9
IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2luZyAgICAgICAgICAgPSAx
IDw8IDEsCkBAIC0xMDM4LDggKzk5Niw2IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVw
ZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0cnlNYXAqLCBPcHRpb25T
ZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0geyB9KTsKIAotICAgIFNj
cm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBjb25zdDsK
LQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXJJblN1YnRyZWUoY29u
c3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUpIGNvbnN0
OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1Myw2ICsxMDA5LDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGVuc3VyZUxheWVyRmlsdGVycygpOwogICAgIHZvaWQgY2xlYXJMYXll
ckZpbHRlcnMoKTsKIAorICAgIHZvaWQgdXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAg
IHZvaWQgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICBSZW5kZXJMYXllckZpbHRl
cnMqIGZpbHRlcnNGb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQmLCBPcHRpb25TZXQ8UGFpbnRM
YXllckZsYWc+KSBjb25zdDsKICAgICBHcmFwaGljc0NvbnRleHQqIHNldHVwRmlsdGVycyhHcmFw
aGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRp
b25TZXQ8UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdCk7
CiAgICAgdm9pZCBhcHBseUZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBvcmlnaW5hbENvbnRleHQs
IGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBjb25z
dCBMYXllckZyYWdtZW50cyYpOwpAQCAtMTA5OSw2NCArMTA1OCwxMyBAQCBwcml2YXRlOgogICAg
IAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhpdFRlc3RDb250ZW50c0Zv
ckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIsIGJv
b2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5kZXJMYXllciogaGl0VGVz
dFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5k
ZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJl
c3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqID0gbnVsbHB0ciwg
ZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxpc3RCYWNrZ3JvdW5kSXNL
bm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29uc3QgTGF5b3V0UmVjdCYp
IGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHZvaWQg
Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKLQotICAgIGJvb2wgaGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93
KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OwotCiAg
ICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7CiAKLSAgICAvLyBTY3Jv
bGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
Q29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7
Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3QgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAg
ICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Ny
b2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIHNldFNjcm9s
bE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBTY3JvbGxpbmdOb2RlSUQg
c2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRSZWN0IHZpc2libGVDb250
ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlz
aWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgb3Zlcmhh
bmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0
aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgp
IGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNVc2VyU2Ny
b2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWlu
VGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7Ci0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBm
aW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZp
bmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcm
KSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIHZvaWQg
cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotICAgIHZvaWQgdW5y
ZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0jZW5kaWYKLQotICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZGVuIHNl
dFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZvaWQgc2Nyb2xsVG8oY29u
c3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0
ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJh
ciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBo
YXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJyZW50U2Nyb2xsKCkgY29uc3Q7
CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNjZW5kYW50U3RhdHVzKCk7
CkBAIC0xMTk2LDE0ICsxMTA0LDYgQEAgcHJpdmF0ZToKICAgICAvLyBDb252ZXJ0IGEgcG9pbnQg
aW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0YWtpbmcgdHJhbnNmb3JtcyBp
bnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29udGVudHMoY29uc3QgTGF5
b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGNv
bnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7Ci0gICAg
dm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBkYXRlUmVzaXplclN0eWxlKCk7
Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJS
ZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwogCiAgICAgdm9pZCBzZXRIYXND
b21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFu
dCA9IGI7IH0KQEAgLTEyMTIsMTEgKzExMTIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SW5k
aXJlY3RDb21wb3NpdGluZ1JlYXNvbihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uIHJlYXNvbikg
eyBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVh
c29uKTsgfQogICAgIGJvb2wgbXVzdENvbXBvc2l0ZUZvckluZGlyZWN0UmVhc29ucygpIGNvbnN0
IHsgcmV0dXJuIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjsgfQogCi0gICAgTGF5b3V0VW5p
dCBvdmVyZmxvd1RvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBj
b25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OwotICAgIExheW91dFVu
aXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OwotCiAgICAgc3RydWN0IE92ZXJmbG93Q29udHJvbFJl
Y3RzIHsKICAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFyOwogICAgICAgICBJbnRS
ZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtMTIyOSw4ICsxMTI0LDYgQEAgcHJpdmF0ZToKICAg
ICB9OwogICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNv
bnN0OwogCi0gICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRS
ZWN0JiBsb2NhbFJlY3QpIGNvbnN0OwotCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nPiBtX2Nv
bXBvc2l0aW5nRGlydHlCaXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lzUmVuZGVyVmlld0xheWVy
IDogMTsKQEAgLTEyNDcsNyArMTE0MCw2IEBAIHByaXZhdGU6CiAgICAgLy8gS2VlcHMgdHJhY2sg
b2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5nLCBzbyBldmVudHMgY2Fu
IGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgogICAgIGJvb2wgbV9pblJlc2l6ZU1v
ZGUgOiAxOwogCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA6IDE7CiAgICAgYm9v
bCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYgaGF2ZSBubyBzZWxmLXBh
aW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsgb3VyIGNoaWxkcmVuIGR1
cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwxNCArMTE1MSwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZW5kZWQgdXAg
cGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFuZCB0aGVyZWZvcmUgbmVl
ZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxlbmQpLgogICAgIGJv
b2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBzdGF0ZSBiaXQgdHJhY2tp
bmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0gICAgYm9vbCBtX2luT3Zl
cmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50U3RhdHVzIDogMjsgLy8g
UmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgOiAx
OwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAgYm9vbCBtX3Zpc2libGVE
ZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlRGVzY2VuZGFu
dCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA6IDE7CiAgICAgYm9v
bCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAgYm9vbCBtX2JlaGF2ZXNB
c0ZpeGVkIDogMTsKIApAQCAtMTI3Nyw3ICsxMTY3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
bV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMgOiAxOwogICAgIGJvb2wgbV9o
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJbiB0aGUgbGF5ZXItb3JkZXIg
dHJlZS4KLSAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CiAK
ICAgICBib29sIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CiAgICAgYm9vbCBtX2hhczNE
VHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CkBAIC0xMjg3LDE3ICsxMTc2LDYgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gOiA0OyAvLyBJbmRpcmVj
dENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3cG9ydENvbnN0cmFpbmVkTm90
Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9s
bGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJh
cnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA6IDE7Ci0KICNpZiBB
U1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgOiAxOwog
I2VuZGlmCkBAIC0xMzM4LDI1ICsxMjE2LDExIEBAIHByaXZhdGU6CiAgICAgLy8gVGhlIGxheWVy
J3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsKIAotICAgIFNjcm9sbFBv
c2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IG1f
cG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBv
dXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6ZTsKLQotICAgIC8vIEZv
ciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KLSAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFy
OwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBtX2NsaXBSZWN0c0NhY2hl
OwotICAgIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9sbGJhck9mZnNldDsKIAog
ICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9s
bGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKICAgICBNYXJrYWJsZTxTY3JvbGxp
bmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdTY29wZSwgMD4+IG1fY29u
dGVudHNTY3JvbGxpbmdTY29wZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJNYXJxdWVl
PiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAKICAgICAvLyBDYWNoZWQg
bm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnRzIHdpdGgg
c3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1fc3RhdGljSW5saW5lUG9z
aXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRpb247CkBAIC0xMzY2LDEw
ICsxMjMwLDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVseSBiZSBleHRlbmRlZCB0
byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRlcikuCiAgICAgUmVuZGVy
UHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8vIFJlbmRlcmVycyB0byBo
b2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4KLSAgICBSZW5kZXJQdHI8
UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAgUmVuZGVyUHRyPFJlbmRl
clNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGVuY2xv
c2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdpbmF0ZWQuIEl0IGlzIDAg
aWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9lbmNs
b3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKQEAgLTEzNzcsNiArMTIzNyw3IEBAIHByaXZhdGU6CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJGaWx0ZXJzPiBtX2ZpbHRlcnM7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyQmFja2luZz4gbV9iYWNraW5nOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPiBtX3Njcm9sbGFibGVBcmVhOwog
ICAgIAogICAgIFBhaW50RnJlcXVlbmN5VHJhY2tlciBtX3BhaW50RnJlcXVlbmN5VHJhY2tlcjsK
IH07CkBAIC0xNDQ5LDYgKzEzMTAsMyBAQCB2b2lkIHNob3dQYWludE9yZGVyVHJlZShjb25zdCBX
ZWJDb3JlOjpSZW5kZXJMYXllciopOwogdm9pZCBzaG93TGF5ZXJUcmVlKGNvbnN0IFdlYkNvcmU6
OlJlbmRlck9iamVjdCopOwogI2VuZGlmCiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6UmVuZGVyTGF5ZXIpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OlNjcm9sbGFibGVBcmVhJiBhcmVhKSB7IHJldHVybiBhcmVhLmlzUmVuZGVyTGF5ZXIoKTsg
fQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAxMWQ5NGExMWU4Y2ZlZDI2N2M4NTUx
MjgyNjJiZmU3MjBkM2YwYzA3Li4xMGI3NjIyZDQxMDEwN2FlZWUzMjg3ZDcyZGIyN2ExNWEzY2Q1
MmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dnaW5nQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1Ry
YWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgogI2luY2x1ZGUgIlJl
bmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cu
aCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVkZSAiUmVuZGVySUZyYW1l
LmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBv
c2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNZWRpYS5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtMjA2NSwx
MCArMjA2NiwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250
cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAgIGxheWVyc0NoYW5nZWQg
fD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENvcm5lciwgbmVlZHNTY3Jv
bGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAogICAgIGlmIChhdXRvKiBz
Y3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxi
YXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAg
ICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQotICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2Uo
bV9vd25pbmdMYXllciwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICBpZiAoYXV0byogc2Ny
b2xsYWJsZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAg
ICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQorICAgICAgICAgICAgICAg
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hh
bmdlKCpzY3JvbGxhYmxlQXJlYSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBp
ZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAgICAgICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNj
cm9sbGFibGVBcmVhLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZmYxMjMwZWRlOGE4NmE4ODhmMjMyMzEz
ZmMzZjg1NzFjYmM2MzBjNC4uYzhhMGZhMjZkZmVkMmIwMzMyMDRjNzcxMjJiODVkZDIxMzY3Y2E1
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJJRnJhbWUuaCIKICNp
bmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJS
ZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCkBAIC00NzI1LDggKzQ3MjYsMTAgQEAgU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1JvbGUoUmVuZGUKICAgICAg
ICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6OkxheWVyKQogICAgICAg
ICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQsIGxheWVyLCAqc2Nyb2xs
aW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNo
YW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnROb2RlSUQpCi0gICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5nTm9kZVNjcm9sbGFibGVB
cmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlmIChjaGFuZ2VzICYgU2Ny
b2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJlbnRO
b2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci5z
Y3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5z
ZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdOb2RlSUQsICpzY3JvbGxh
YmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIG5ld05vZGVJRDsKQEAg
LTQ5MDEsNyArNDkwNCw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGluCiAgICAgaWYgKG5vZGVJ
RCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9kZUlEKCkpCiAgICAgICAg
IHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAgcmV0dXJuIG1fc2Nyb2xs
aW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAgcmV0dXJuIG1fc2Nyb2xs
aW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIHZv
aWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xsaW5nTGF5ZXJXaXRoQmFj
a2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2luZyYgYmFja2luZykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNw
cAppbmRleCAwNTJhOWM3NWU2MzU1NmEzZWVhYmJmZGYxYzIyMWJlM2MxM2I0Y2FjLi5jN2ZjNjZj
NzAxM2I3ZThkZTZhYTA2YzQzMTNiZDI5YTgxODUxYWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCkBAIC0xNzYsOCArMTc2
LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbmV3
U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3JvbGxTbmFwQ29udGFpbmVy
UmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5ld1N0eWxlKSkgewogICAg
ICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIoKSkgewotICAgICAgICAg
ICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAgICAgICAgICByZW5kZXJM
YXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAgICBhdXRvKiBzY3JvbGxh
YmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOworICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0cygpOworICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICAgICAgfSBl
bHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRlcmVyKCkpIHsKICAgICAg
ICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1lVmlldygpOwogICAgICAg
ICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0xOTUsOCArMTk2LDkgQEAg
dm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9sbFNuYXBCb3ggJiYgc2Ny
b2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAgIGlmIChzdHlsZS5zY3Jv
bGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmljdG5lc3M6Ok5vbmUpIHsK
LSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51cGRhdGVTbmFwT2Zmc2V0
cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPnVwZGF0ZVNjcm9s
bFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHNj
cm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAg
ICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7CisgICAgICAg
ICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwgc2Nyb2xsU25hcEJveC0+
aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgICAgICBzY3JvbGxT
bmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5nQ29vcmRpbmF0b3JTY3Jv
bGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuY3BwCmluZGV4IDg5OTll
MDAzN2ExNTI3ZWJjZGMzNWZhMTc1ODY4YmNkMjdhZWM3YWYuLjJjNmYzYmUwODNmYWQ4OTRiZTZl
NDdlNzJlZDcxZTE4NGI5YTA3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTQ5LDEyICs0OSw2MSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKLSAgICA6IG1fbGF5ZXIobGF5
ZXIpCisgICAgOiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQorICAgICwgbV9pbk92ZXJm
bG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxz
ZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgICwg
bV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCisjZW5k
aWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQorI2VuZGlm
CisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKKyAg
ICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQorICAgICwgbV91cGRh
dGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fbGF5ZXIobGF5ZXIpCiB7CiB9CiAK
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKCkK
IHsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBBU1NFUlQo
bV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygp
LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYgKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3Zl
U2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKKyAg
ICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyNlbmRpZgor
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBl
bGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3JvbGxQb3NpdGlvbik7CisK
KyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIGRlc3Ryb3lT
Y3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVhKCp0aGlz
KTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJSZXNpemVyKCk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbigpCit7
CisgICAgYXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5lbGVtZW50KCk7CisgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9sYXllci5yZW5kZXJC
b3goKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9ubHkgdGhlIHNjcm9sbE9m
ZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxjdWxhdGVkLgorICAgICAg
ICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKCk7
CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkKKyAgICAgICAgICAgIHNj
cm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOworICAg
IH0KKworICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgp
KTsKIH0KIAogYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKQEAgLTYyLDQgKzExMSwxNzExIEBAIGJv
b2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNj
cm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5zaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CiB9CiAKKyNpZiBFTkFCTEUo
SU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxl
VG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCit7CisgICAg
Ly8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0aGUgc2Nyb2xsaW5nIGJl
IGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9s
bGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3Jv
bGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3Rl
bmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICByZW5kZXJlci5kb2N1bWVu
dCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50KCkpOworICAgIG1fcmVn
aXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVu
ZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVy
ZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgp
KTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZh
bHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCitJbnRSZWN0IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCog
aXNJbnNpZGVGaXhlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigpLmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8gdHJ1ZSwgaXNJbnNpZGVG
aXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBt
X2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7CisgICAgICAgIGlmIChzY3Jv
bGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhzY3JvbGxpbmdOb2RlSUQo
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBzY3Jv
bGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNj
cm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgIGlmICgh
c2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRv
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFuZElu
UHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1h
dG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVy
Zm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5yZW5kZXJlcigp
LnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZCgpOworfQorCisv
LyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9v
bCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29yZGluYXRlZFNjcm9sbGlu
Z0ZvckxheWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4gcG9z
aXRpb24pCit7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsKK30K
Kwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBvc3RMYXlvdXRTY3JvbGxQ
b3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9t
UG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUoKSkpOworICAgIG1fcG9z
dExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBjb25zdCBTY3JvbGxQ
b3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgU2Nyb2xsUG9zaXRpb24gcG9z
aXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNjcm9sbFBvc2l0aW9uKHBv
c2l0aW9uLCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
Y3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25z
JiBvcHRpb25zKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRp
b24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlvbiwgb3B0aW9ucyk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24oY29u
c3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBv
c2l0aW9uKHBvc2l0aW9uKSwgb3B0aW9ucyk7Cit9CisKK1Njcm9sbE9mZnNldCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIHNj
cm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVk
QmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25z
dCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xs
Q2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKKyAgICBM
T0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXllciA8PCAiIHJlcXVlc3RT
Y3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAgIGlmIChhdXRvKiBzY3Jv
bGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOworI2VuZGlm
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBjb25zdCBT
Y3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKGN1cnJlbnRT
Y3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpJbk5vbk5hdGl2
ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxBbmltYXRpb25zKCk7
CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IG9wdGlvbnMuY2xhbXBp
bmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxP
ZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ID09IHRo
aXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHByZXZpb3Vz
U2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0Q3VycmVudFNjcm9sbFR5
cGUob3B0aW9ucy50eXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBzbmFwcGVkT2Zmc2V0ID0gY2Vp
bGVkSW50UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS5hZGp1c3RTY3JvbGxPZmZzZXRGb3JTbmFwcGlu
Z0lmTmVlZGVkKGNsYW1wZWRTY3JvbGxPZmZzZXQsIG9wdGlvbnMuc25hcFBvaW50U2VsZWN0aW9u
TWV0aG9kKSk7CisgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZWQgPT0gQW5pbWF0ZWRTY3JvbGw6Olll
cykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aEFuaW1hdGlvbihz
bmFwcGVkT2Zmc2V0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBzbmFwcGVkUG9zaXRpb24g
PSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoc25hcHBlZE9mZnNldCk7CisgICAgICAgIGlmICgh
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNuYXBwZWRQb3NpdGlvbiwgb3B0aW9ucy50eXBl
LCBvcHRpb25zLmNsYW1waW5nKSkKKyAgICAgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihzbmFwcGVkT2Zmc2V0LCBvcHRpb25zLmNsYW1waW5nKTsKKyAgICAgICAgc2V0U2Ny
b2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKTsK
KyAgICB9CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Njcm9sbFR5cGUpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVu
ZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsKKworICAgIExPR19XSVRI
X1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8
ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlw
ZTo6VXNlcikgPDwgIikiKTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9z
aXRpb247CisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgeworICAgICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBi
ZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgorICAgICAgICBpZiAobV9zY3JvbGxEaW1l
bnNpb25zRGlydHkpCisgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5T
Y3JvbGxpbmcoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQg
dGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRo
IGl0IHJlbW92ZWQuCisgICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAt
IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKKyAgICAgICAgICAgIFNjcm9sbE9mZnNl
dCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOworICAg
ICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgpOworICAgICAgICAgICAg
aWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRoKSB7CisgICAgICAgICAg
ICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOworICAgICAgICAgICAgICAgIGlmIChz
Y3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbFhP
ZmZzZXQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3Jv
bGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQorICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZz
ZXQgLT0gY2FyZXRXaWR0aDsKKworICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9m
ZnNldCk7CisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNl
dChuZXdPZmZzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobV9zY3Jv
bGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xsQmVoYXZpb3JTdGF0dXMo
KSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24pIHsKKyAgICAgICAgLy8g
RklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxUbygpIHdpdGggYW4gdW5j
aGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1cmUuCisgICAgICAgIC8v
IFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0byBtZXNzYWdlIHRoZSBt
YWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBpZiAocmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fbGF5ZXIuc2V0TmVl
ZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAgICB1cGRhdGVDb21wb3Np
dGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKKworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlclZpZXcmIHZpZXcgPSByZW5k
ZXJlci52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9ucyBvZiBvdXIgY2hpbGQg
bGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hvdWxkIGJlIGltcGFjdGVk
IGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJz
LCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9tIHRoZSBjb21wb3NpdGlu
ZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5b3V0Q29udGV4dCgpLmlz
SW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2UncmUgaW4gdGhlIG1pZGRs
ZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNlIGxheW91dCBoYXMgZmlu
aXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgp
OworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRhdGVXaWRnZXRQb3NpdGlv
bnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24pIHsKKyAgICAg
ICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVycyBpZiwgaGlnaGVyIG9u
IHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgorICAgICAgICAgICAgLy8g
cG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWlyZXMgYSBmdWxsIHdhbGsg
b2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAgICAgLy8gaW4gdGhpcyBj
YXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsgd2UnbGwgdXBkYXRlIGNv
bXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hlbiB0aGF0IGNvbXBsZXRl
cy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7CisgICAgICAg
ICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKwor
ICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0IHRoZSBsb2NhdGlv
biBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEgc2libGluZyBpbiB6
LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVzY2VuZGFudCB3YWxr
IGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHBh
aW50UGFyZW50ID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJj
aHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVXBkYXRl
IHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciBy
ZWdpb24uCisgICAgICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRlcmluZ0Rl
cGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExheW91dChy
ZW5kZXJlci5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJhbWUgPSByZW5kZXJlci5m
cmFtZSgpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSBy
ZW5kZXJlci5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgLy8gVGhlIGNhcmV0IHJlY3QgbmVl
ZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAgZnJhbWUuc2VsZWN0aW9u
KCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIExheW91dFJlY3QgcmVjdEZvclJl
cGFpbnQgPSByZW5kZXJlci5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/IHJlbmRlcmVyLnJlcGFp
bnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlci5jbGlwcGVkT3ZlcmZsb3dS
ZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZsb2F0UXVhZCBxdWFkRm9y
RmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKKyAgICBpZiAo
cmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVF
dmVudCk7CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZl
bnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOworCisgICAgYm9vbCByZXF1
aXJlc1JlcGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7
CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Cisg
ICAgICAgIG1fbGF5ZXIuc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhpZXJhcmNo
eVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBtX2xheWVyLmJhY2tpbmco
KS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7CisgICAgfQorCisgICAgLy8gSnVz
dCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0LgorICAgIGlmIChyZXF1aXJl
c1JlcGFpbnQpCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50
Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xs
IGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmFkZFBl
bmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBpZiAoc2Nyb2xsc092ZXJm
bG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7
CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHNDaGFuZ2VkKCk7CisgICAg
ZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwobV9sYXllcik7Cit9CisKK3ZvaWQg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNj
cm9sbCgpCit7CisgICAgaWYgKG1fbGF5ZXIuY29tcG9zaXRvcigpLmhhc0NvbnRlbnRDb21wb3Np
dGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBjb250YWluZXIgaXMgZ3Vh
cmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMgdGhhdCBtYXkgbmVlZAor
ICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGZy
b20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9zaXRpbmdBbmNlc3RvciA9
IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKSkg
eworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgICAg
ICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9z
aXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3Ip
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJl
IG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQg
Ynkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERl
c2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAg
ICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21wb3NpdGluZ0xheWVycyhD
b21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGluZ0FuY2VzdG9yKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworaW50IFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5k
ZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERp
bWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXpl
KCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9s
bFdpZHRoOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsSGVpZ2h0
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgaWYgKG1f
c2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWEqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29s
dXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbEhlaWdodDsKK30KKwordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9zaXRpb24oKQoreworICAg
IGlmICghbV9tYXJxdWVlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogd291bGQg
bGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0Zmll
bGRzLgorICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBtX3VwZGF0aW5nTWFy
cXVlZVBvc2l0aW9uOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOworICAg
IG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAgbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworfQorCit2b2lkIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1ZWUoKQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5pc0hU
TUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJx
dWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIuaXNCb3goKSkgeworICAgICAgICBpZiAoIW1f
bWFycXVlZSkKKyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlxdWU8UmVuZGVyTWFycXVl
ZT4oJm1fbGF5ZXIpOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVTdHlsZSgpOwor
ICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAgICBtX21hcnF1ZWUgPSBudWxscHRyOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbHNPdmVyZmxvdygpIGNv
bnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgaWYg
KCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnNjcm9sbHNPdmVyZmxvdygpOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNhblVzZUNvbXBvc2l0ZWRTY3Jv
bGxpbmcoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigp
OworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIuc2V0dGluZ3MoKS5hc3luY092
ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNj
cm9sbHNPdmVyZmxvdygpICYmICFtX2xheWVyLmlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5k
ZXJlci5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8fCByZW5kZXJlci5zZXR0
aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwoKSk7CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9mZnNldCkKK3sKKyAgICBz
Y3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7Cit9CisKK1Njcm9sbGlu
Z05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dAoreworICAgIGlmICghbV9sYXllci5pc0NvbXBvc2l0ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCktPnNjcm9sbGluZ05vZGVJREZvclJvbGUo
U2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKworYm9vbCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3Rh
dGU+IGdlc3R1cmVTdGF0ZSkKK3sKKyAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFi
bGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElO
RykKKyAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsK
KyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCku
c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29y
ZGluYXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBzY3JvbGxp
bmdOb2RlSUQoKSwgZ2VzdHVyZVN0YXRlKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBT
Y3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVlbEV2ZW50LCBn
ZXN0dXJlU3RhdGUpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZp
c2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xs
YmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVjdEJlaGF2aW9yKSBjb25z
dAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYgKHNob3dzT3ZlcmZsb3dD
b250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRlU2Nyb2xsYmFycykKKyAg
ICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24oKTsKKworICAgIGF1dG8g
dmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJldHVybiB7IHNjcm9sbFBv
c2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNjcm9sbGJhclNw
YWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJh
clNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJMRShSVUJCRVJfQkFORElO
RykKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJl
bmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgSW50U2l6ZSBzdHJldGNo
OworCisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92
ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7CisgICAgYXV0byBy
ZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICBpZiAoc2Ny
b2xsT2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNl
dC55KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zm
c2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCisgICAg
ICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5o
ZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNjcm9sbE9mZnNldC54KCkg
PCAwKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54KCkpOworICAgIGVs
c2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hh
YmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAgIHN0cmV0Y2guc2V0V2lk
dGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lk
dGgoKSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAgIHJldHVybiBJbnRTaXpl
KCk7CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3Jv
bGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9sc1JlY3Rz
KCkuc2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbGF5ZXIucmVuZGVy
ZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7
Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9sbGJhclJlY3Q7CisgICAg
cmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcmVuZGVy
ZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJUb0NvbnRhaW5pbmdWaWV3
KCZyZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYg
c2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9SZW5kZXJl
cigmcmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBzY3JvbGxiYXJQb2ludCkg
Y29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBJ
bnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFy
T2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyLCBwb2ludCk7
Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3Qg
SW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIudmlldygpLmZy
YW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRlcmVyKCZyZW5kZXJlciwg
cGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLnZpc2libGVT
aXplKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udGVudHNT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxXaWR0aCgpLCBzY3JvbGxI
ZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVhY2hh
YmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNpemUgY29udGVudHNTaXpl
ID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Njcm9sbGFibGVIb3Jpem9u
dGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdpZHRoKHN0ZDo6bWluKGNv
bnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkpKTsKKworICAgIGlmICgh
aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNl
dEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZpc2libGVTaXplKCkuaGVp
Z2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNp
emVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVD
b250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNv
bjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckJsb2NrPihyZW5k
ZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpLnNldFNo
b3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAgcmVuZGVyZXIuc2V0TmVl
ZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsKK30KKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFN0YXJ0
U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRTdGFy
dE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5k
aWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3
aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRl
ZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5kaWRMYXlvdXQoQ2hyb21l
Q2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVyOjpPdmVyZmxvd0NvbnRy
b2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMo
KSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAg
IEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Nyb2xsYmFycyBzaXQgaW5z
aWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5n
UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94UmVjdEluY2x1ZGluZ1Nj
cm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA9IG1faEJh
ciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBhdXRvIGlzTm9uT3Zlcmxh
eVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CisgICAgICAgIHJl
dHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCk7CisgICAg
fTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Nyb2xsYmFyID0gaXNOb25P
dmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBoYXZlTm9uT3ZlcmxheVZl
cnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7Cisg
ICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0gc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2ZVJlc2l6ZXIgPSByZW5k
ZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAgICBib29sIHNjcm9sbGJh
cnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYgaGF2
ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZlTm9u
T3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9s
bGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlmIChzY3JvbGxiYXJzQXZv
aWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNlbnQs
IHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7Cisg
ICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJXaWR0
aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAgICBob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJMYXllcjo6T3ZlcmZsb3dD
b250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgeworICAgICAgICBhdXRvIGJh
clJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OworICAgICAgICBiYXJSZWN0
LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQp
OworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7CisgICAgICAgICAgICBpZiAo
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAgICAgICAgICBiYXJSZWN0
LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lkdGgoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFjdChjb3JuZXJTaXplLndp
ZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhvcml6b250YWxTY3JvbGxi
YXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgYXV0byBi
YXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsKKyAgICAgICAgaWYgKHBs
YWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAgICBiYXJSZWN0LnNldFdp
ZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBi
YXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpCisgICAgICAgICAgICBi
YXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIHJlc3Vs
dC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisgICAgYXV0byBjb3JuZXJS
ZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBpZiAocGxhY2VWZXJ0aWNh
bFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBib3R0b21MZWZ0Q29ybmVy
ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3JuZXIueCgpLCBib3R0b21M
ZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNvcm5lclNpemUgfTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93Q29udHJvbHNQb3NpdGlv
bmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNvcm5lclNpemUgfTsKKyAg
ICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgcmVzdWx0LnNj
cm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAgICBpZiAoaGF2ZVJlc2l6
ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAgICAgICAgICAgIHJl
c3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJhclRoZW1lOjp0aGVtZSgp
LnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3Ju
ZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25lc3MgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbnRTaXplIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9s
bGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7
CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0
b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBpZiAo
JnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiB0b0ludFNpemUocmVj
dHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93Q29udHJvbHMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKSB7Cisg
ICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpKSB7
CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzY3JvbGxSZWN0ID0g
cmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJl
ZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICghYm94LT5wYXJlbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0
cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICBzY3Jv
bGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKyAgICBl
bHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIu
bG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsK
KyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7CisgICAgYm94LT5yZXBh
aW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsK
KyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxD
b3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1fcmVzaXplcikKKyAgICAg
ICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQorCitzdGF0aWMgYm9vbCBz
Y3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIHJldHVy
biBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUoKTsKK30KKworYm9vbCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHls
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoaG9yaXpvbnRh
bFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2ZXJ0
aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxi
YXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQorCitzdGF0aWMgaW5saW5l
IFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRlckxheWVyTW9kZWxPYmpl
Y3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxl
bWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gZWxlbWVudC0+
Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QtPm1v
ZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAgICAgICAgICAgIHJldHVy
biBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVm
UHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihy
ZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJlbmRlcmVyRm9yU2Nyb2xs
YmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0gaXM8UmVu
ZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5k
ZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKTsKKyAgICBp
ZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9s
bGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwgZG93bmNhc3Q8
UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoKnRoaXMsIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7CisgICAgICAgIGRpZEFkZFNj
cm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAgICAgaWYgKG1fbGF5ZXIu
cGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAgICAgICBzY3JvbGxBbmlt
YXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBhZ2UoKS53aGVlbEV2ZW50
VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5h
ZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2VOb25OdWxsKCk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcihTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiYg
c2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6
IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAgIHdpbGxSZW1vdmVTY3Jv
bGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAgICBzY3JvbGxiYXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRyOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBo
YXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKKyAg
ICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lm
IEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxhc3RpY2l0eSA9IHNjcm9s
bHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNj
cm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNj
cm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0SG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAg
ICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIpOworI2lmIEVOQUJMRShS
VUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRpZgorICAgIH0KKworICAg
IC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1c2Ugb3VyIHNjcm9sbGJh
ciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvcHBvc2l0ZSBz
Y3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxl
Q2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzVmVydGljYWxT
Y3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBo
YXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzU2Ny
b2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9s
bGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAgICBhdXRvJiByZW5kZXJl
ciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGlj
aXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGluZ3MoKS5ydWJiZXJCYW5k
aW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3JvbGxFbGFzdGljaXR5QXV0
b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpz
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAgICB9IGVs
c2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOworI2VuZGlmCisgICAgfQor
CisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNhbiBjYXVzZSBvdXIgc2Ny
b2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9z
aXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisgICAgICAgIG1faEJhci0+
c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAgbV92QmFyLT5zdHlsZUNo
YW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogc2Nyb2xs
YWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZP
ck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykpCisgICAgICAgIHJl
dHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJlbmRlcmVyLnZpZXcoKS5m
cmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIu
cmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9s
bGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZvciAoYXV0byogbmV4dExh
eWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91
bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0TGF5ZXItPmVuY2xvc2lu
Z0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzOjpZZXMpKSB7CisgICAg
ICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJs
ZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCisg
ICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0g
SWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJ
bkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX3ZCYXIt
PndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xsYmFyKCkgJiYgKHJlbGV2
YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9oQmFyLT5zaG91bGRQYXJ0
aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faEJhciB8fCBtX3ZC
YXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigpLnN0eWxlKCkucmVzaXpl
KCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkK
K3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVyLmNhblJlc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVyQm94KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKKwor
ICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxTY3JvbGxiYXIubW92ZShv
ZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7CisgICAgICAgIHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1faEJh
ci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOworICAgIH0KKworICAg
IGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZyYW1lUmVj
dChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXplcikKKyAgICAgICAgbV9y
ZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisKK0xheW91dFVuaXQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25zdAoreworICAgIFJlbmRl
ckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueSgpOworfQorCitM
YXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Qm90dG9tKCkgY29u
c3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgTGF5
b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CisgICAgYm94
LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gb3ZlcmZsb3dS
ZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpv
dmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5k
ZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93
UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAg
IHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94
ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gt
PmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOworfQorCit2b2lkIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCkKK3sKKyAg
ICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7
CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOworCisgICAgbV9zY3JvbGxX
aWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpOworICAg
IG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRvbSgpIC0gb3ZlcmZsb3dU
b3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3Zl
cmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Nyb2xsYWJsZUxlZnRPdmVy
ZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50IHNjcm9sbGFibGVUb3BP
dmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+Ym9yZGVyVG9wKCkpOwor
ICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdywgLXNj
cm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb21w
dXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7CisgICAgbV9oYXNDb21wb3Np
dGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpICYmICho
YXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZlcnRpY2Fs
T3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Ny
b2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0hvcml6
b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1go
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVy
dGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1ZlcnRpY2FsT3ZlcmZsb3co
KSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZKCk7Cit9CisKK2Jvb2wg
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBz
Y3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJveCgpLT5jbGllbnRXaWR0
aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
KworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQobV9sYXllci5yZW5kZXJC
b3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Ny
b2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhp
cykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRp
b246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJm
bG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9
PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMo
KTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dT
Y3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRp
Y1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9u
IGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVu
dGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5v
dmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZs
b3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6
OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxi
YXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93
U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVuZGVyQm94KiBib3ggPSBt
X2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgLy8gTGlzdCBib3gg
cGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3Ro
aW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQ
YXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6b250YWxPdmVyZmxvdyA9
IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wgaGFzVmVydGljYWxPdmVy
ZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAgIC8vIElmIG92ZXJmbG93
IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0byBlbmFibGUgb3IgZGlz
YWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
bV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIuc3R5bGUoKSwgSG9yaXpv
bnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxlZChoYXNIb3Jpem9udGFs
T3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5k
ZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAgIG1fdkJhci0+c2V0RW5h
YmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRv
IGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRk
ZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9
IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9y
aXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7CisgICAgYm9vbCBh
dXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldp
dGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNh
bE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwg
YXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBpZiAoYm94LT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAgICAgICAgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgICAgICBpZiAoYm94
LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKKyAgICAgICAgICAgIHNl
dEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOworCisgICAgICAgIG1f
bGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAgICByZW5kZXJlci5yZXBh
aW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3ZlcmZsb3dYKCkgPT0gT3Zl
cmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6
QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxheW91dCkgeworICAgICAg
ICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBy
ZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAgICAgICAgICAgICAgIGlm
IChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5kZXJlcik7CisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9Ib3Jpem9udGFsU2Nyb2xs
QmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7CisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAgICAgICAgICAgICAgICBt
X2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5wYXJlbnQoKTsKKyAgICAg
ICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAmJiByZW5kZXJlci5pc0Jv
eCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNs
ZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgfQor
CisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgorICAg
IGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0gcm91bmRUb0ludChib3gt
PmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VT
dGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBp
eGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0
aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9CisgICAgaWYgKG1fdkJhcikg
eworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdo
dCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRI
ZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50
SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYWJsZUFy
ZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVW
ZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBj
b2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQoreworICAgIFJlbmRlckJv
eCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVlOworICAgIFNjcm9sbE9m
ZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOworCisgICAgY29tcHV0
ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNlbGZQYWludGluZ0xheWVy
KCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8vIEZJWE1FOiBFbnN1cmUg
dGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5
bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRpZgorCisgICAgaWYgKCFi
b3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1Vz
ZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0
byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQK
KyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChv
ciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVk
U2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOworI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBU
aGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJl
bGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZp
eCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJl
IGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9z
ZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3
OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVu
U2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0
ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNj
cm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICBzZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlmCisgICAgfQorCisgICAg
dXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAob3JpZ2luYWxTY3JvbGxP
ZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAgaWYgKG1fbGF5ZXIuaXND
b21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJh
dGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUo
KTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCitib29sIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGNvbnN0IEludFJl
Y3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5pbnRlcnNlY3Rz
KGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKHJlY3RzLnZlcnRp
Y2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXplci5pbnRlcnNlY3RzKGxv
Y2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9scygp
IGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBPbiBpT1MsIHRoZSBz
Y3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAgIHJldHVybiAhY2FuVXNl
Q29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJmbG93Q29udHJvbHMoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQsIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpCit7Cisg
ICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVyZmxvdy4KKyAgICBhdXRv
JiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyLmhhc092
ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNob3dzT3ZlcmZsb3dD
b250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVybGF5IHNjcm9sbGJhcnMg
cGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0cmVlIHNvIHRoYXQgdGhl
eSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcgZWxzZS4gSWYgdGhpcyBp
cyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzCisgICAg
Ly8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwgdGhlIHJvb3QgbGF5ZXIg
dGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8gdGhhdCBuZWVkIHRvIGJl
IHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5
ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRoZSBzY3JvbGxiYXJzIHRo
ZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRoYXQgdGhlCisgICAgLy8g
c2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBSZW5kZXJUcmVlIHRvIGdl
dCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMoKSAmJiAhcGFpbnRpbmdP
dmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0
ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGRvIHRo
ZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRvIGxheWVycy4KKyAgICAg
ICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHx8IChtX3ZC
YXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJlY3Q7CisgICAgICAgIGxv
Y2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAgICBpZiAoIW92ZXJmbG93
Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0gbV9sYXllci5lbmNsb3Np
bmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRpbmdSb290KQorICAgICAg
ICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVyKCk7CisKKyAgICAgICAg
aWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+c2Nyb2xsYWJsZUFyZWEo
KSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlT
Y3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhpcyBj
aGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMg
dHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Ny
b2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50
T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQor
ICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zm
c2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMgaWYgbmVjZXNzYXJ5LiBX
ZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29t
ZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcg
KG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0CisgICAgLy8gY29u
dGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9zaXRpb25PdmVyZmxvd0Nv
bnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisKKyAgICAvLyBOb3cgdGhh
dCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmlnaHQgcGxhY2UsIHBhaW50
IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkp
CisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKG1f
dkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBtX3ZCYXItPnBh
aW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3VyIHNjcm9sbCBjb3JuZXIg
d2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9lc24ndCBydW4gYWxsIHRo
ZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94LgorICAgIHBhaW50U2Nyb2xs
Q29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworCisgICAg
Ly8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBvbiB0b3Agb2YgdGhlIHNj
cm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZz
ZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBh
aW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQm
IHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIEludFJlY3Qg
YWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0Lm1vdmVCeShwYWludE9m
ZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7
CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXIt
PnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1JlY3QpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCBhIGNvcm5lciBp
ZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVlZAorICAgIC8vIHRvIHNl
ZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkpCisg
ICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQs
IGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmRyYXdQbGF0
Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJl
Y3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVySW1hZ2U7CisgICAgRmxv
YXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJlci5kb2N1bWVudCgpLmRl
dmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsKKyAgICAgICAgcmVzaXpl
Q29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAgICAgICBjb3JuZXJSZXNp
emVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAgICAgIGNvcm5lclJlc2l6
ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJkltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVmKCkpOworICAgICAgICBy
ZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7CisgICAgICAgIGNvcm5l
clJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CisgICAgICAg
IGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShyZXNpemVyQ29ybmVy
UmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNpemVyQ29ybmVyUmVjdC55
KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJlc2l6ZXJTaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEuMCwgMS4wKSk7CisgICAg
ICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdl
KCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29ybmVyUmVzaXpl
clNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAgICByZXR1cm47CisgICAg
RmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoTGF5b3V0UmVjdChy
ZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyUmVzaXplclNpemUsIGNv
cm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
KTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIGltYWdlUmVjdCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXll
ci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpID09IFJlc2l6
ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJzUmVjdCA9IHJlY3RzLnJl
c2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0KTsKKyAgICBpZiAo
IXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgICAg
IHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwg
cGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNpemVyQWJzUmVjdCk7CisK
KyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBp
ZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAvLyBDbGlwcGluZyB3aWxs
IGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KKyAgICBp
ZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKKyAgICAg
ICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgTGF5b3V0UmVjdCBsYXJn
ZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUo
TGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWln
aHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50
OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2Vy
Q29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhbV9sYXll
ci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byByZWN0cyA9
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCByZXNpemVDb250cm9sUmVj
dDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAocmVu
ZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKKyAgICAgICAgaWYgKHJl
Y3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9s
bENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KKyAgICBpZiAobV92
QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgeworICAgICAg
ICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAg
ICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1faEJhciAmJiBtX2hC
YXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAgICAgICAgaWYgKHJlY3Rz
Lmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK3sKKyAg
ICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0FjdGl2
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZvY3VzQ29udHJvbGxlcigp
LmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
LnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZp
ZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hl
ZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgp
LmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKK30KKworI2lmIEVO
QUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kIHN1cHBvcnQgYmV5b25k
IEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50PihtX2xheWVyLmVuY2xvc2lu
Z0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJCb3goKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLmVuY2xvc2lu
Z0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxh
YmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBhZGRpbmdCb3hSZWN0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5
ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAgICAgaWYgKHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChhdXRvKiBzY3JvbGxB
bmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9s
bEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJs
YXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYg
ZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRl
ck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJMYXllcjo6TGF5
ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNsb3NpbmdJbnRSZWN0KGRh
bWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1YnRyZWVQYWludFJvb3Qp
OworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGluZ0luZm8sIFJlbmRlckxh
eWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyk7CisKKyAgICBt
X2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworfQorCitib29sIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKK3sKKyAgICBp
ZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBhdXRvIGJvcmRlckJv
eFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKS5ib3Jk
ZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsK
KworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJh
Z21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7CisgICAgICAgIGlmIChz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKKyAgICAgICAgICAg
IEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29y
bmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJu
IEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJv
dHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJl
Y3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9t
UmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhY
TWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1h
eFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXpl
KCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBmb3IgKGludCBpID0gbGF5
ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgTGF5
ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChpKTsKKyAgICAgICAgYXV0
byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50
UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIpOworICAgICAgICBpZiAo
ZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJl
c2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50
KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRl
c3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5
ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5i
YWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9s
bGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZvclNjcm9sbENvcm5lcigp
IDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxp
bmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsc092ZXJm
bG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwordm9pZCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNl
cHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIGlmICgh
Ym94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhl
IHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAg
aWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1go
KTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7CisK
KyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRl
ckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMg
YWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94
LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURl
ZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJm
bG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0
aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVx
dWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOworICAgIHNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBz
ZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKKworICAgIC8v
IFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMg
dmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFu
b3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgor
ICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYm
IG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAh
PSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7CisK
KyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYg
b2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9
IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKKwor
ICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgIHVwZGF0ZVNjcm9sbGFi
bGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxh
YmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KQoreworICAgIGF1
dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZyYW1lVmlldyYgZnJhbWVW
aWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAgYm9vbCBpc1Zpc2libGVU
b0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisgICAgaWYgKEhUTUxG
cmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1lbnQo
KSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYmIG93
bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisKKyAgICBib29sIGlzU2Ny
b2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKKyAgICBib29sIGFk
ZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJs
ZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAg
aWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5hZGRTY3JvbGxh
YmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFy
ZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcucmVtb3ZlU2Nyb2xsYWJs
ZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID0gZmFsc2U7
CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgaWYgKGFkZGVkT3JS
ZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJmbG93IHNjcm9sbGluZywg
c28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRlZCwgcmVtb3ZlIG91cnNl
bHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAgICAgdW5yZWdpc3RlckFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7CisjZW5kaWYKK30KKwordm9p
ZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCit7
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgUmVuZGVyRWxl
bWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcik7Cisg
ICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRl
cmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9
LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAgIGlmICghY29ybmVy
KSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1fc2Nyb2xsQ29ybmVyID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIuZG9jdW1lbnQoKSwg
V1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBi
ZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJl
bnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmluaXRpYWxpemVTdHlsZSgp
OworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0U3R5bGUoV1RGTW92ZSgq
Y29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3Jv
bGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fc2Nyb2xsQ29y
bmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJl
cigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0gcmVuZGVyZXJGb3JTY3Jv
bGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyLmhhc092ZXJmbG93
Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9J
ZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKworICAg
IGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAgIG1fcmVzaXplciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyLmRvY3VtZW50KCksIFdU
Rk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJl
IGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJl
bmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNpemVyKCkKK3sKKyAgICBp
ZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVzaXplci0+c2V0UGFyZW50
KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCkKK3sKKyAg
ICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmICht
X3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgdXBkYXRlU2Nyb2xs
Q29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKK30KKworI2lmIEVOQUJM
RShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91Y2hFdmVudCkKK3sKKyAg
ICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0IHRoZSBzY3JvbGxpbmcg
YmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFzQ29tcG9zaXRlZFNjcm9s
bGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Ny
b2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7Cit9CisKK3ZvaWQgUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNj
cm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7Cisg
ICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlz
dGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbmRlcmVyLmRvY3Vt
ZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1lbnQoKSk7CisgICAgbV9y
ZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgPSB0cnVlOworfQorCit2
b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0
ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3JlZ2lzdGVyZWRBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVuZGVy
ZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVuZGVyZXIuZWxlbWVudCgp
KTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyA9IGZh
bHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorCisvLyBGSVhNRTog
dGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXllci5iYWNraW5nKCktPmhh
c1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFkanVzdGVkU2Nyb2xs
RGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1h
dGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9z
b3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgorICAgIGNvbnN0
IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5u
aW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQorICAg
ICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3Fy
dChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOworICAgIGVsc2UgaWYg
KGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0
PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWRE
ZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKK30KKworc3RhdGljIGlu
bGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYgZGVsdGEpCit7
CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS53aWR0aCgpKSwg
YWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291
cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IG1fbGF5
ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RLbm93bk1vdXNlUG9zaXRp
b24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qga25vd24gbW91c2Ug
cG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNlIGlzIG91dCBvZiB0
aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAgIHN0YXRpYyBJbnRQb2lu
dCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93bk1vdXNlUG9zaXRpb24u
eCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCisgICAgICAgIGxhc3RL
bm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgZWxzZQorICAg
ICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBvc2l0aW9uOworCisg
ICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24gLSBzb3VyY2VQb2ludDsK
KworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxS
YWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KKyAg
ICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0g
U2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRlbHRhLnNldEhlaWdodCgw
KTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YSkp
OworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1
cGRhdGVTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9w
dGlvbnMsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGxv
Y2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXllci5hbGxvd3NDdXJyZW50U2Nyb2xs
KCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFT
U0VSVChib3gpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFt
cFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChy
ZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRTY3JvbGxPZmZzZXQgIT0g
c2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgIT0gU2Nyb2xs
QmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBv
bGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQo
Y2xhbXBlZFNjcm9sbE9mZnNldCwgb3B0aW9ucyk7CisgICAgICAgIEludFNpemUgc2Nyb2xsT2Zm
c2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRTY3JvbGxPZmZzZXQ7Cisg
ICAgICAgIGF1dG8gbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQgPSBsb2NhbEV4cG9zZVJlY3Q7Cisg
ICAgICAgIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkLm1vdmUoLXNjcm9sbE9mZnNldERpZmZlcmVu
Y2UpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChib3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQo
RmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3RTY3JvbGxlZCkpLCBVc2VUcmFuc2Zv
cm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbEJ5UmVjdXJzaXZlbHko
Y29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQorewor
ICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xh
bXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIucGFyZW50KCkpCisgICAgICAgIHJlc3RyaWN0
ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5p
c05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJp
Y3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3Jv
bGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAgICAgICAgICAgKnNjcm9s
bGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUg
c2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Cisg
ICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0g
c2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVy
bygpICYmIHJlbmRlcmVyLnBhcmVudCgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBz
a2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90
OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCisgICAgICAgICAgICAg
ICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9m
ZnNldCwgc2Nyb2xsZWRBcmVhKTsKKworICAgICAgICAgICAgcmVuZGVyZXIuZnJhbWUoKS5ldmVu
dEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJlIGNhbGxlZCBvbiBhIHJl
bmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIGJ1dCBkb2Vzbid0
CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2ggbWVhbnMgdGhhdCBpdCBp
cyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisgICAgICAgIHJlbmRlcmVy
LnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAgICAgIGlmIChzY3JvbGxl
ZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRlcmVyLnZpZXcoKS5mcmFt
ZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hv
bGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVt
ZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAgICBBU1NFUlQoJm1fbGF5
ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKKworICAgIExPRyhTY3Jv
bGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXllclBvc2l0aW9uc0Fm
dGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFw
KFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNj
cm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpCit7CisgICAgUmVuZGVy
R2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7CisgICAgaWYgKCZtX2xheWVy
ICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAgICAgICAgZ2VvbWV0cnlN
YXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgpLCBudWxscHRyKTsKKwor
ICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRoZSBhbmNlc3RvcnMgb2Yg
dGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUgdGhlIEhhc1NlZW5WaWV3
cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3RvcldpdGhPdmVyZmxvd0Ns
aXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZn
ZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwpOworfQorCitib29sIFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5p
bWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsb2dNb2NrU2Ny
b2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgY29uc3QKK3sKKyAgICBt
X2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2Fn
ZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rlc2NyaXB0aW9uKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCmluZGV4IDZkOWNkZWMyMjU1NzZjMDkx
MWUyZTIwMTE4MDc3MmFmMDBlOTA1NDkuLjMwYWE0MWYxY2IyNWQyYjNkOGY1MzNhMjdlNDgzYzgz
N2NkNTk2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtNDksMTcgKzQ5LDI1MiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLS8vIEZJWE1FOiBNYXJrIGFzICdmaW5hbCcgb25jZSB0aGUgYWN0dWFsIGltcGxl
bWVudGF0aW9uIGxhbmRzLgotY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSA6IHB1Ymxp
YyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJNYXJxdWVlOworCitjbGFzcyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOwogCisgICAgUmVuZGVyTGF5ZXImIGxheWVyKCkgeyByZXR1cm4gbV9s
YXllcjsgfQorCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQgdXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAg
dm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisKKyAgICB2b2lkIHN0b3JlU2Nyb2xsUG9z
aXRpb24oKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIHZvaWQgcmVnaXN0
ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAgIHZvaWQgdW5yZWdpc3Rl
ckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5kaWYKKworICAgIHZvaWQg
c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPik7Cisg
ICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCk7CisKKyAgICBp
bnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7CisK
KyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOworCisgICAgLy8g
U2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3JvbGwgdGhlaXIgb3ZlcmZs
b3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBT
Y3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOworCisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBjb25zdCBTY3Jv
bGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmID0gU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zOjpj
cmVhdGVQcm9ncmFtbWF0aWMoKSk7CisgICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwg
Y29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7CisgICAgdm9pZCBzY3JvbGxUb1lQ
b3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7CisgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIGNvbnN0IFNjcm9s
bFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBi
eSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zm
c2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQorICAgIHZvaWQg
c2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3Jv
bGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVBy
b2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQorCisgICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBj
b25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsK
KyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9v
bCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8
IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQor
ICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKKyAgICB2b2lkIHNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Ny
b2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIo
U2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJlc1Njcm9sbFBvc2l0aW9u
UmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25S
ZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRydWUpIHsgbV9yZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1JlY29uY2lsaWF0aW9uOyB9
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQgZG8gdG91Y2ggc2Ny
b2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMgYWN0dWFsbHkgc2Ny
b2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBj
b25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBzY3JvbGxh
YmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0ZSkuCisgICAgYm9v
bCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9oYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQgdmVydGljYWxTY3JvbGxi
YXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3Jv
bGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBj
b25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0OworICAgIGJvb2wg
aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5
ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJ
bkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwg
Ym9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Ny
b2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2
b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0
UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9s
bEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1YmxpYzoKKyAgICAvLyBB
bGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xsYWJsZWFBcmVhIG1ldGhv
ZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFi
bGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9yaXpvbnRhbFNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZlcnRpY2FsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xs
UG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CisKKyAg
ICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBib29sIGhhbmRsZVdoZWVs
RXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hl
ZWxTY3JvbGxHZXN0dXJlU3RhdGU+KSBmaW5hbDsKKyAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRh
YmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3Qg
ZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHVwZGF0ZVNuYXBP
ZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0
IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIGRpZFN0YXJ0
U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOworI2VuZGlmCisKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKKyAgICBHcmFwaGljc0xh
eWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7CisgICAgR3JhcGhp
Y3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKKworICAgIGJvb2wg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHVzZXNBc3lu
Y1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOworCiAgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGly
ZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWw7CiAKKyAgICBib29sIGlzUmVuZGVy
TGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNp
YmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3Qg
ZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIEludFJl
Y3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYs
IGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKKyAg
ICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7CisKKyAgICBJ
bnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1
ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwor
ICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBs
YXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBpc0hh
bmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVh
Qm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgZm9yY2VVcGRh
dGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmlu
YWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29sIGlzU2Nyb2xsU25hcElu
UHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wgdXNlc01vY2tTY3JvbGxB
bmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVz
c2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworICAgIFN0cmluZyBkZWJ1Z0Rlc2Ny
aXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3Qg
ZmluYWw7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRT
aXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmluYWw7CisKKyAgICBib29s
IHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9s
bFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkKSBmaW5hbDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnM7IH0K
KyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyhib29sIGRpcnR5U2Ny
b2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGRpcnR5U2Nyb2xs
YmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVy
TGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRT
aXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAgIHZvaWQgY2xlYXJSZXNp
emVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0ZWRTdHlsZSgpOworCisg
ICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5b3V0VW5pdCBvdmVyZmxv
d1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0b20oKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZs
b3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3Rz
IG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9vbCBvdmVyZmxvd0NvbnRy
b2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OworCisgICAg
Ym9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7CisKKyAgICB2b2lkIGNv
bXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNj
cm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBj
b25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKworICAgIGJvb2wg
c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBT
Y3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJik7
CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisKKyAgICBJ
bnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBjb25zdDsKKworICAgIHZv
aWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7CisKKyAgICBTY3Jv
bGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JikgY29uc3Q7CisK
KyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgpOworICAg
IHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisKKyAgICBP
cHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbkNoYW5nZU9wdGlvbnMmLCBjb25zdCBMYXlvdXRSZWN0JiByZXZlYWxSZWN0LCBjb25zdCBM
YXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAgdm9pZCBzZXRBZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxp
bmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworCiBwcml2
YXRlOgorICAgIC8vIE1pbmltdW0gcGFkZGluZyBvbiB4ODZfNjQgKDQgYnl0ZXMpLCBhZnRlciBt
X3Njcm9sbEhlaWdodCkKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5IDogMTsKKyAg
ICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29sIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhIDogMTsKKyAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JT
Y3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxi
YXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gOiAxOworCisgICAg
Ly8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KKyAgICBpbnQgbV9zY3Jv
bGxXaWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKICAgICBSZW5kZXJMYXllciYgbV9s
YXllcjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9uOworICAgIE9wdGlvbmFs
PFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbjsKKworICAgIC8vIEZv
ciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Ygc2Nyb2xsYmFycy4KKyAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV92QmFy
OworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAg
Ly8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVy
LgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKKyAg
ICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+
LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDJkMDgyNjQ4N2NjMGQwNzhiY2NhOGU4ZGM1ZmI5MjFl
YWVmNGY0NGYuLjJjNmEwNGIwZmMyODgyOTFkYTYzNTlhMjZhMDA5ZGQ3MGZkZDE2ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKQEAgLTQ5LDYgKzQ5LDcg
QEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgzLDExIEBAIFNjcm9sbGFi
bGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0CiAg
ICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbGF5
ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2Vs
ZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBlbmNsb3NpbmdTY3JvbGxh
YmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JO
b3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOworICAgIGlmICghZW5j
bG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CiB9CiAKIGJv
b2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDE1NDcxNzRlNzQyMWI4YmNm
YTlmODczM2RjYjM4YTdlZjVlOTc1ZTEuLmMxZTY0NDNjMzgyZTJhMzAxYWVjNzE5ZGQ3ZGE2Mjc0
ZmYzNWUyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBA
IC0xMDAyLDcgKzEwMDIsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6Y29t
cHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9hdAogc3RhdGljIHZvaWQg
b3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0pCiB7CiAgICAgc3RyZWFt
Lm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJs
b2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywg
KE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIChD
KW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91dCI7CisgICAgc3RyZWFt
IDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQv
KFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkp
bW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMpY3JvbGxhYmxlQXJlYSwg
KEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5b3V0IjsKICAgICBzdHJl
YW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNiwxMCArMTExNiwxNCBAQCB2b2lkIFJlbmRlck9i
amVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVhbSwgYm9vbCBtYXJrLCBp
bnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0iOwogCi0gICAgaWYgKGhh
c0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAgc3RyZWFtIDw8ICJMIjsK
LSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAgIGlmIChkb3duY2FzdDxS
ZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkK
KyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0
cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8PCAiLS0iOwogCiAgICAg
aWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMiOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGQzYTY2NzFjNjdhYzFkOTM0YWY2YjJlZjRk
N2ZlZDBjZmZmOTMwN2QuLjk4MWFiYzBlNDYzMjk3NDBhZGY0YTAwNzBmMDg5ZjVhNTI2MzZlZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTEwMCw2ICsxMDAs
NyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJCbG9j
a0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAgICAgZnJpZW5kIGNsYXNz
IFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1
bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQog
ICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGY4YmQxMTNhOTg2YjAzNzg4N2I2MDFlZGZlZWNm
NWE0MmQyYWNlNzIuLjRmMzFiZDgzODBmMDA2NDVhMGQ1ODNkODEwMGE2YmM2YmI2OTc1ZWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2ICsxNTgsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNr
aW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNp
bmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC0x
ODM4LDcgKzE4MzksOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnNjcm9sbEJ5U2lt
dWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91YgogICAgICAgICBpZiAoIWJv
eC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgICAgICBzY3JvbGxhYmxl
QXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94LmxheWVyKCkpOworICAgICAg
ICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgIH0K
ICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg2NCw4ICsyODY2LDEwIEBAIEV4
Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3JvbGxhYmxlQXJlYUZvck5v
ZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4ocmVu
ZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRvd25jYXN0PFJlbmRlckxp
c3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNT
RVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gcmVu
ZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlwZUVycm9yIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417573</attachid>
            <date>2021-01-13 15:44:28 -0800</date>
            <delta_ts>2021-01-14 16:12:23 -0800</delta_ts>
            <desc>Patch, v22</desc>
            <filename>bug-60305-20210114004425.patch</filename>
            <type>text/plain</type>
            <size>244827</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNkMTc2ZGVlYmQ4ODEy
NzI3OTlhM2EwY2YyMjUyMjExZDkxMzcxNC4uNjM4NDYyMWJlMGRmNTAxZTMzYmUzM2I0ZWE0ZTkz
YmFlMjY4NDVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1OCBAQAorMjAyMS0wMS0xMyAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93
IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllciwgdG8KKyAgICAgICAgc3RyZWFtbGluZSBpdHMg
aW50ZXJmYWNlIGFuZCBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIKKyAgICAgICAgdHlwZXMg
dGhhdCBkbyBub3QgbmVlZCBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAg
ICAgTWFueSB2YXJpYWJsZXMgdHJhY2tpbmcgc2Nyb2xsaW5nL292ZXJmbG93IHN0YXRlIHdlcmUg
bWlncmF0ZWQgdG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSwgd2hpY2ggaXMg
b25seSBjcmVhdGVkIGlmIHRoZSByZW5kZXJlcgorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBsYXllciBoYXMgYSBDU1MgJ3Jlc2l6ZScgcHJvcGVydHkgIT0gJ25vbmUnLAorICAgICAgICBo
YXMgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyBjb250ZW50IG9yIDxtYXJxdWVlPi4K
KworICAgICAgICBGb3IgdGhlIGNvbW1vbiBjYXNlIChubyBzY3JvbGxhYmxlIG92ZXJmbG93KSwg
dGhlIFJlbmRlckxheWVyCisgICAgICAgIG92ZXJoZWFkIGlzIHJlZHVjZWQ6IGxlc3MgbWVtb3J5
LCBsZXNzIHN0YXRlIHRyYWNraW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2Ug
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCisgICAgICAgIGluY2x1ZGUgd29yayBpbiBXZWJL
aXQgcHJvamVjdC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwOiBBZGFwdCB0byB0aGUgZmFjdCB0aGF0CisgICAgICAgIFJlbmRlckxheWVyIGlz
IG5vIGxvbmdlciBhIFNjcm9sbGFibGVBcmVhLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUgY29uc3QpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdC
b3gpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAg
KiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
c2Nyb2xsYWJsZUFyZWFGb3JCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFi
bGVBcmVhIGNvbnN0KTogRGVjaWRlcworICAgICAgICB3aGV0aGVyIGEgUmVuZGVyTGF5ZXIgbmVl
ZHMgYSBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLiBUaGUgcHJlc2VuY2UKKyAgICAgICAgb2Yg
cmVzaXplL21hcnF1ZWUvb3ZlcmZsb3cgdHJpZ2dlcnMgY3JlYXRpb24gb2YgYQorICAgICAgICBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIG9iamVjdC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDogTW92ZSBhbGwg
b3ZlcmZsb3cvcmVzaXplL21hcnF1ZWUvc2Nyb2xsCisgICAgICAgIGhhbmRsaW5nIHRvIFJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEgYW5kIGFkYXB0IHRoZSBhZmZlY3RlZCBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmN1cnJlbnRTY3JvbGxUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzZXRDdXJyZW50U2Nyb2xsVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Ny
b2xsVG9YUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRv
WVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVs
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UmVxdWlyZXNTY3JvbGxQb3Np
dGlvblJlY29uY2lsaWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0
U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6bWFycXVlZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWlu
dE92ZXJsYXlTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWFj
aGFibGVUb3RhbENvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVy
dGljYWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhv
cml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxi
YXJXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhckhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRDb25zdHJhaW5zU2Ny
b2xsaW5nVG9Db250ZW50RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6YWxsb3dzQ3VycmVudFNjcm9sbCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjp2aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpkZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNj
cm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNQb2ludElu
UmVzaXplQ29udHJvbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFp
bnRMYXllckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxTY3JvbGxiYXIgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWE9mZnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZT2Zmc2V0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDogQWRhcHQgdG8gdGhlIGZhY3QgdGhhdAorICAg
ICAgICBSZW5kZXJMYXllciBpcyBubyBsb25nZXIgYSBTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVy
cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxp
bmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c3R5bGVEaWRDaGFuZ2UpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcDogTW9zdGx5IG1v
dmVkIGZyb20gUmVuZGVyTGF5ZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnN0b3JlU2Nyb2xs
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aGFuZGxlVG91Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpyZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJBc1RvdWNo
RXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjpzY3JvbGxhYmxlQXJlYUJvdW5kaW5nQm94IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzVXNlclNjcm9sbEluUHJv
Z3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRG
b3JQZXJmb3JtYW5jZVRlc3RpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6dXNlc0FzeW5jU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBs
eVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWVBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsYW1w
U2Nyb2xsT2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVDb21wb3NpdGluZ0xheWVy
c0FmdGVyU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnNjcm9sbFdpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbEhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlT3JEZXN0cm95TWFycXVl
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxz
T3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsaW5nTm9kZUlEIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQ29y
bmVyUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1Njcm9sbENvcm5lclZpc2libGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhciBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNpYmxlU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb250ZW50c1NpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVh
Y2hhYmxlVG90YWxDb250ZW50c1NpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3VsZFN1c3BlbmRTY3Jv
bGxBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmRpZEVuZFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpkaWRVcGRhdGVTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9sc1JlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9m
ZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpyZW5k
ZXJlckZvclNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6ZGVzdHJveVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc1ZlcnRpY2FsU2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmVu
Y2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFz
T3ZlcmZsb3dDb250cm9scyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dCb3R0b20gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZs
b3dMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6Om92ZXJmbG93UmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYXNIb3Jpem9udGFsT3ZlcmZsb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzVmVydGljYWxPdmVyZmxvdyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpzdHlsZVJlcXVpcmVzU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0
eWxlRGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsSW5mb0Fm
dGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3ZlcmZsb3dDb250cm9scyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJm
bG93Q29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6cGFpbnRTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6ZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50UmVzaXplcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNBY3RpdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGFzdEtu
b3duTW91c2VQb3NpdGlvbkluVmlldyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjppc0hhbmRsaW5nV2hlZWxFdmVudCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VEYXJrQXBwZWFyYW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRh
dGVTbmFwT2Zmc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjppc1Njcm9sbFNuYXBJblByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmxheVNjcm9sbGJhcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGl0VGVzdFJlc2l6ZXJJbkZy
YWdtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhciBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXll
ckZvclNjcm9sbENvcm5lciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlclN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyU2Nyb2xsQ29ybmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVJlc2l6
ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
bGVhclJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmFkanVzdGVkU2Nyb2xsRGVsdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFuU2Nyb2xsRnJvbVBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25z
QWZ0ZXJPdmVyZmxvd1Njcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3Nh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
ZGVidWdEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
IEFkYXB0IHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8gbG9uZ2Vy
IGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjplbmNs
b3NpbmdTY3JvbGxhYmxlQXJlYSBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvdXRwdXRSZW5kZXJUcmVlTGVnZW5kKTogQWRk
ICdTJyBzdGF0ZSBpbiBkZWJ1ZyBvdXRwdXQsCisgICAgICAgIGluZGljYXRpbmcgd2hldGhlciB0
aGUgUmVuZGVyTGF5ZXIgaGFzIGEgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0IGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IEFkZCBmcmllbmRzaGlwIHdpdGgKKyAgICAg
ICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5jcHA6IEFkYXB0IHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8g
bG9uZ2VyIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNj
cm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6IGNvbnN0KToK
KwogMjAyMS0wMS0xMyAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzE0MDEuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDE5YTA5MTE4NDMx
YjNiZmJlZjVmMDA2NmMwMTMwNDIyZjA0N2VjZi4uYWM5MDRkMzg2MDlkNzg3YTMxNzc3NTg4OTEz
YTljMmQ1MTllZjE0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtNDA4NSw2ICs0MDg1LDcgQEAKIAkJQkNFQTQ4NzYwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzNzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VB
NDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzOTA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVySW5saW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQkNFQTQ4N0EwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckxheWVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDgzQjA5N0Q5MzAy
MDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY1M0ZCODQyMTNCNzg2NDAwQzQwRDM0IC8qIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQ0VBNDg4MDA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0MTA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkNFQTQ4ODcwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0
ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCAqLzsgfTsKIAkJQkNFQTQ4OEEw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VBNDg0QjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
VGhlbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMzQyMjMsNiArMzQyMjQsNyBAQAogCQkJCTBGNTgwQ0ZGMEYxMkRFOUIwMDUxRDY4OSAvKiBS
ZW5kZXJMYXllckJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQ0ZEMEYxMkRFOUIw
MDUxRDY4OSAvKiBSZW5kZXJMYXllckNvbXBvc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTND
MjQ0RkVBQTM3NUFDNjMzRjg4QkU2RiAvKiBSZW5kZXJMYXllck1vZGVsT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjUzRkI4NDIxM0I3QTY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4
IC8qIFJlbmRlckxheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwQkUwMzBBMjBGMzEx
MkZCMDAzQzFBNDYgLyogUmVuZGVyTGluZUJveExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RUE0ODY0MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJMaW5lQnJlYWsuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMDIzMDBkOTg3ODUxYWJhMDRkN2QzM2Q1NmQwMGJj
NjkwMGZlNWFjYy4uM2M1NTMyNGY5NmRjMTM1MDVmNzE3YzQ5ZGE4OWE4YTg2ZDEwN2JkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJS
ZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM5MDYsNyArMzkwNyw3IEBAIFNjcm9sbGFibGVBcmVhKiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpnZXRTY3JvbGxhYmxlQXJlYUlmU2Nyb2xsYWJsZSgp
IGNvbnN0CiAgICAgaWYgKCFib3guY2FuQmVTY3JvbGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGJveC5sYXllcigpOworICAg
IHJldHVybiBib3gubGF5ZXIoKSA/IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpIDogbnVs
bHB0cjsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzY3JvbGxUbyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
aW5kZXggYTkzZWM1NTUwODkzNjBkOTYyMTBmMDQyZGQyZWNjODNlNzg5ZGY5Mi4uZDY5ZjI5NzA0
NTMxZTc4NzI1ODhkNGE1ZmY4ZDNhNTRiZTM2ZWFlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcApAQCAtODAsNiArODAsNyBAQAogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUg
IlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgpAQCAtMTg1Myw3ICsxODU0LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIEV2ZW50SGFu
ZGxlcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoTm9kZSogbm9kZSkKIAogICAgICAgICBpZiAo
YXV0byogc2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkg
ewogICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlTGF5ZXItPmlzUmVuZGVyVmlld0xheWVyKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxhYmxlQXJlYSgpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0yOTg0LDcgKzI5ODUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hl
ZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdCb3goTm9kZSogc3RhcnROb2RlLCBjbwogCiAg
ICAgUmVuZGVyQm94KiBjdXJyZW50RW5jbG9zaW5nQm94ID0gJmluaXRpYWxFbmNsb3NpbmdCb3g7
CiAgICAgd2hpbGUgKGN1cnJlbnRFbmNsb3NpbmdCb3gpIHsKLSAgICAgICAgaWYgKFJlbmRlckxh
eWVyKiBib3hMYXllciA9IGN1cnJlbnRFbmNsb3NpbmdCb3gtPmxheWVyKCkpIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJveExheWVyID0gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIoKSA/IGN1cnJl
bnRFbmNsb3NpbmdCb3gtPmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyKSB7CiAg
ICAgICAgICAgICBhdXRvIHBsYXRmb3JtRXZlbnQgPSB3aGVlbEV2ZW50LnVuZGVybHlpbmdQbGF0
Zm9ybUV2ZW50KCk7CiAgICAgICAgICAgICBib29sIHNjcm9sbGluZ1dhc0hhbmRsZWQ7CiAgICAg
ICAgICAgICBpZiAocGxhdGZvcm1FdmVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmlu
ZGV4IDQ3MGRkYzhmYTIyYzk5YmNkYTRjODdiOTc1OTU5YjFiODE5NGFlOTguLmZjMmIzNTc4NjMz
OTE2ZjM0MzJlOTM1MmMxZWNjYjE3NzA0NDY1Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2Nyb2xsYmFyUGFydC5oIgpAQCAtMzg2Myw3ICszODY0LDExIEBAIFNjcm9sbGFibGVBcmVh
KiBGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKICAgICBpZiAoIWxh
eWVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBsYXllci0+ZW5jbG9z
aW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOworICAgIGF1dG8qIGVuY2xvc2luZ1Njcm9sbGFibGVMYXllciA9
IGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNlbGZPck5vdDo6SW5jbHVk
ZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAgaWYgKCFlbmNsb3NpbmdTY3Jv
bGxhYmxlTGF5ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGVuY2xv
c2luZ1Njcm9sbGFibGVMYXllci0+c2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAogSW50UmVjdCBGcmFt
ZVZpZXc6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCopIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggZjY0OGQ2ZTIyYjE3NmIzOTcy
MjZiZjY5OTRjYzZiODRkMDIyZThmYy4uMWQ0Yzg2MTE3NmZlZGVmMjA2NGUyMjAyMzYzOTAxNDU2
Mzg0MWQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpA
QCAtNTQsNiArNTQsNyBAQAogI2ltcG9ydCAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW1wb3J0
ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXIuaCIKKyNpbXBvcnQgIlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbXBvcnQgIlJlbmRlckxpc3RCb3guaCIKICNpbXBvcnQgIlJl
bmRlclZpZXcuaCIKICNpbXBvcnQgIlJlbmRlcldpZGdldC5oIgpAQCAtNzkxLDcgKzc5MiwxMiBA
QCBzdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQm94KFJlbmRlckJveCYg
Ym94KQogICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihib3gpKQogICAgICAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyTGlzdEJveD4oJmJveCk7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7Cisg
ICAgaWYgKGJveC5sYXllcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBib3gubGF5ZXIoKS0+c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxhYmxlTGF5ZXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIEZJWE1F
OiBUaGlzIGNvdWxkIGJlIHdyaXR0ZW4gaW4gdGVybXMgb2YgU2Nyb2xsYWJsZUFyZWE6OmVuY2xv
c2luZ1Njcm9sbGFibGVBcmVhKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
CmluZGV4IDZiOWMxMTY2ZTk3YjM5YzIyZWYyNzgzYzJjMDJlZjY3ZDJhOTNjZWQuLjA2ZjVjMjVm
YTQ0MDhkNTRiMjQxNmExNzFkMjE5NDM1YzRiMTdhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCkBAIC05MjEsNiArOTIxLDI3IEBAIGJvb2wgUmVuZGVyQm94Ojppc1Nj
cm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3QKICAgICByZXR1cm4gY2FuQmVTY3Jv
bGxlZEFuZEhhc1Njcm9sbGFibGVBcmVhKCk7CiB9CiAKK2Jvb2wgUmVuZGVyQm94OjpyZXF1aXJl
c0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICAvLyBUaGUgUmVuZGVyVmll
dyBpcyBhbHdheXMgZXhwZWN0ZWQgdG8gYmUgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZS4KKyAgICBp
ZiAoaXNSZW5kZXJWaWV3KCkgfHwgaXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE92ZXJmbG93IGhhbmRsaW5nIG5lZWRzIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuCisgICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpIHx8IGhhc0hvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBSZXNpemUgaGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYS4KKyAgICBpZiAoc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTWFycXVlZSBoYW5kbGluZyBuZWVkcyBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhLgorICAgIGlmIChpc0hUTUxNYXJxdWVlKCkgJiYgc3R5bGUoKS5t
YXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBGSVhNRTogVGhpcyBpcyBiYWRs
eSBuYW1lZC4gb3ZlcmZsb3c6aGlkZGVuIGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5IHNjcm9sbGVk
LCB5ZXQgdGhpcyByZXR1cm5zIGZhbHNlIGluIHRoYXQgY2FzZS4KIGJvb2wgUmVuZGVyQm94Ojpj
YW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guaAppbmRleCA2MDRlYTlhNWQ3N2ViYTI2NmFmNTU0NDk4YjUzOWMwOGQ0YjJj
NDNhLi4wZmI4NzNkMjYxOWUxNWVlNjI5MDQ4NzY3MzcyMTA2YTcxM2IyNTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHx8ICFzdHlsZSgpLmhhc0F1dG9Vc2VkWkluZGV4KCkgfHwgaGFzUnVubmluZ0FjY2Vs
ZXJhdGVkQW5pbWF0aW9ucygpOwogICAgIH0KIAorICAgIGJvb2wgcmVxdWlyZXNMYXllcldpdGhT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0OwogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3Bh
cXVlSW5SZWN0KGNvbnN0IExheW91dFJlY3QmIGxvY2FsUmVjdCkgY29uc3QgZmluYWw7CiAgICAg
CiAgICAgLy8gUmV0dXJucyBmYWxzZSBmb3IgdGhlIGJvZHkgcmVuZGVyZXIgaWYgaXRzIGJhY2tn
cm91bmQgaXMgcHJvcGFnYXRlZCB0byB0aGUgcm9vdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCmluZGV4IDMzZjhlNmM5ZDA1ZWI1MTVmNDI5NTcxZWNjYjI5M2RhMWRl
N2Q4YWIuLmE5M2Q5YTA2MTgzZTViMWQ3ZTAzZmMwNTU2NmNlOWQxNzI4OWU4MWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWRvYmUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJp
Z2h0IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAg
LTk3LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJhY2tpbmcuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllckZpbHRlcnMu
aCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWFycXVlZS5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgogI2luY2x1
ZGUgIlJlbmRlclJlcGxpY2EuaCIKQEAgLTMwMSwxOCArMzAzLDE1IEBAIFJlbmRlckxheWVyOjpS
ZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxheWVyTW9kZWxPYmpl
Y3QpCiAgICAgLCBtX25vcm1hbEZsb3dMaXN0RGlydHkodHJ1ZSkKICAgICAsIG1faGFkTmVnYXRp
dmVaT3JkZXJMaXN0KGZhbHNlKQogICAgICwgbV9pblJlc2l6ZU1vZGUoZmFsc2UpCi0gICAgLCBt
X3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQogICAgICwgbV9oYXNTZWxmUGFpbnRpbmdMYXll
ckRlc2NlbmRhbnQoZmFsc2UpCiAgICAgLCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dERpcnR5KGZhbHNlKQogICAgICwgbV91c2VkVHJhbnNwYXJlbmN5KGZhbHNlKQogICAgICwgbV9w
YWludGluZ0luc2lkZVJlZmxlY3Rpb24oZmFsc2UpCi0gICAgLCBtX2luT3ZlcmZsb3dSZWxheW91
dChmYWxzZSkKICAgICAsIG1fcmVwYWludFN0YXR1cyhOZWVkc05vcm1hbFJlcGFpbnQpCiAgICAg
LCBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkodHJ1ZSkKICAgICAsIG1faGFzVmlzaWJsZUNv
bnRlbnQoZmFsc2UpCiAgICAgLCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkoZmFsc2Up
CiAgICAgLCBtX2hhc1Zpc2libGVEZXNjZW5kYW50KGZhbHNlKQotICAgICwgbV9yZWdpc3RlcmVk
U2Nyb2xsYWJsZUFyZWEoZmFsc2UpCiAgICAgLCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9y
dChmYWxzZSkKICAgICAsIG1fYmVoYXZlc0FzRml4ZWQoZmFsc2UpCiAgICAgLCBtXzNEVHJhbnNm
b3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkodHJ1ZSkKQEAgLTMyMCwyMSArMzE5LDExIEBAIFJl
bmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlckxh
eWVyTW9kZWxPYmplY3QpCiAgICAgLCBtX2hhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChmYWxzZSkK
ICAgICAsIG1faGFzQ29tcG9zaXRlZE5vbkNvbnRhaW5lZERlc2NlbmRhbnRzKGZhbHNlKQogICAg
ICwgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoZmFsc2UpCi0gICAgLCBtX2hhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coZmFsc2UpCiAgICAgLCBtX2hhc1RyYW5zZm9ybWVk
QW5jZXN0b3IoZmFsc2UpCiAgICAgLCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkK
ICAgICAsIG1faW5zaWRlU1ZHRm9yZWlnbk9iamVjdChmYWxzZSkKICAgICAsIG1faW5kaXJlY3RD
b21wb3NpdGluZ1JlYXNvbihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSW5kaXJlY3RDb21wb3NpdGlu
Z1JlYXNvbjo6Tm9uZSkpCiAgICAgLCBtX3ZpZXdwb3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVk
UmVhc29uKE5vTm90Q29tcG9zaXRlZFJlYXNvbikKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
I2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoZmFsc2UpCi0jZW5kaWYKLSAgICAsIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3JlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihmYWxzZSkKLSAgICAsIG1fY29udGFpbnNEaXJ0eU92
ZXJsYXlTY3JvbGxiYXJzKGZhbHNlKQotICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihm
YWxzZSkKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgICwgbV9sYXllckxpc3RNdXRhdGlvbkFsbG93
ZWQodHJ1ZSkKICNlbmRpZgpAQCAtMzU4LDE2ICszNDcsNiBAQCBSZW5kZXJMYXllcjo6UmVuZGVy
TGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXJMYXllck1vZGVsT2JqZWN0KQog
ICAgICAgICBtX3Zpc2libGVDb250ZW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICAgICAgbV9o
YXNWaXNpYmxlQ29udGVudCA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVmlz
aWJpbGl0eTo6VmlzaWJsZTsKICAgICB9Ci0KLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHJl
bmRlcmVyKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFdlIHNhdmUgYW5kIHJlc3RvcmUgb25s
eSB0aGUgc2Nyb2xsT2Zmc2V0IGFzIHRoZSBvdGhlciBzY3JvbGwgdmFsdWVzIGFyZSByZWNhbGN1
bGF0ZWQuCi0gICAgICAgIGlmIChyZW5kZXJCb3goKSkgewotICAgICAgICAgICAgbV9zY3JvbGxQ
b3NpdGlvbiA9IGVsZW1lbnQtPnNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAg
ICAgaWYgKCFtX3Njcm9sbFBvc2l0aW9uLmlzWmVybygpKQotICAgICAgICAgICAgICAgIHNjcm9s
bEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24pOwotICAgICAg
ICB9Ci0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3NpdGlvbihJbnRQb2lu
dCgpKTsKLSAgICB9CiB9CiAKIFJlbmRlckxheWVyOjp+UmVuZGVyTGF5ZXIoKQpAQCAtMzc1LDI5
ICszNTQsMTAgQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgaWYgKGluUmVzaXpl
TW9kZSgpKQogICAgICAgICByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkucmVzaXpl
TGF5ZXJEZXN0cm95ZWQoKTsKIAotICAgIEFTU0VSVChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA9PSByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5jb250YWluc1Njcm9sbGFibGVBcmVh
KHRoaXMpKTsKLQotICAgIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkKLSAgICAgICAg
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7
Ci0KLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSNlbmRpZgotICAgIGlmIChFbGVtZW50KiBlbGVt
ZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5
ZXJTY3JvbGxQb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGRlc3Ryb3lTY3JvbGxi
YXIoSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgZGVzdHJveVNjcm9sbGJhcihWZXJ0aWNhbFNj
cm9sbGJhcik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSByZW5kZXJl
cigpLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+d2lsbERlc3Ryb3lTY3JvbGxhYmxlQXJlYSgqdGhpcyk7Ci0KICAgICBpZiAobV9y
ZWZsZWN0aW9uKQogICAgICAgICByZW1vdmVSZWZsZWN0aW9uKCk7CiAKLSAgICBjbGVhclNjcm9s
bENvcm5lcigpOwotICAgIGNsZWFyUmVzaXplcigpOwotCisgICAgY2xlYXJMYXllclNjcm9sbGFi
bGVBcmVhKCk7CiAgICAgY2xlYXJMYXllckZpbHRlcnMoKTsKIAogICAgIGlmIChwYWludHNJbnRv
UHJvdmlkZWRCYWNraW5nKCkpIHsKQEAgLTQxNiw2ICszNzYsMjcxIEBAIFJlbmRlckxheWVyOjp+
UmVuZGVyTGF5ZXIoKQogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04ocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhZmlyc3RDaGlsZCgp
KTsKIH0KIAorLy8gU3RhcnQgb2YgdGVtcG9yYXJ5IGdsdWUgY29kZSB0byBoZWxwIGxhbmRpbmcg
d2Via2l0Lm9yZy9iLzYwMzA1IChzcGxpdCBSZW5kZXJMYXllciBpbnRvIFJlbmRlckxheWVyL1Jl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpCitTY3JvbGxUeXBlIFJlbmRlckxheWVyOjpjdXJyZW50
U2Nyb2xsVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5jdXJyZW50U2Nyb2xsVHlwZSgpOworICAgIHJldHVy
biBTY3JvbGxUeXBlOjpVc2VyOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzZXRDdXJyZW50U2Ny
b2xsVHlwZShTY3JvbGxUeXBlIHNjcm9sbFR5cGUpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFy
ZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50U2Nyb2xsVHlw
ZShzY3JvbGxUeXBlKTsKK30KKworU2Nyb2xsQW5pbWF0b3ImIFJlbmRlckxheWVyOjpzY3JvbGxB
bmltYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8UmVuZGVyTGF5ZXIqPih0
aGlzKS0+ZW5zdXJlTGF5ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxBbmltYXRvcigpOworfQor
CitTY3JvbGxPZmZzZXQgUmVuZGVyTGF5ZXI6OnNjcm9sbE9mZnNldCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5z
Y3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4geyAwLCAwIH07Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zmc2V0LCBjb25z
dCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXQsIG9wdGlvbnMp
OworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0LCBTY3JvbGxDbGFtcGluZyBjbGFtcGluZykKK3sKKyAg
ICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihvZmZzZXQsIGNsYW1waW5nKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9Y
UG9zaXRpb24oaW50IHgsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvWFBvc2l0aW9u
KHgsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihp
bnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQoreworICAg
IGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9YUG9zaXRpb24oeSwgb3B0aW9u
cyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFNjcm9s
bFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2V0U2Nyb2xsUG9z
aXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxC
eVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9s
bGVkQXJlYSkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+c2Nyb2xsQnlSZWN1cnNpdmVseShkZWx0YSwgc2Nyb2xsZWRBcmVhKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9u
KGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbikKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0UmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKHJlcXVpcmVzUmVjb25jaWxpYXRpb24pOworfQorCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykKK3sKKyAgICBpZiAo
IWFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZykgeworICAgICAgICBpZiAoIW1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcodHJ1ZSk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OmRpZEVuZFNjcm9sbCgpCit7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmRpZEVuZFNjcm9sbCgpOwor
fQorI2VuZGlmCisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hl
ZFN0YXRlKGJvb2wgc2hvdWxkQ2xlYXIpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRl
KHNob3VsZENsZWFyKTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6c2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHJlbmRlcmVyKCku
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworfQorCitib29sIFJl
bmRlckxheWVyOjpjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdAoreworICAg
IGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9y
KCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEtPmhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1JlbmRlck1hcnF1ZWUqIFJlbmRlckxheWVyOjptYXJxdWVlKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPm1hcnF1ZWUoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBk
YXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7Cit9CisKK2Jvb2wgUmVuZGVy
TGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwg
bG9jYWxQb2ludCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVy
bGF5Q29udHJvbHMpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Ny
b2xsYWJsZUFyZWEtPnBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCBwb2ludCwgZGFtYWdl
UmVjdCwgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYg
cG9pbnQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpCit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBhaW50UmVzaXplcihjb250ZXh0
LCBwb2ludCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBwb2lu
dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmxheVNjcm9s
bGJhcnMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VS
ZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gYmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9z
Y3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhjb250ZXh0LCBkYW1hZ2VSZWN0
LCBiZWhhdmlvciwgc3VidHJlZVBhaW50Um9vdCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXI6
OnJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxh
YmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnJlYWNoYWJsZVRvdGFs
Q29udGVudHNTaXplKCk7CisgICAgcmV0dXJuIHsgMCwgMCB9OworfQorCitib29sIFJlbmRlckxh
eWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgaWYg
KG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5ob3Jp
em9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QK
K3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJs
ZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9w
dGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBwb3NpdGlvbikKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c2V0UG9zdExheW91dFNjcm9sbFBvc2l0
aW9uKHBvc2l0aW9uKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6cGFuU2Nyb2xsRnJvbVBvaW50
KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFuU2Nyb2xsRnJvbVBvaW50KHBvaW50KTsKK30KKwor
U2Nyb2xsUG9zaXRpb24gUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEt
PnNjcm9sbFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIFNjcm9sbFBvc2l0aW9uKCk7Cit9CisKK0dy
YXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBj
b25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworU2Nyb2xsYmFyKiBSZW5kZXJMYXllcjo6aG9yaXpvbnRh
bFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1Njcm9sbGJhciogUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJu
IG1fc2Nyb2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQo
KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxP
dmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
dHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxl
VmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlVmVydGljYWxPdmVy
ZmxvdygpOworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkg
Y29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Ny
b2xsYWJsZUFyZWEtPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgocmVsZXZhbmN5KTsKKyAgICByZXR1
cm4gMDsKK30KKworaW50IFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6
b250YWxTY3JvbGxiYXJIZWlnaHQocmVsZXZhbmN5KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIHJldHVybiBl
bnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0Q29uc3RyYWluc1Njcm9s
bGluZ1RvQ29udGVudEVkZ2UoYm9vbCBjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSkK
K3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoY29uc3RyYWluc1Njcm9sbGluZ1Rv
Q29udGVudEVkZ2UpOworfQorLy8gRW5kIG9mIHRlbXBvcmFyeSBnbHVlIGNvZGUKKwogdm9pZCBS
ZW5kZXJMYXllcjo6YWRkQ2hpbGQoUmVuZGVyTGF5ZXImIGNoaWxkLCBSZW5kZXJMYXllciogYmVm
b3JlQ2hpbGQpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIHByZXZTaWJsaW5nID0gYmVmb3JlQ2hpbGQg
PyBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKQEAgLTk0Niw3
ICsxMTcxLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxh
eW91dChib29sIGlzUmVsYXlvdXRpbmdTdWJ0cmVlLCBib28KIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4gZmxhZ3MpCiB7CiAgICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbigmZmxhZ3MpOwotICAgIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVk
ZWQoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJl
YS0+YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOwogCiAgICAgaWYgKGdl
b21ldHJ5TWFwKQogICAgICAgICBnZW9tZXRyeU1hcC0+cHVzaE1hcHBpbmdzVG9BbmNlc3Rvcih0
aGlzLCBwYXJlbnQoKSk7CkBAIC05NTQsNyArMTE4MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcCwgT3B0aW9u
U2V0CiAgICAgLy8gQ2xlYXIgb3VyIGNhY2hlZCBjbGlwIHJlY3QgaW5mb3JtYXRpb24uCiAgICAg
Y2xlYXJDbGlwUmVjdHMoKTsKIAotICAgIGlmIChoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0Nv
bnRyb2xzKCkpIHsKICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXRGcm9tUm9vdDsKICAgICAgICAg
aWYgKGdlb21ldHJ5TWFwKQogICAgICAgICAgICAgb2Zmc2V0RnJvbVJvb3QgPSBMYXlvdXRTaXpl
KHRvRmxvYXRTaXplKGdlb21ldHJ5TWFwLT5hYnNvbHV0ZVBvaW50KEZsb2F0UG9pbnQoKSkpKTsK
QEAgLTk2Myw3ICsxMTg5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnMoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAgICAgICAg
IC8vIGFzIGNhblVzZU9mZnNldEZyb21BbmNlc3RvciBtYXkgYmUgdHJ1ZSBmb3IgYW4gYW5jZXN0
b3IgbGF5ZXIuCiAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdCA9IG9mZnNldEZyb21BbmNlc3Rv
cihyb290KCkpOwogICAgICAgICB9Ci0gICAgICAgIHBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhy
b3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT5wb3NpdGlvbk92ZXJmbG93Q29udHJvbHMocm91bmRlZEludFNpemUob2Zmc2V0RnJvbVJvb3Qp
KTsKICAgICB9CiAKICAgICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKQEAgLTEw
MzksMTQgKzEyNjUsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhS
ZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0cnlNYXAsIE9wdGlvblNldAogICAgIGZvciAoUmVuZGVy
TGF5ZXIqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgY2hpbGQtPnVwZGF0ZUxheWVyUG9zaXRpb25zKGdlb21ldHJ5TWFw
LCBmbGFncyk7CiAKLSAgICAvLyBXaXRoIGFsbCBvdXIgY2hpbGRyZW4gcG9zaXRpb25lZCwgbm93
IHVwZGF0ZSBvdXIgbWFycXVlZSBpZiB3ZSBuZWVkIHRvLgotICAgIGlmIChtX21hcnF1ZWUpIHsK
LSAgICAgICAgLy8gRklYTUU6IHdvdWxkIGxpa2UgdG8gdXNlIFNldEZvclNjb3BlPD4gYnV0IGl0
IGRvZXNuJ3Qgd29yayB3aXRoIGJpdGZpZWxkcy4KLSAgICAgICAgYm9vbCBvbGRVcGRhdGluZ01h
cnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgICAgIG1fdXBk
YXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gb2xk
VXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQorICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRhdGVNYXJxdWVlUG9zaXRpb24oKTsKIAog
ICAgIGlmIChyZW5kZXJlcigpLmlzRml4ZWRQb3NpdGlvbmVkKCkgJiYgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGaXhlZFBvc2l0aW9uRW5hYmxlZCgpKSB7
CiAgICAgICAgIGJvb2wgaW50ZXJzZWN0c1ZpZXdwb3J0ID0gY29tcG9zaXRvcigpLmZpeGVkTGF5
ZXJJbnRlcnNlY3RzVmlld3BvcnQoKnRoaXMpOwpAQCAtMTEyNiwyNyArMTM0Niw2IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OmNsZWFyUmVwYWludFJlY3RzKCkKICAgICByZW5kZXJlcigpLmNsZWFyUmVw
YWludExheW91dFJlY3RzKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9z
aXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCgpCi17Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVuZGVy
ZXIoKS52aWV3KCkubGF5ZXIoKSk7Ci0KLSAgICBMT0coU2Nyb2xsaW5nLCAiUmVuZGVyTGF5ZXI6
OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9sbCIpOwotCi0gICAgUmVuZGVy
R2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Ci0gICAgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOwotfQotCi12b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKQotewotICAgIFJlbmRl
ckdlb21ldHJ5TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOwotICAgIGlmICh0aGlzICE9
IHJlbmRlcmVyKCkudmlldygpLmxheWVyKCkpCi0gICAgICAgIGdlb21ldHJ5TWFwLnB1c2hNYXBw
aW5nc1RvQW5jZXN0b3IocGFyZW50KCksIG51bGxwdHIpOwotCi0gICAgLy8gRklYTUU6IHdoeSBp
cyBpdCBPSyB0byBub3QgY2hlY2sgdGhlIGFuY2VzdG9ycyBvZiB0aGlzIGxheWVyIGluIG9yZGVy
IHRvCi0gICAgLy8gaW5pdGlhbGl6ZSB0aGUgSGFzU2VlblZpZXdwb3J0Q29uc3RyYWluZWRBbmNl
c3RvciBhbmQgSGFzU2VlbkFuY2VzdG9yV2l0aE92ZXJmbG93Q2xpcCBmbGFncz8KLSAgICB1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgSXNPdmVyZmxvd1Njcm9s
bCk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3Jv
bGwoUmVuZGVyR2VvbWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+IGZsYWdzKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZG4ndCBiZSBuZWVkZWQsIGJ1dCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgd2hlcmUK
QEAgLTExOTksMTIgKzEzOTgsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyU2Nyb2xsKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1hcAogICAgIC8vIG9m
IGFuIG9iamVjdCwgdGh1cyBSZW5kZXJSZXBsaWNhIHdpbGwgc3RpbGwgcmVwYWludCBpdHNlbGYg
cHJvcGVybHkgYXMgdGhlIGxheWVyIHBvc2l0aW9uIHdhcwogICAgIC8vIHVwZGF0ZWQgYWJvdmUu
CiAKLSAgICBpZiAobV9tYXJxdWVlKSB7Ci0gICAgICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVl
UG9zaXRpb24gPSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwotICAgICAgICBtX3VwZGF0aW5n
TWFycXVlZVBvc2l0aW9uID0gdHJ1ZTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVl
UG9zaXRpb24oKTsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0
aW5nTWFycXVlZVBvc2l0aW9uOwotICAgIH0KKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAg
ICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CiAKICAgICBp
ZiAoc2hvdWxkUHVzaEFuZFBvcE1hcHBpbmdzKQogICAgICAgICBnZW9tZXRyeU1hcC0+cG9wTWFw
cGluZ3NUb0FuY2VzdG9yKHBhcmVudCgpKTsKQEAgLTE2OTUsOCArMTg5MCwxMCBAQCBib29sIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0
aW9uc0ZsYWc+KiBmbGFncwogICAgIFJlbmRlckxheWVyKiBwb3NpdGlvbmVkUGFyZW50OwogICAg
IGlmIChyZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChwb3NpdGlvbmVkUGFy
ZW50ID0gZW5jbG9zaW5nQW5jZXN0b3JGb3JQb3NpdGlvbihyZW5kZXJlcigpLnN0eWxlKCkucG9z
aXRpb24oKSkpKSB7CiAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGxheWVycywgd2Ugc3VidHJh
Y3Qgb3V0IHRoZSBlbmNsb3NpbmcgcG9zaXRpb25lZCBsYXllcidzIHNjcm9sbCBvZmZzZXQuCi0g
ICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgp
KQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocG9zaXRpb25lZFBhcmVu
dC0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIGlmIChwb3NpdGlvbmVkUGFyZW50LT5yZW5k
ZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcG9zaXRp
b25lZFBhcmVudFNjcm9sbGFibGVBcmVhID0gcG9zaXRpb25lZFBhcmVudC0+c2Nyb2xsYWJsZUFy
ZWEoKSkKKyAgICAgICAgICAgICAgICBsb2NhbFBvaW50IC09IHRvTGF5b3V0U2l6ZShwb3NpdGlv
bmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBpZiAocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKS5pc0luRmxv
d1Bvc2l0aW9uZWQoKSAmJiBpczxSZW5kZXJJbmxpbmU+KHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRl
cmVyKCkpKSB7CiAgICAgICAgICAgICBMYXlvdXRTaXplIG9mZnNldCA9IGRvd25jYXN0PFJlbmRl
cklubGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkub2Zmc2V0Rm9ySW5GbG93UG9z
aXRpb25lZElubGluZSgmZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CkBAIC0xNzA2
LDggKzE5MDMsMTAgQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbihPcHRp
b25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFnPiogZmxhZ3MKICAgICAgICAgQVNTRVJUKHBv
c2l0aW9uZWRQYXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAgIG1fYm94
U2Nyb2xsaW5nU2NvcGUgPSBwb3NpdGlvbmVkUGFyZW50LT5jb250ZW50c1Njcm9sbGluZ1Njb3Bl
KCk7CiAgICAgfSBlbHNlIGlmIChhdXRvKiBwYXJlbnRMYXllciA9IHBhcmVudCgpKSB7Ci0gICAg
ICAgIGlmIChwYXJlbnRMYXllci0+cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAg
ICAgICAgIGxvY2FsUG9pbnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudCgpLT5zY3JvbGxQb3NpdGlv
bigpKTsKKyAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJlcigpLmhhc092ZXJmbG93Q2xp
cCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogcGFyZW50TGF5ZXJTY3JvbGxhYmxlQXJlYSA9
IHBhcmVudExheWVyLT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2FsUG9p
bnQgLT0gdG9MYXlvdXRTaXplKHBhcmVudExheWVyU2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFBvc2l0
aW9uKCkpOworICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKHBhcmVudExheWVyLT5jb250ZW50
c1Njcm9sbGluZ1Njb3BlKCkpOwogICAgICAgICBtX2JveFNjcm9sbGluZ1Njb3BlID0gcGFyZW50
TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKQEAgLTE4MzksOSArMjAzOCw5IEBAIFJl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nTGF5ZXJJbkNvbnRhaW5pbmdCbG9ja09y
ZGVyKCkgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlbmRlckxheWVy
KiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKK1Jl
bmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0
CiB7Ci0gICAgYXV0byogb3duZXJFbGVtZW50ID0gbGF5ZXIucmVuZGVyZXIoKS5kb2N1bWVudCgp
Lm93bmVyRWxlbWVudCgpOworICAgIGF1dG8qIG93bmVyRWxlbWVudCA9IHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5vd25lckVsZW1lbnQoKTsKICAgICBpZiAoIW93bmVyRWxlbWVudCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKQEAgLTE4NTIsMTUgKzIwNTEsMTUgQEAgc3RhdGljIFJlbmRlckxh
eWVyKiBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikK
ICAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+ZW5jbG9zaW5nTGF5ZXIoKTsKIH0KIAotc3RhdGlj
IFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjb25zdCBSZW5kZXJM
YXllciYgbGF5ZXIsIENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJhbWVCb3VuZGFyaWVzKQor
UmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKIHsKLSAgICBp
ZiAoYXV0byogYW5jZXN0b3IgPSBsYXllci5lbmNsb3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2Nr
T3JkZXIoKSkKKyAgICBpZiAoYXV0byogYW5jZXN0b3IgPSBlbmNsb3NpbmdMYXllckluQ29udGFp
bmluZ0Jsb2NrT3JkZXIoKSkKICAgICAgICAgcmV0dXJuIGFuY2VzdG9yOwogCiAgICAgaWYgKGNy
b3NzRnJhbWVCb3VuZGFyaWVzID09IENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihs
YXllcik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogUmVu
ZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5jbHVkZVNl
bGZPck5vdCBpbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMgY3Jvc3NGcmFtZUJvdW5k
YXJpZXMpIGNvbnN0CkBAIC0xODc0LDcgKzIwNzMsNyBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5
ZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxm
LAogICAgIGlmIChpbmNsdWRlU2VsZiA9PSBJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiAm
JiBpc0NvbnNpZGVyZWRTY3JvbGxhYmxlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8UmVuZGVyTGF5ZXIqPih0aGlzKTsKICAgICAKLSAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9
IGVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKCp0aGlzLCBjcm9zc0ZyYW1lQm91bmRhcmll
cyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIo
Km5leHRMYXllciwgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpKSB7CisgICAgZm9yIChhdXRvKiBuZXh0
TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmll
cyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gbmV4dExheWVyLT5lbmNsb3NpbmdDb250YWluaW5n
QmxvY2tMYXllcihjcm9zc0ZyYW1lQm91bmRhcmllcykpIHsKICAgICAgICAgaWYgKGlzQ29uc2lk
ZXJlZFNjcm9sbGFibGUoKm5leHRMYXllcikpCiAgICAgICAgICAgICByZXR1cm4gbmV4dExheWVy
OwogICAgIH0KQEAgLTE4ODIsNTAgKzIwODEsNiBAQCBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6
OmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1JbnRSZWN0IFJlbmRlckxheWVyOjpzY3JvbGxhYmxl
QXJlYUJvdW5kaW5nQm94KGJvb2wqIGlzSW5zaWRlRml4ZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHJlbmRlcmVyKCkuYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoLyogdXNlVHJhbnNmb3JtcyAqLyB0
cnVlLCBpc0luc2lkZUZpeGVkKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNVc2VyU2Nyb2xs
SW5Qcm9ncmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBw
YWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmlzVXNlclNjcm9sbEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0
b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmlt
YXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpOwotICAgIAotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Ci17
Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5pc1J1YmJlckJhbmRJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgp
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICByZXR1cm4gc2Ny
b2xsQW5pbWF0b3ItPmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKTsKLSNlbmRpZgotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpmb3JjZVVwZGF0ZVNjcm9sbGJhcnNP
bk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdAotewotICAgIHJldHVybiBy
ZW5kZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5hYmxlZCgp
OwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xvc2luZ1RyYW5zZm9ybWVkQW5j
ZXN0b3IoKSBjb25zdAogewogICAgIFJlbmRlckxheWVyKiBjdXJyID0gcGFyZW50KCk7CkBAIC0y
NDUxLDE5ICsyNjA2LDYgQEAgTGF5b3V0U2l6ZSBSZW5kZXJMYXllcjo6b2Zmc2V0RnJvbUFuY2Vz
dG9yKGNvbnN0IFJlbmRlckxheWVyKiBhbmNlc3RvckxheWVyLCBDb2wKICAgICByZXR1cm4gdG9M
YXlvdXRTaXplKGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIExheW91dFBvaW50
KCksIGFkanVzdEZvckNvbHVtbnMpKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6Y2FuVXNlQ29t
cG9zaXRlZFNjcm9sbGluZygpIGNvbnN0Ci17Ci0gICAgYm9vbCBpc1Zpc2libGUgPSByZW5kZXJl
cigpLnN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGU7Ci0gICAgaWYg
KHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFpc0luc2lk
ZVNWR0ZvcmVpZ25PYmplY3QoKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEVOQUJM
RShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi0gICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBzY3Jv
bGxzT3ZlcmZsb3coKSAmJiAocmVuZGVyZXIoKS5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3Jv
bGxpbmcoKSB8fCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWx3YXlzVXNlQWNjZWxlcmF0ZWRPdmVy
Zmxvd1Njcm9sbCgpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KICNp
ZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKIGJvb2wgUmVuZGVyTGF5ZXI6OmhhbmRsZVRvdWNo
RXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiB0b3VjaEV2ZW50KQogewpAQCAtMjQ5Mywz
MDUgKzI2MzUsMzMgQEAgdm9pZCBSZW5kZXJMYXllcjo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExp
c3RlbmVyRm9yU2Nyb2xsaW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUoSU9TX1RPVUNIX0VWRU5U
UykKIAotLy8gRklYTUU6IHRoaXMgaXMgb25seSB2YWxpZCBhZnRlciB3ZSd2ZSBtYWRlIGxheWVy
cy4KLWJvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3N0
YXRpYyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFt
ZUVsZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKIHsK
LSAgICByZXR1cm4gaXNDb21wb3NpdGVkKCkgJiYgYmFja2luZygpLT5oYXNTY3JvbGxpbmdMYXll
cigpOwotfQorICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4cGxpY2l0bHkgZm9yYmlkZGVu
LCBwZXJtaXQgc2Nyb2xsaW5nLgorICAgIGlmIChmcmFtZUVsZW1lbnRCYXNlICYmIGZyYW1lRWxl
bWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpCisgICAgICAg
IHJldHVybiB0cnVlOwogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3Zl
IG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0FzeW5jU2Nyb2xsaW5nKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY29tcG9zaXRvcigpLnVzZUNvb3JkaW5hdGVkU2Nyb2xsaW5nRm9y
TGF5ZXIoKnRoaXMpOworICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBp
bml0aWF0ZWQgc2Nyb2xscyBzaG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCisgICAgaWYgKGZy
YW1lVmlldy53YXNTY3JvbGxlZEJ5VXNlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBGb3JiaWQgYXV0b3Njcm9sbHMgd2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJt
aXRzIG90aGVyIHByb2dyYW1tYXRpYyBzY3JvbGxzLAorICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0
byBhbiBhbmNob3IuCisgICAgcmV0dXJuICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIo
KS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZGp1c3Rl
ZFNjcm9sbERlbHRhKGludCBiZWdpbm5pbmdEZWx0YSkKK2Jvb2wgUmVuZGVyTGF5ZXI6OmFsbG93
c0N1cnJlbnRTY3JvbGwoKSBjb25zdAogewotICAgIC8vIFRoaXMgaW1wbGVtZW50aW9uIG1hdGNo
ZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96aWxsYS5vcmcvZmlyZWZveC9zb3Vy
Y2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwjODU2LgotICAgIGNvbnN0IGlu
dCBzcGVlZFJlZHVjZXIgPSAxMjsKLQotICAgIGludCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5n
RGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYgKGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAg
ICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1c3RlZERlbHRhICogc3FydChz
dGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFk
anVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRqdXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGlu
dD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0
YSkpKSArIDE7CisgICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsKLX0KKyAgICAvLyBE
b24ndCBzY3JvbGwgdG8gcmV2ZWFsIGFuIG92ZXJmbG93IGxheWVyIHRoYXQgaXMgcmVzdHJpY3Rl
ZCBieSB0aGUgLXdlYmtpdC1saW5lLWNsYW1wIHByb3BlcnR5LgorICAgIC8vIEZJWE1FOiBJcyB0
aGlzIHN0aWxsIG5lZWRlZD8gSXQgdXNlZCB0byBiZSByZWxldmFudCBmb3IgU2FmYXJpIFJTUy4K
KyAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSAmJiAhcmVuZGVyZXIoKS5wYXJlbnQoKS0+c3R5
bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1zdGF0
aWMgaW5saW5lIEludFNpemUgYWRqdXN0ZWRTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBkZWx0
YSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLndpZHRo
KCkpLCBhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhLmhlaWdodCgpKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYgc291cmNlUG9pbnQp
Ci17Ci0gICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQb3NpdGlvbiA9IHJlbmRlcmVyKCkuZnJh
bWUoKS5ldmVudEhhbmRsZXIoKS5sYXN0S25vd25Nb3VzZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgbGFzdCBrbm93biBtb3VzZSBwb3NpdGlvbiBpcyBv
dXQgb2YgdGhlIHdpbmRvdy4gV2hlbiB0aGUgbW91c2UgaXMgb3V0IG9mIHRoZSB3aW5kb3csIHRo
ZSBwb3NpdGlvbiBpcyBpbmNvaGVyZW50Ci0gICAgc3RhdGljIEludFBvaW50IHByZXZpb3VzTW91
c2VQb3NpdGlvbjsKLSAgICBpZiAobGFzdEtub3duTW91c2VQb3NpdGlvbi54KCkgPCAwIHx8IGxh
c3RLbm93bk1vdXNlUG9zaXRpb24ueSgpIDwgMCkKLSAgICAgICAgbGFzdEtub3duTW91c2VQb3Np
dGlvbiA9IHByZXZpb3VzTW91c2VQb3NpdGlvbjsKLSAgICBlbHNlCi0gICAgICAgIHByZXZpb3Vz
TW91c2VQb3NpdGlvbiA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb247Ci0KLSAgICBJbnRTaXplIGRl
bHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAtIHNvdXJjZVBvaW50OwotCi0gICAgaWYgKGFi
cyhkZWx0YS53aWR0aCgpKSA8PSBTY3JvbGxWaWV3Ojpub1BhblNjcm9sbFJhZGl1cykgLy8gYXQg
dGhlIGNlbnRlciB3ZSBsZXQgdGhlIHNwYWNlIGZvciB0aGUgaWNvbgotICAgICAgICBkZWx0YS5z
ZXRXaWR0aCgwKTsKLSAgICBpZiAoYWJzKGRlbHRhLmhlaWdodCgpKSA8PSBTY3JvbGxWaWV3Ojpu
b1BhblNjcm9sbFJhZGl1cykKLSAgICAgICAgZGVsdGEuc2V0SGVpZ2h0KDApOwotCi0gICAgc2Ny
b2xsQnlSZWN1cnNpdmVseShhZGp1c3RlZFNjcm9sbERlbHRhKGRlbHRhKSk7Ci19Ci0KLS8vIEZJ
WE1FOiB1bmlmeSB3aXRoIHRoZSBzY3JvbGxSZWN0VG9WaXNpYmxlKCkgY29kZSBiZWxvdy4KLXZv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEs
IFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhKQotewotICAgIGlmIChkZWx0YS5pc1plcm8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSBm
YWxzZTsKLSAgICBpZiAocmVuZGVyZXIoKS5wYXJlbnQoKSkKLSAgICAgICAgcmVzdHJpY3RlZEJ5
TGluZUNsYW1wID0gIXJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkubGluZUNsYW1wKCkuaXNO
b25lKCk7Ci0KLSAgICBpZiAocmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhcmVzdHJp
Y3RlZEJ5TGluZUNsYW1wKSB7Ci0gICAgICAgIFNjcm9sbE9mZnNldCBuZXdTY3JvbGxPZmZzZXQg
PSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOwotICAgICAgICBzY3JvbGxUb09mZnNldChuZXdTY3Jv
bGxPZmZzZXQpOwotICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQotICAgICAgICAgICAgKnNjcm9s
bGVkQXJlYSA9IHRoaXM7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBsYXllciBjYW4ndCBkbyB0aGUg
c2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBzY3JvbGwgdG8gdHJ5Ci0g
ICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3U2Nyb2xsT2Zmc2V0IC0g
c2Nyb2xsT2Zmc2V0KCk7Ci0gICAgICAgIGlmICghcmVtYWluaW5nU2Nyb2xsT2Zmc2V0LmlzWmVy
bygpICYmIHJlbmRlcmVyKCkucGFyZW50KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNraXBzIHNjcm9sbGFibGUgZnJhbWVzLgotICAgICAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFi
bGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNs
dWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpCi0gICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJlbWFpbmluZ1Njcm9sbE9mZnNldCwg
c2Nyb2xsZWRBcmVhKTsKLQotICAgICAgICAgICAgcmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnVwZGF0ZUF1dG9zY3JvbGxSZW5kZXJlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGhlcmUsIHdlIHdlcmUgY2FsbGVkIG9uIGEgcmVuZGVy
ZXIgdGhhdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseSBzY3JvbGxlZCwgYnV0IGRvZXNuJ3QKLSAg
ICAgICAgLy8gaGF2ZSBhbiBvdmVyZmxvdyBjbGlwLiBXaGljaCBtZWFucyB0aGF0IGl0IGlzIGEg
ZG9jdW1lbnQgbm9kZSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4KLSAgICAgICAgcmVuZGVyZXIoKS52
aWV3KCkuZnJhbWVWaWV3KCkuc2Nyb2xsQnkoZGVsdGEpOwotICAgICAgICBpZiAoc2Nyb2xsZWRB
cmVhKQotICAgICAgICAgICAgKnNjcm9sbGVkQXJlYSA9ICZyZW5kZXJlcigpLnZpZXcoKS5mcmFt
ZVZpZXcoKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0IHNjcm9sbCB0aGUgd2hv
bGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBmcmFtZXMgb3duZXJFbGVt
ZW50PyAKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI4MjM3Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyOjpzZXRQb3N0TGF5b3V0U2Nyb2xs
UG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0aW9uKQotewotICAgIG1fcG9z
dExheW91dFNjcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6
OmFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZOZWVkZWQoKQotewotICAgIGlmICghbV9w
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHNjcm9sbFRv
T2Zmc2V0KHNjcm9sbE9mZnNldEZyb21Qb3NpdGlvbihtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bi52YWx1ZSgpKSk7Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBXVEY6Om51bGxv
cHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBjb25z
dCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgU2Nyb2xsUG9z
aXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIHNldFNjcm9sbFBv
c2l0aW9uKHBvc2l0aW9uLCBvcHRpb25zKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG9ZUG9zaXRpb24oaW50IHksIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbihtX3Njcm9sbFBvc2l0aW9uLngo
KSwgeSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOwotfQotCi12
b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbiYg
cG9zaXRpb24sIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBzY3JvbGxUb09mZnNldChzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24ocG9zaXRpb24pLCBv
cHRpb25zKTsKLX0KLQotU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpjbGFtcFNjcm9sbE9mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2Nyb2xsT2Zmc2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xs
T2Zmc2V0KCkpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25V
cGRhdGUoY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBTY3JvbGxUeXBlIHNjcm9sbFR5
cGUsIFNjcm9sbENsYW1waW5nIGNsYW1waW5nKQotewotI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJ
TkcpCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICp0aGlzIDw8ICIg
cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlICIgPDwgcG9zaXRpb24pOwotCi0gICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVxdWVzdFNjcm9sbFBvc2l0
aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xhbXBpbmcpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNl
dChjb25zdCBTY3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjdXJyZW50U2Nyb2xsQmVoYXZpb3JT
dGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6SW5Ob25OYXRpdmVBbmltYXRpb24pCi0g
ICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuY2FuY2VsQW5pbWF0aW9ucygpOwotCi0gICAgU2Nyb2xs
T2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBvcHRpb25zLmNsYW1waW5nID09IFNjcm9sbENs
YW1waW5nOjpDbGFtcGVkID8gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KSA6IHNjcm9s
bE9mZnNldDsKLSAgICBpZiAoY2xhbXBlZFNjcm9sbE9mZnNldCA9PSB0aGlzLT5zY3JvbGxPZmZz
ZXQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcmV2aW91c1Njcm9sbFR5cGUgPSBj
dXJyZW50U2Nyb2xsVHlwZSgpOwotICAgIHNldEN1cnJlbnRTY3JvbGxUeXBlKG9wdGlvbnMudHlw
ZSk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgc25hcHBlZE9mZnNldCA9IGNlaWxlZEludFBvaW50KHNj
cm9sbEFuaW1hdG9yKCkuYWRqdXN0U2Nyb2xsT2Zmc2V0Rm9yU25hcHBpbmdJZk5lZWRlZChjbGFt
cGVkU2Nyb2xsT2Zmc2V0LCBvcHRpb25zLnNuYXBQb2ludFNlbGVjdGlvbk1ldGhvZCkpOwotICAg
IGlmIChvcHRpb25zLmFuaW1hdGVkID09IEFuaW1hdGVkU2Nyb2xsOjpZZXMpCi0gICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdpdGhBbmltYXRpb24oc25hcHBlZE9mZnNldCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gc25hcHBlZFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRp
b25Gcm9tT2Zmc2V0KHNuYXBwZWRPZmZzZXQpOwotICAgICAgICBpZiAoIXJlcXVlc3RTY3JvbGxQ
b3NpdGlvblVwZGF0ZShzbmFwcGVkUG9zaXRpb24sIG9wdGlvbnMudHlwZSwgb3B0aW9ucy5jbGFt
cGluZykpCi0gICAgICAgICAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oc25hcHBl
ZE9mZnNldCwgb3B0aW9ucy5jbGFtcGluZyk7Ci0gICAgICAgIHNldFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbik7Ci0gICAgfQotCi0gICAg
c2V0Q3VycmVudFNjcm9sbFR5cGUocHJldmlvdXNTY3JvbGxUeXBlKTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllcjo6c2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uKQotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgaWYgKCFib3gpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVy
TGF5ZXI6OnNjcm9sbFRvICIgPDwgcG9zaXRpb24gPDwgIiBmcm9tICIgPDwgbV9zY3JvbGxQb3Np
dGlvbiA8PCAiIChpcyB1c2VyIHNjcm9sbCAiIDw8IChjdXJyZW50U2Nyb2xsVHlwZSgpID09IFNj
cm9sbFR5cGU6OlVzZXIpIDw8ICIpIik7Ci0KLSAgICBTY3JvbGxQb3NpdGlvbiBuZXdQb3NpdGlv
biA9IHBvc2l0aW9uOwotICAgIGlmICghYm94LT5pc0hUTUxNYXJxdWVlKCkpIHsKLSAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0aGV5IG5l
ZWQgdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4KLSAgICAgICAgaWYgKG1fc2Ny
b2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICAgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMo
KTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBpZiAoYWRqdXN0Rm9ySU9TQ2Fy
ZXRXaGVuU2Nyb2xsaW5nKCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBjbGVh
ciB3aGF0IHRoaXMgY29kZSBpcyB0cnlpbmcgdG8gZG8uIEJlaGF2aW9yIHNlZW1zIHJlYXNvbmFi
bGUgd2l0aCBpdCByZW1vdmVkLgotICAgICAgICAgICAgaW50IG1heE9mZnNldCA9IHNjcm9sbFdp
ZHRoKCkgLSByb3VuZFRvSW50KGJveC0+Y2xpZW50V2lkdGgoKSk7Ci0gICAgICAgICAgICBTY3Jv
bGxPZmZzZXQgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9uKG5ld1Bvc2l0aW9u
KTsKLSAgICAgICAgICAgIGludCBzY3JvbGxYT2Zmc2V0ID0gbmV3T2Zmc2V0LngoKTsKLSAgICAg
ICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0ID4gbWF4T2Zmc2V0IC0gY2FyZXRXaWR0aCkgewotICAg
ICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgKz0gY2FyZXRXaWR0aDsKLSAgICAgICAgICAgICAg
ICBpZiAoc2Nyb2xsWE9mZnNldCA8PSBjYXJldFdpZHRoKQotICAgICAgICAgICAgICAgICAgICBz
Y3JvbGxYT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsWE9mZnNldCA8
IG1fc2Nyb2xsUG9zaXRpb24ueCgpIC0gY2FyZXRXaWR0aCkKLSAgICAgICAgICAgICAgICBzY3Jv
bGxYT2Zmc2V0IC09IGNhcmV0V2lkdGg7Ci0KLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRYKHNj
cm9sbFhPZmZzZXQpOwotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZy
b21PZmZzZXQobmV3T2Zmc2V0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAg
IGlmIChtX3Njcm9sbFBvc2l0aW9uID09IG5ld1Bvc2l0aW9uICYmIGN1cnJlbnRTY3JvbGxCZWhh
dmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewot
ICAgICAgICAvLyBGSVhNRTogTm90aGluZyBndWFyYW50ZWVzIHdlIGdldCBhIHNjcm9sbFRvKCkg
d2l0aCBhbiB1bmNoYW5nZWQgcG9zaXRpb24gYXQgdGhlIGVuZCBvZiBhIHVzZXIgZ2VzdHVyZS4K
LSAgICAgICAgLy8gVGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yIHByb2JhYmx5IG5lZWRzIHRvIG1l
c3NhZ2UgdGhlIG1haW4gdGhyZWFkIHdoZW4gYSBnZXN0dXJlIGVuZHMuCi0gICAgICAgIGlmIChy
ZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSkgewotICAgICAgICAgICAgc2V0
TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7Ci0gICAgICAgICAgICB1cGRhdGVDb21w
b3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLQotICAgIFJlbmRl
clZpZXcmIHZpZXcgPSByZW5kZXJlcigpLnZpZXcoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgcG9z
aXRpb25zIG9mIG91ciBjaGlsZCBsYXllcnMgKGlmIG5lZWRlZCBhcyBvbmx5IGZpeGVkIGxheWVy
cyBzaG91bGQgYmUgaW1wYWN0ZWQgYnkgYSBzY3JvbGwpLgotICAgIC8vIFdlIGRvbid0IHVwZGF0
ZSBjb21wb3NpdGluZyBsYXllcnMsIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBhIGRlZXAgdXBkYXRl
IGZyb20gdGhlIGNvbXBvc2l0aW5nIGFuY2VzdG9yLgotICAgIGlmICghdmlldy5mcmFtZVZpZXco
KS5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSkgewotICAgICAgICAvLyBJ
ZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91dCwgd2UnbGwganVzdCB1cGRhdGUgbGF5ZXJz
IG9uY2UgbGF5b3V0IGhhcyBmaW5pc2hlZC4KLSAgICAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbnNB
ZnRlck92ZXJmbG93U2Nyb2xsKCk7Ci0KLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5zY2hlZHVs
ZVVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotCi0gICAgICAgIGlmICghbV91cGRhdGluZ01hcnF1
ZWVQb3NpdGlvbikgewotICAgICAgICAgICAgLy8gQXZvaWQgdXBkYXRpbmcgY29tcG9zaXRpbmcg
bGF5ZXJzIGlmLCBoaWdoZXIgb24gdGhlIHN0YWNrLCB3ZSdyZSBhbHJlYWR5IHVwZGF0aW5nIGxh
eWVyCi0gICAgICAgICAgICAvLyBwb3NpdGlvbnMuIFVwZGF0aW5nIGxheWVyIHBvc2l0aW9ucyBy
ZXF1aXJlcyBhIGZ1bGwgd2FsayBvZiB1cC10by1kYXRlIFJlbmRlckxheWVycywgYW5kCi0gICAg
ICAgICAgICAvLyBpbiB0aGlzIGNhc2Ugd2UncmUgc3RpbGwgdXBkYXRpbmcgdGhlaXIgcG9zaXRp
b25zOyB3ZSdsbCB1cGRhdGUgY29tcG9zaXRpbmcgbGF5ZXJzIGxhdGVyCi0gICAgICAgICAgICAv
LyB3aGVuIHRoYXQgY29tcGxldGVzLgotICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Ny
b2xsaW5nKCkpIHsKLSAgICAgICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlV
cGRhdGUoKTsKLQotICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZmZWN0
IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJlIGEg
c2libGluZyBpbiB6LW9yZGVyKSwKLSAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEgZGVz
Y2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICAgICAg
aWYgKGF1dG8qIHBhaW50UGFyZW50ID0gc3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHBhaW50UGFyZW50LT5zZXREZXNjZW5kYW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGll
cmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZUNv
bXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVw
ZGF0ZSByZWdpb25zLCBzY3JvbGxpbmcgbWF5IGNoYW5nZSB0aGUgY2xpcCBvZiBhIHBhcnRpY3Vs
YXIgcmVnaW9uLgotICAgICAgICByZW5kZXJlcigpLmRvY3VtZW50KCkuaW52YWxpZGF0ZVJlbmRl
cmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKLSAgICAgICAgRGVidWdQYWdlT3ZlcmxheXM6OmRpZExh
eW91dChyZW5kZXJlcigpLmZyYW1lKCkpOwotICAgIH0KLQotICAgIEZyYW1lJiBmcmFtZSA9IHJl
bmRlcmVyKCkuZnJhbWUoKTsKLSAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29u
dGFpbmVyID0gcmVuZGVyZXIoKS5jb250YWluZXJGb3JSZXBhaW50KCk7Ci0gICAgLy8gVGhlIGNh
cmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCi0gICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKLSAgICAKLSAgICBMYXlv
dXRSZWN0IHJlY3RGb3JSZXBhaW50ID0gcmVuZGVyZXIoKS5oYXNSZXBhaW50TGF5b3V0UmVjdHMo
KSA/IHJlbmRlcmVyKCkucmVwYWludExheW91dFJlY3RzKCkubV9yZXBhaW50UmVjdCA6IHJlbmRl
cmVyKCkuY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lcik7Ci0K
LSAgICBGbG9hdFF1YWQgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IEZsb2F0UXVhZChyZWN0
Rm9yUmVwYWludCk7Ci0gICAgaWYgKHJlcGFpbnRDb250YWluZXIpCi0gICAgICAgIHF1YWRGb3JG
YWtlTW91c2VNb3ZlRXZlbnQgPSByZXBhaW50Q29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRp
c3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50U29vbkluUXVhZChxdWFkRm9yRmFrZU1vdXNlTW92ZUV2
ZW50KTsKLQotICAgIGJvb2wgcmVxdWlyZXNSZXBhaW50ID0gdHJ1ZTsKLSAgICBpZiAodXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKLSAgICAgICAgc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFja2luZ0FuZEhp
ZXJhcmNoeVRyYXZlcnNhbCgpOwotICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBiYWNraW5nKCkt
Pm5lZWRzUmVwYWludE9uQ29tcG9zaXRlZFNjcm9sbCgpOwotICAgIH0KLQotICAgIC8vIEp1c3Qg
c2NoZWR1bGUgYSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAocmVxdWlyZXNS
ZXBhaW50KQotICAgICAgICByZW5kZXJlcigpLnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50
Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7Ci0KLSAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xs
IGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuYWRk
UGVuZGluZ1Njcm9sbEV2ZW50VGFyZ2V0KCplbGVtZW50KTsKLQotICAgIGlmIChzY3JvbGxzT3Zl
cmZsb3coKSkKLSAgICAgICAgdmlldy5mcmFtZVZpZXcoKS5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQo
KTsKLQotICAgIHZpZXcuZnJhbWVWaWV3KCkudmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKLSAg
ICBmcmFtZS5lZGl0b3IoKS5yZW5kZXJMYXllckRpZFNjcm9sbCgqdGhpcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBmcmFtZUVsZW1lbnRBbmRWaWV3UGVybWl0U2Nyb2xsKEhUTUxGcmFtZUVs
ZW1lbnRCYXNlKiBmcmFtZUVsZW1lbnRCYXNlLCBGcmFtZVZpZXcmIGZyYW1lVmlldykKLXsKLSAg
ICAvLyBJZiBzY3JvbGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNj
cm9sbGluZy4KLSAgICBpZiAoZnJhbWVFbGVtZW50QmFzZSAmJiBmcmFtZUVsZW1lbnRCYXNlLT5z
Y3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlIGZvcmJpZGRlbiwgdXNlciBpbml0aWF0ZWQg
c2Nyb2xscyBzaG91bGQgb2J2aW91c2x5IGJlIGlnbm9yZWQuCi0gICAgaWYgKGZyYW1lVmlldy53
YXNTY3JvbGxlZEJ5VXNlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3Ji
aWQgYXV0b3Njcm9sbHMgd2hlbiBzY3JvbGxiYXJzIGFyZSBvZmYsIGJ1dCBwZXJtaXRzIG90aGVy
IHByb2dyYW1tYXRpYyBzY3JvbGxzLAotICAgIC8vIGxpa2UgbmF2aWdhdGlvbiB0byBhbiBhbmNo
b3IuCi0gICAgcmV0dXJuICFmcmFtZVZpZXcuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Ny
b2xsSW5Qcm9ncmVzcygpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjphbGxvd3NDdXJyZW50U2Ny
b2xsKCkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4g
b3ZlcmZsb3cgbGF5ZXIgdGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xh
bXAgcHJvcGVydHkuCi0gICAgLy8gRklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2Vk
IHRvIGJlIHJlbGV2YW50IGZvciBTYWZhcmkgUlNTLgotICAgIGlmIChyZW5kZXJlcigpLnBhcmVu
dCgpICYmICFyZW5kZXJlcigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJv
eCgpOwotICAgIEFTU0VSVChib3gpOyAvLyBPbmx5IGJveGVzIGNhbiBoYXZlIG92ZXJmbG93Q2xp
cCBzZXQuCisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBBU1NFUlQoYm94
KTsgLy8gT25seSBib3hlcyBjYW4gaGF2ZSBvdmVyZmxvd0NsaXAgc2V0LgogCiAgICAgaWYgKHJl
bmRlcmVyKCkuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5hdXRvc2Nyb2xsSW5Qcm9ncmVzcygpKSB7
CiAgICAgICAgIC8vIFRoZSAicHJvZ3JhbW1hdGljYWxseSIgaGVyZSBpcyBtaXNsZWFkaW5nOyB0
aGlzIGFza3Mgd2hldGhlciB0aGUgYm94IGhhcyBzY3JvbGxhYmxlIG92ZXJmbG93LApAQCAtMjgw
OSw3ICsyNjc5LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZShjb25z
dCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKIAogICAgIExheW91dFJlY3Qg
bmV3UmVjdCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRl
cmVyKCkudmlldygpLmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9z
aW5nQ29udGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7
CisgICAgYXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihD
cm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pOwogCiAgICAgYXV0byBzY3JvbGxQb3NpdGlvbkNoYW5n
ZU9wdGlvbnNGb3JFbGVtZW50ID0gW3RoaXMsIG9wdGlvbnNdKEVsZW1lbnQqIGVsZW1lbnQpCiAg
ICAgewpAQCAtMjgyMCw2ICsyNjkwLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRv
VmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9
OwogCiAgICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3Jv
bGxhYmxlTGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8g
RG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0
ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3
aWxsIHByZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBp
biBTYWZhcmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAt
MjgzMCwyMyArMjcwMiwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxl
KGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBi
b3JkZXIgZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxl
IGFyZWEuCiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+
Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBs
YWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAg
IC8vIEZvciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwg
dGhlIHNjcm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAg
ICAgICAgICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28g
dGhlIHggb2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0
aW9uIHRvby4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQo
LXZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VS
ZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRz
KDBfbHUsIDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAg
ICAgICAgIGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xs
UGFkZGluZyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlv
dXRSZWN0IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhw
b3NlUmVjdCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAK
LSAgICAgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0
KS5sb2NhdGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9s
bE9mZnNldCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2
aW9yU3RhdHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9s
ZFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgc2Nyb2xsVG9PZmZz
ZXQoY2xhbXBlZFNjcm9sbE9mZnNldCwgc2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zRm9yRWxl
bWVudChib3gtPmVsZW1lbnQoKSkpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXRE
aWZmZXJlbmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAg
ICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAg
ICAgICAgICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChG
bG9hdFF1YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3Vu
ZGluZ0JveCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxh
YmxlTGF5ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9u
c0ZvckVsZW1lbnQoYm94LT5lbGVtZW50KCkpLCByZXZlYWxSZWN0LCBsb2NhbEV4cG9zZVJlY3Qp
KQorICAgICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAo
IXBhcmVudExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCkBAIC0yODYwLDcg
KzI3MjYsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExh
eW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgYXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50
IGZyb20gYmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRT
Y29wZTo6SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAg
ICAgIExheW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qg
dmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpM
ZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIGVs
ZW1lbnQgPSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3duZXJFbGVtZW50LT5j
b250ZW50RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgICAgICAg
ICAgICAgIFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVudC0+cmVuZGVyQm94
KCkgOiBudWxscHRyOwpAQCAtMjkzNiwyMyArMjgwMiw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGlu
c2lkCiAgICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGlu
c2lkZUZpeGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250
ZW50Q29tcG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFp
bmVyIGlzIGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQg
bWF5IG5lZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5n
IGxheWVycyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5n
QW5jZXN0b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigp
KSB7Ci0gICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAg
ICAgICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdV
cGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2Ug
dG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Ny
b2xsaW5nLgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRh
bnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAg
ICAgICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRh
dGVUeXBlOjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4
cG9zZShjb25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhw
b3NlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgs
IGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYg
ZnJhbWVWaWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBAIC0zMDk5LDcgKzI5
NDgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQtPnNldE1pbmltdW1T
aXplRm9yUmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91dFNpemUgYWRqdXN0
ZWRPbGRPZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwg
b2xkT2Zmc2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5kZXJlci0+c2hvdWxk
UGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgIG5ld09mZnNl
dC5zZXRXaWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1c3RlZE9sZE9mZnNl
dC5zZXRXaWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAgfQpAQCAtMzEyMiwx
MDgwICsyOTcxLDE2MCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIH0KIAogICAgIGlm
IChyZXNpemUgIT0gUmVzaXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsK
LSAgICAgICAgaWYgKGlzPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAg
ICAgICAgICAgLy8gTWFrZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0
IChzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAg
ICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgp
IC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAg
TGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5n
Qm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQo
KSk7Ci0gICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdo
dCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRU
eXBlOjpDU1NfUFgpOwotICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0g
ICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRo
ZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3Ig
aW4gdmlldy4KLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNj
cm9sbE9mZnNldCYgb2Zmc2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9m
ZnNldChvZmZzZXQpKTsKLX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShT
Y3JvbGxDb29yZGluYXRpb25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1ib29sIFJlbmRlckxheWVy
OjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
d2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+IGdlc3R1cmVTdGF0
ZSkKLXsKLSAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAodXNl
c0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsKLSAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgICAgICByZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCksIGdlc3R1cmVTdGF0
ZSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnRGb3JTY3JvbGxpbmcod2hlZWxFdmVudCwgZ2VzdHVyZVN0YXRlKTsKLX0KLQotSW50
UmVjdCBSZW5kZXJMYXllcjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRl
bnRSZWN0SW5jbHVkZXNTY3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRl
bnRSZWN0QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAg
ICBpZiAoc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IElu
Y2x1ZGVTY3JvbGxiYXJzKQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1
c2lvbigpOwotICAgIAotICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgp
OwotICAgIHJldHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNp
emUud2lkdGgoKSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxl
U2l6ZS5oZWlnaHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNp
emUgUmVuZGVyTGF5ZXI6Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVC
QkVSX0JBTkRJTkcpCi0gICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGlu
Z0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6
ZSgpOwotCi0gICAgSW50U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVt
U2Nyb2xsT2Zmc2V0KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAg
IFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Ny
b2xsUG9zaXRpb24oKSk7Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxD
b250ZW50c1NpemUoKTsKLSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0
cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJs
ZVNpemUuaGVpZ2h0KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9m
ZnNldC55KCkgLSAocmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwot
Ci0gICAgaWYgKHNjcm9sbE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRo
KHNjcm9sbE9mZnNldC54KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAm
JiBzY3JvbGxPZmZzZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRo
KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFi
bGVTaXplLndpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7
Ci0jZWxzZQotICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJM
YXllcjo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9s
bGVyKCkuaXNBY3RpdmUoKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVy
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9s
bENvcm5lcjsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNj
cm9sbENvcm5lclJlY3QoKS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0
IHJlY3QgPSBzY3JvbGxiYXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Ny
b2xsYmFyKSk7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29u
dmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQot
Ci1JbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxi
YXIoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3Qp
IGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3
KCkuY29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVu
dFJlY3QpOwotICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAg
IHJldHVybiByZWN0OwotfQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3Jv
bGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBz
Y3JvbGxiYXJQb2ludDsKLSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIp
KTsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21S
ZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9p
bnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25z
dCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAotewotICAgIEludFBvaW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCku
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBv
aW50KTsKLSAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAg
cmV0dXJuIHBvaW50OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNv
bnN0Ci17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkK
LSAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9J
bnQoYm94LT5jbGllbnRXaWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7
Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIEludFNpemUoc2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRT
aXplIFJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgSW50U2l6ZSBjb250ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlm
ICghaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1Np
emUuc2V0V2lkdGgoc3RkOjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCku
d2lkdGgoKSkpOwotCi0gICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQot
ICAgICAgICBjb250ZW50c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWln
aHQoKSwgdmlzaWJsZVNpemUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6
ZTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2
YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjph
dmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0g
QXZhaWxhYmxlU2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAg
aWYgKGlzPFJlbmRlckJsb2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJl
bmRlckJsb2NrPihyZW5kZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1
ZSk7Ci0gICAgICAgIHJlbmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgUmVuZGVyTGF5ZXI6OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNj
cm9sbEFuaW1hdGlvbnMoKTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJl
bmRlckxheWVyOjpkaWRTdGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVu
dCgpLmRpZFN0YXJ0T3ZlcmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlk
RW5kU2Nyb2xsKCkKLXsKLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZs
b3dTY3JvbGwoKTsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgp
Ci17Ci0gICAgLy8gU2VuZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2Ug
dGhpcyBpcyBob3cgd2Uga2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21l
KCkuY2xpZW50KCkuZGlkTGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgot
Ci1JbnRQb2ludCBSZW5kZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93
bk1vdXNlUG9zaXRpb25JblZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGlu
Z1doZWVsRXZlbnQoKSBjb25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZl
bnRIYW5kbGVyKCkuaXNIYW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92
ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBj
b25zdAotewotICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRv
JiByZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNj
cm9sbGJhcnMgc2l0IGluc2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29u
dHJvbHNQb3NpdGlvbmluZ1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0Jv
eFJlY3RJbmNsdWRpbmdTY3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxi
YXJIZWlnaHQgPSBtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAg
YXV0byBpc05vbk92ZXJsYXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
cikgewotICAgICAgICByZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNj
cm9sbGJhcigpOwotICAgIH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNj
cm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhciht
X3ZCYXIuZ2V0KCkpOwotICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9
IHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhh
dmVSZXNpemVyID0gcmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsK
LSAgICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250
YWxTY3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVS
ZXNpemVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92
ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Ny
b2xsYmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJT
aXplID0gSW50U2l6ZSB7Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVy
dGljYWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAg
ICAgICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dCA6IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVy
Zmxvd0NvbnRyb2xSZWN0cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1
dG8gYmFyUmVjdCA9IG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJh
clJlY3Quc2hpZnRZRWRnZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJh
clJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNp
emUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNj
cm9sbGJhciA9IGJhclJlY3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBh
dXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Qu
c2V0V2lkdGgodmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGJhclJlY3Quc2hpZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxi
YXJXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAg
ICAgIGJhclJlY3QuY29udHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAg
cmVzdWx0LnZlcnRpY2FsU2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNv
cm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZl
cnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRD
b3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJv
dHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bv
c2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9
OwotICAgIH07Ci0KLSAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1
bHQuc2Nyb2xsQ29ybmVyID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZl
UmVzaXplcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGF1dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRo
ZW1lKCkuc2Nyb2xsYmFyVGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9
IGNvcm5lclJlY3QoeyBzY3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVu
ZGVyTGF5ZXI6OnNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29u
c3QKLXsKLSAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBp
ZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUo
cmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX2hCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpv
bnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4geyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBpZiAoIXNob3dzT3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAg
ICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVy
LT5zZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJl
IG5vdCB5ZXQgaW5zZXJ0ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBh
aW50LgotICAgIGlmICghYm94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIg
PT0gbV92QmFyLmdldCgpKQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5sb2NhdGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92
ZUJ5KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRS
ZWN0IHJlcGFpbnRSZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldy
aXRpbmdNb2RlKHJlcGFpbnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUo
cmVwYWludFJlY3QpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29y
bmVyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0Nv
bnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlz
cGxheUluUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Nj
cm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVj
dCk7Ci0gICAgaWYgKG1fcmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFu
Z2xlKHJlY3QpOwotfQotCi1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9s
bGJhciogc2Nyb2xsYmFyKQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5p
c0hpZGRlbkJ5U3R5bGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5C
eVN0eWxlKGhvcml6b250YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZl
cnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9s
bGJhckhpZGRlbkJ5U3R5bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdCYgcmVuZGVyZXIpCi17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5l
bGVtZW50KCkpIHsKLSAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50
LT5jb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+
bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiAmcmVuZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcigpKSk7Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JT
Y3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9
IGlzPFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0
dWFsUmVuZGVyZXIpLnN0eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7
Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5k
ZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRv
d25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlz
LCBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBk
aWRBZGRTY3JvbGxiYXIod2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChw
YWdlKCkuaXNNb25pdG9yaW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1h
dG9yKCkuc2V0V2hlZWxFdmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0
b3IoKSk7Ci0gICAgfQotICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxk
KCp3aWRnZXQpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRp
b24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNj
cm9sbGJhcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9t
U2Nyb2xsYmFyKCkpCi0gICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgp
LCBvcmllbnRhdGlvbik7Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAg
ICBzY3JvbGxiYXIgPSBudWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3Zl
cmZsb3coKSBjb25zdAotewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVu
ZGVyZXIoKSkuc2Nyb2xsc092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Nj
cm9sbGJhciA9PSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChoYXNTY3JvbGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFy
KEhvcml6b250YWxTY3JvbGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVu
ZGVyZXIoKS5zZXR0aW5ncygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0Vu
YWJsZWQoKSA/IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9u
ZTsKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9s
bGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgICAgIFNjcm9sbGFibGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3Jv
bGxFbGFzdGljaXR5Tm9uZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9y
IGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUg
YW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxl
LgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAg
aWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17
Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNy
ZWF0ZVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZs
b3coKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVs
YXN0aWNpdHlOb25lOwotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KGVsYXN0aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVz
dHJveVNjcm9sbGJhcihWZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQotICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95
aW5nIG9yIGNyZWF0aW5nIG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRv
IGNvbWUgYW5kIGdvLiAgV2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidz
IHN0eWxlLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQot
U2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJp
ZXM6Ok5vKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAm
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6
aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRv
KiBuZXh0TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
IHsKLSAgICAgICAgaWYgKG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17
Ci0gICAgLy8gRklYTUU6IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAg
aWYgKCFpczxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxl
bWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBi
b3ggPSBlbmNsb3NpbmdFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZz
ZXRzRm9yU2Nyb2xsYWJsZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRk
aW5nQm94UmVjdCgpKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9n
cmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9
IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9y
LT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNl
bmRpZgotCi1ib29sIFJlbmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxl
dmVsOjpEZWJ1ZywgIlJlbmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5k
ZXJMYXllcjo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lk
dGgoKSwgJ3gnLCBzaXplKCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0Zp
bHRlcigpKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAg
aWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJh
Y2tkcm9wIGZpbHRlciJfcyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxl
bmRpbmcoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7
Ci0KLSAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBT
dHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0g
c3RyZWFtOwotICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJX
aWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ZCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAg
ICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdu
b3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhp
dFRlc3RpbmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndp
ZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChP
dmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2hCYXIKLSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8
IChtX2hCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3Zl
cmxheVNjcm9sbGJhclNpemUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgp
OwotfQotCi1JbnRTaXplIFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0
IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0g
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3Qu
bWluWE1heFlDb3JuZXIoKSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0
dXJuIGxvY2FsUG9pbnQgLSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhh
c092ZXJmbG93Q29udHJvbHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFy
IHx8IG1fc2Nyb2xsQ29ybmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNp
emU6Ok5vbmU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9s
cyhjb25zdCBJbnRTaXplJiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAh
bV92QmFyICYmICFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5k
ZXJCb3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNh
bFNjcm9sbGJhci5tb3ZlKG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFt
ZVJlY3QocmVjdHMudmVydGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9o
QmFyKSB7Ci0gICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9t
Um9vdCk7Ci0gICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3Jv
bGxiYXIpOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3Jv
bGxDb3JuZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1f
cmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7
Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VS
VChyZW5kZXJCb3goKSk7Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25z
KCk7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3Rl
YWQgd2l0aCBhYnNvbHV0ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndp
ZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQocmVuZGVyQm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkK
LSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOwotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUo
KSBpbnN0ZWFkIHdpdGggYWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xs
U2l6ZS5oZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3Ao
KSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5m
bGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0
LnkoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25z
dAotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFko
KTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsK
LSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0K
LUxheW91dFVuaXQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3Qo
Ym94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUo
b3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9p
ZCBSZW5kZXJMYXllcjo6Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJv
eCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERp
bWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5k
VG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNp
emUuc2V0SGVpZ2h0KHJvdW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkp
KTsKLQotICAgIGludCBzY3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxv
d0xlZnQoKSAtIGJveC0+Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93
IC09IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJm
bG93ID0gcm91bmRUb0ludChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAg
c2V0U2Nyb2xsT3JpZ2luKEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xs
YWJsZVRvcE92ZXJmbG93KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxh
YmxlT3ZlcmZsb3coKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0
ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA9IGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhv
cml6b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwot
fQotCi1ib29sIFJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94
KCktPnNjcm9sbHNPdmVyZmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92
ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBS
ZW5kZXJMYXllcjo6aGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
IW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4g
cm91bmRUb0ludChyZW5kZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6Omhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3Jv
bGxEaW1lbnNpb25zRGlydHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRU
b0ludChyZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHls
ZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gYXhpcykKLXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xs
YmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6
IHN0eWxlLm92ZXJmbG93WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8g
PSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQ
c2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3Zlcmxh
eVNjcm9sbGJhcnMoKTsKLSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAm
JiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVm
aW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIGF4aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNj
cm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dY
KCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VB
dXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5
bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092
ZXJsYXlTY3JvbGxiYXJzKCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRv
IHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVu
ZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5k
bGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8u
Ci0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFz
SG9yaXpvbnRhbE92ZXJmbG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhp
cy0+aGFzVmVydGljYWxPdmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMg
YSBzY3JvbGxiYXIsIHRoZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAg
IGlmIChtX2hCYXIgJiYgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCks
IEhvcml6b250YWxTY3JvbGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9y
aXpvbnRhbE92ZXJmbG93KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxi
YXIocmVuZGVyZXIoKS5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJh
ci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMg
d2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFy
cyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFy
Q2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAm
JiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0g
ICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNj
cm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBo
YXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNo
YW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94
LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAg
ICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAg
ICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0g
ICAgICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5y
ZXBhaW50KCk7Ci0KLSAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6QXV0byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3Zl
cmZsb3c6OkF1dG8pIHsKLSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsK
LSAgICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgcmVuZGVyZXIoKS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyQmxvY2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVy
KCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9y
aXpvbnRhbFNjcm9sbEJhckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwot
ICAgICAgICAgICAgICAgICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAg
ICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJl
bmRlcmVyKCkucGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhp
YmxlQm94KCkgJiYgcmVuZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyRmxleGlibGVCb3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVu
ZGVyQm94KCkpOwotICAgIH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0
ZXAvbGluZSBzdGVwKS4KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0
aCA9IHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVw
ID0gU2Nyb2xsYmFyOjpwYWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAg
IG1faEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkp
OwotICAgIH0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBy
b3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBT
Y3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3Rl
cHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1f
dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6
b250YWxPdmVyZmxvdygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQot
Ci0vLyBUaGlzIGlzIGNhbGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQ
b3NpdGlvbnMpLgotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0
KCkKLXsKLSAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0g
ICAgU2Nyb2xsT2Zmc2V0IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0K
LSAgICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xh
eWVyKCk7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1
cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMg
c3R5bGUgY2hhbmdlcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1OTY0Ci0gICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYg
KCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFp
c1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1
cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5l
ZWQKLSAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4
IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFt
cGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25n
LiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5n
IHJlbGF0ZWQgZW50cnkgcG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRv
IGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlz
IGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3
aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8x
NTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRX
aGVuU2Nyb2xsaW5nKHRydWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zm
c2V0ICE9IHNjcm9sbE9mZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBl
ZFNjcm9sbE9mZnNldCk7Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRB
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0g
ICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3Jv
bGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9z
aXRlZCgpKSB7Ci0gICAgICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwot
ICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOwotICAgIH0K
LQotICAgIGlmIChjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRz
UG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVTY3JvbGxTbmFwU3Rh
dGUoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJl
Y3QoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xs
YmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhs
b2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgeworICAgICAgICAgICAgLy8gTWFrZSBpbXBsaWNp
dCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQt
PnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5t
YXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAg
ICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdp
bkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5
cGU6OkNTU19QWCk7CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0g
cmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVy
LT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQg
PSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0
ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAot
ICAgIGlmIChyZWN0cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Ny
b2xsIHRoZSB3aW5kb3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBj
dXJzb3IgaW4gdmlldy4KIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3QKK0ludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKIHsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMg
YXJlIG1hZGUgaW4gdGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVk
U2Nyb2xsaW5nKCk7Ci0jZW5kaWYKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwor
ICAgIGlmICghYm94KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCBy
b3VuZFRvSW50KGJveC0+Y2xpZW50SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50
aW5nT3ZlcmxheUNvbnRyb2xzKQorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIC8vIERvbid0
IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigp
Lmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKIAotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3Jv
bGxiYXJzIHNpdCBpbnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRy
b2xzUG9zaXRpb25pbmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hS
ZWN0SW5jbHVkaW5nU2Nyb2xsYmFyKCkpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBh
aW50IGluIGEgc2Vjb25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkg
d2lsbCBwYWludAotICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMg
dGhlIG5vcm1hbCBwYWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8v
IHdpbGwgYmUgZmFsc2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRo
YXQgdGhlcmUgYXJlIG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBw
YWludGVkLiBUaGF0IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVy
IHRyZWUgdG8gcnVuLAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVu
LiBJbiB0aGUgbWVhbnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBz
ZWNvbmQgcGFzcyBkb2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0
IGl0IHJpZ2h0LgotICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092
ZXJsYXlDb250cm9scykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQg
PSBwYWludE9mZnNldDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhl
IHNlY29uZCBwYXNzIGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAg
ICBpZiAoKG1faEJhciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJh
ciAmJiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBJbnRSZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9j
YWxEYW1nZVJlY3QubW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dD
b250cm9sc0ludGVyc2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5z
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZl
UmVzaXplciA9IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAK
LSAgICAgICAgUmVuZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5n
TGF5ZXIoKTsKLSAgICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGlu
Z1Jvb3QgPSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpOworICAgIE92ZXJmbG93Q29udHJvbFJl
Y3RzIHJlc3VsdDsKKyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXpl
KSB7CisgICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAg
ICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsg
Ym90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5o
ZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRS
ZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0g
Y29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICAgICAgcGFpbnRpbmdSb290
LT5zZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25l
c3MgPSBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAg
ICAgcmVzdWx0LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3Jv
bGxiYXJUaGlja25lc3MgfSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJl
ZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYg
KHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRP
ZmZzZXQ7Ci0gICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworICAgIHJldHVy
biByZXN1bHQ7Cit9CiAKLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNl
c3NhcnkuICBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0
LCBidXQgc29tZXRpbWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBv
Y2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0g
ICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25P
dmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CitTdHJpbmcg
UmVuZGVyTGF5ZXI6OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgp
LndpZHRoKCksICd4Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIE5vdyB0aGF0IHdlJ3Jl
IHN1cmUgdGhlIHNjcm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4K
LSAgICBpZiAobV9oQmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAg
ICAgbV9oQmFyLT5wYWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYm
ICFsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29u
dGV4dCwgZGFtYWdlUmVjdCk7CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwogCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29y
bmVyKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3Jv
bGwgY29ybmVyIHdpdGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3Qg
cnVuIGFsbCB0aGUgd2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBw
YWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0
KTsKLSAgICAKLSAgICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9u
IHRvcCBvZiB0aGUgc2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRq
dXN0ZWRQYWludE9mZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKGhhc0JhY2tkcm9wRmls
dGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7
CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KQotewotICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAg
ICBhYnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2Vj
dHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgaWYg
KGNvbnRleHQuaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsQ29ybmVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXNvbGF0
ZXNCbGVuZGluZygpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5n
Il9zKTsKIAotICAgIGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5l
ci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJl
dHRlciBTdHJpbmdCdWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRT
dHJlYW0gc3RyZWFtOworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJh
cnMsIHNpbmNlIHdlIG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAg
aWYgKCFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhl
bWUoKS5wYWludFNjcm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNp
emVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNp
emVyQ29ybmVyUmVjdCkKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3Ju
ZXIoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdl
PiByZXNpemVDb3JuZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0g
ICAgaWYgKHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VI
aVJlcygmSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAy
eCIpLmxlYWtSZWYoKSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVy
SW1hZ2VIaVJlczsKLSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFn
ZS0+c2l6ZSgpOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3Ju
ZXJJbWFnZUxvUmVzKCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXpl
Q29ybmVyIikubGVha1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVD
b3JuZXJJbWFnZUxvUmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5l
ckltYWdlLT5zaXplKCk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rp
b25TY3JvbGxiYXJPbkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNp
emUud2lkdGgoKSwgcmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVp
Z2h0KCkgLSBjb3JuZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2Up
Ci0gICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQu
cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXpl
Q29ybmVySW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0g
c25hcFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhN
YXhZQ29ybmVyKCkgLSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5k
ZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3
SW1hZ2UoKnJlc2l6ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcmVzaXplclJl
Y3QgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29y
bmVyID0gcmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0
KCkgPyByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlD
b3JuZXIoKTsKKyAgICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0
KQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuc3R5bGUoKS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91
dFJlY3QgcmVzaXplckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0
Lm1vdmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3Rz
KGRhbWFnZVJlY3QpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlk
YXRpbmdDb250cm9sVGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAg
IG1fcmVzaXplci0+cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFi
c1JlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXpl
ckltYWdlKGNvbnRleHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFdpZHRoKCk7CiAKLSAg
ICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0
aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4
Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAo
IWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAg
Y29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJD
b3JuZXIgPSByZXNpemVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5
b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQo
KSArIDFfbHUpKTsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90
PiB7IDIxNywgMjE3LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KDEuMGYpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7Ci0gICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29y
bmVyKSk7Ci0gICAgfQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgcmV0dXJuIHJvdW5kVG9JbnQob3ZlcmZsb3dSZWN0Lm1heFgoKSAtIG92
ZXJmbG93UmVjdC54KCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyOjppc1BvaW50SW5SZXNpemVD
b250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9s
bEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFjYW5SZXNpemUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+c2Nyb2xsSGVpZ2h0KCk7CiAKLSAgICByZXR1cm4gb3ZlcmZsb3dDb250cm9s
c1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOworICAgIHJldHVybiByb3VuZFRvSW50
KG92ZXJmbG93UmVjdC5tYXhZKCkgLSBvdmVyZmxvd1JlY3QueSgpKTsKIH0KIAotYm9vbCBSZW5k
ZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9s
bEluZm9BZnRlckxheW91dCgpCiB7Ci0gICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAhY2Fu
UmVzaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gcmVjdHMgPSBvdmVy
Zmxvd0NvbnRyb2xzUmVjdHMoKTsKKyAgICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0
ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOworfQogCi0gICAgSW50UmVjdCByZXNpemVDb250cm9s
UmVjdDsKLSAgICBpZiAocmVuZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9u
ZSkgewotICAgICAgICBpZiAocmVjdHMucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KK2Jvb2wgUmVuZGVyTGF5ZXI6OmNhblVzZUNv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQor
ICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y2FuVXNlQ29tcG9zaXRlZFNjcm9sbGlu
ZygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGl0
IHRlc3QgdGhlIG1fc2Nyb2xsQ29ybmVyIGFuZCBwYXNzIGl0IGJhY2sgdGhyb3VnaCB0aGUgcmVz
dWx0LgotICAgIGlmIChtX3ZCYXIgJiYgbV92QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVz
dGluZygpKSB7Ci0gICAgICAgIGlmIChyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5jb250YWlucyhs
b2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJl
bmRlckxheWVyOjpoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEt
Pmhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CiAKLSAgICBpZiAobV9oQmFyICYmIG1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkgewotICAgICAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5jb250YWlucyhs
b2NhbFBvaW50KSkgewotICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX2hCYXIuZ2V0
KCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Citib29sIFJl
bmRlckxheWVyOjpoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Ny
b2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVybGF5
U2Nyb2xsYmFycygpOworICAgIHJldHVybiBmYWxzZTsKK30KIAorYm9vbCBSZW5kZXJMYXllcjo6
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dXNlc0NvbXBvc2l0ZWRTY3Jv
bGxpbmcoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9s
bChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNv
bnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICByZXR1cm4gU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBp
ZiAoIWNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3Zl
cmZsb3dDb250cm9sc1JlY3RzKCkucmVzaXplci5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBM
YXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBjb25zdCBMYXlvdXRTaXplJiBzdWJwaXhlbE9mZnNldCwg
T3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCwgT3B0aW9uU2V0PFBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzLCBTZWN1
cml0eU9yaWdpblBhaW50UG9saWN5IHBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqIGV2
ZW50UmVnaW9uQ29udGV4dCkKQEAgLTQyMTMsMTcgKzMxNDIsNiBAQCB2b2lkIFJlbmRlckxheWVy
OjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFn
ZVJlY3QsCiAgICAgICAgIHdpZGdldC0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQoZmFsc2UpOwogfQog
Ci12b2lkIFJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+IHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkK
LXsKLSAgICBpZiAoIW1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBMYXllclBhaW50aW5nSW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9z
aW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlvciwgTGF5b3V0U2l6ZSgpLCBzdWJ0
cmVlUGFpbnRSb290KTsKLSAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgUGFp
bnRMYXllckZsYWc6OlBhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMpOwotCi0gICAgbV9jb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6
Y2xpcFRvUmVjdChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJ
bmZvJiBwYWludGluZ0luZm8sIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBjb25zdCBDbGlwUmVjdCYgY2xpcFJlY3QsIEJvcmRlclJhZGl1c0NsaXBwaW5nUnVsZSBydWxl
KQogewogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcmVuZGVyZXIoKS5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCk7CkBAIC00NzQ5LDggKzM2NjcsMTAgQEAgdm9pZCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
TGF5ZXJQYWludGkKICAgICAgICAgICAgIHBhaW50TGlzdChwb3NpdGl2ZVpPcmRlckxheWVycygp
LCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2FsUGFpbnRGbGFncyk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIGhh
c1Njcm9sbGJhcnMoKSkKLSAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdt
ZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsK
KyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgICAgIGlmIChpc1BhaW50
aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzU2Nyb2xsYmFycygp
KQorICAgICAgICAgICAgICAgIHBhaW50T3ZlcmZsb3dDb250cm9sc0ZvckZyYWdtZW50cyhsYXll
ckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGlmIChmaWx0ZXJDb250ZXh0KSB7CiAgICAgICAgICAgICAvLyBXaGVuIHdl
IGNhbGxlZCBjb2xsZWN0RnJhZ21lbnRzKCkgbGFzdCB0aW1lLCBwYWludERpcnR5UmVjdCB3YXMg
cmVzZXQgdG8gcmVwcmVzZW50IHRoZSBmaWx0ZXIgYm91bmRzLgpAQCAtNTIyMCwxMSArNDE0MCwx
MyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludENoaWxkQ2xpcHBpbmdNYXNrRm9yRnJhZ21lbnRz
KGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllcgogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludE92
ZXJmbG93Q29udHJvbHNGb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJh
Z21lbnRzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZv
JiBsb2NhbFBhaW50aW5nSW5mbykKIHsKKyAgICBBU1NFUlQobV9zY3JvbGxhYmxlQXJlYSk7CisK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogbGF5ZXJGcmFnbWVudHMpIHsKICAgICAg
ICAgaWYgKGZyYWdtZW50LmJhY2tncm91bmRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBjbGlwVG9SZWN0KGNvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCB7
IH0sIGZyYWdtZW50LmJhY2tncm91bmRSZWN0KTsKLSAgICAgICAgcGFpbnRPdmVyZmxvd0NvbnRy
b2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdtZW50LmxheWVy
Qm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQYWludGluZ0lu
Zm8uc3VicGl4ZWxPZmZzZXQpKSwKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVy
Zmxvd0NvbnRyb2xzKGNvbnRleHQsIHJvdW5kZWRJbnRQb2ludCh0b0xheW91dFBvaW50KGZyYWdt
ZW50LmxheWVyQm91bmRzLmxvY2F0aW9uKCkgLSByZW5kZXJCb3hMb2NhdGlvbigpICsgbG9jYWxQ
YWludGluZ0luZm8uc3VicGl4ZWxPZmZzZXQpKSwKICAgICAgICAgICAgIHNuYXBwZWRJbnRSZWN0
KGZyYWdtZW50LmJhY2tncm91bmRSZWN0LnJlY3QoKSksIHRydWUpOwogICAgICAgICByZXN0b3Jl
Q2xpcChjb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qp
OwogICAgIH0KQEAgLTUyNjMsNyArNDE4NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3Qo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYKICAg
ICAgICAgICAgICAgICBhYnNvbHV0ZUxheW91dFZpZXdwb3J0UmVjdC5zY2FsZShzY2FsZUZhY3Rv
cik7CiAgICAgICAgICAgICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QoYWJzb2x1dGVMYXlvdXRWaWV3
cG9ydFJlY3QpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhpdFRlc3RBcmVhLmludGVy
c2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52aXNpYmxlQ29udGVudFJlY3QoTGVn
YWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOworICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50
ZXJzZWN0KHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLnZpc2libGVDb250ZW50UmVjdChT
Y3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwogICAgIH0KIAog
ICAgIFJlbmRlckxheWVyKiBpbnNpZGVMYXllciA9IGhpdFRlc3RMYXllcih0aGlzLCBudWxscHRy
LCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RBcmVhLCBoaXRUZXN0TG9jYXRpb24sIGZhbHNlKTsK
QEAgLTU0OTQsNyArNDQxNiw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6aGl0VGVzdExh
eWVyKFJlbmRlckxheWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250CiAgICAgICAgIG9m
ZnNldEZyb21BbmNlc3Rvcihyb290TGF5ZXIpKTsKIAogICAgIExheW91dFBvaW50IGxvY2FsUG9p
bnQ7Ci0gICAgaWYgKGNhblJlc2l6ZSgpICYmIGhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMobGF5
ZXJGcmFnbWVudHMsIGhpdFRlc3RMb2NhdGlvbiwgbG9jYWxQb2ludCkpIHsKKyAgICBpZiAoY2Fu
UmVzaXplKCkgJiYgbV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oaXRUZXN0
UmVzaXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2Fs
UG9pbnQpKSB7CiAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQs
IGxvY2FsUG9pbnQpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC01NTY5LDM1ICs0
NDkxLDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNv
bnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJG
cmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkgY29uc3QKLXsKLSAgICBpZiAo
bGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBh
dXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJl
bmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKSk7Ci0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpOwotCi0gICAgYXV0byBjb3JuZXJSZWN0SW5GcmFnbWVudCA9IFsmXShjb25z
dCBJbnRSZWN0JiBmcmFnbWVudEJvdW5kcywgY29uc3QgSW50UmVjdCYgcmVzaXplclJlY3QpIHsK
LSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkg
ewotICAgICAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tTGVmdCA9IGJvcmRlckJveFJl
Y3QubWluWE1heFlDb3JuZXIoKSAtIHJlc2l6ZXJSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1pblhNYXhZQ29ybmVyKCkg
LSBvZmZzZXRGcm9tQm90dG9tTGVmdCAtIEludFNpemUgeyAwLCByZXNpemVyUmVjdC5oZWlnaHQo
KSB9LCByZXNpemVyUmVjdC5zaXplKCkgfTsKLSAgICAgICAgfQotICAgICAgICBJbnRTaXplIG9m
ZnNldEZyb21Cb3R0b21SaWdodCA9IGJvcmRlckJveFJlY3QubWF4WE1heFlDb3JuZXIoKSAtIHJl
c2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgICAgIHJldHVybiBJbnRSZWN0IHsgZnJh
Z21lbnRCb3VuZHMubWF4WE1heFlDb3JuZXIoKSAtIG9mZnNldEZyb21Cb3R0b21SaWdodCAtIHJl
c2l6ZXJSZWN0LnNpemUoKSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgfTsKLQotICAgIGZv
ciAoaW50IGkgPSBsYXllckZyYWdtZW50cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAg
ICAgICBjb25zdCBMYXllckZyYWdtZW50JiBmcmFnbWVudCA9IGxheWVyRnJhZ21lbnRzLmF0KGkp
OwotICAgICAgICBhdXRvIHJlc2l6ZXJSZWN0SW5GcmFnbWVudCA9IGNvcm5lclJlY3RJbkZyYWdt
ZW50KHNuYXBwZWRJbnRSZWN0KGZyYWdtZW50LmxheWVyQm91bmRzKSwgcmVjdHMucmVzaXplcik7
Ci0gICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pbnRlcnNlY3RzKGhpdFRlc3RM
b2NhdGlvbikgJiYgcmVzaXplclJlY3RJbkZyYWdtZW50LmNvbnRhaW5zKGhpdFRlc3RMb2NhdGlv
bi5yb3VuZGVkUG9pbnQoKSkpIHsKLSAgICAgICAgICAgIHBvaW50SW5GcmFnbWVudCA9IHRvTGF5
b3V0UG9pbnQoaGl0VGVzdExvY2F0aW9uLnBvaW50KCkgLSBmcmFnbWVudC5sYXllckJvdW5kcy5s
b2NhdGlvbigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRl
c3RUcmFuc2Zvcm1lZExheWVySW5GcmFnbWVudHMoUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUmVu
ZGVyTGF5ZXIqIGNvbnRhaW5lckxheWVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgY29uc3QgSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlKiB0cmFuc2Zvcm1TdGF0ZSwgZG91YmxlKiB6T2Zmc2V0KQogewpAQCAt
NjA1OSw3ICs0OTUyLDggQEAgdm9pZCBSZW5kZXJMYXllcjo6cmVwYWludEJsb2NrU2VsZWN0aW9u
R2FwcygpCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFJlY3QgcmVjdCA9IG1fYmxvY2tT
ZWxlY3Rpb25HYXBzQm91bmRzOwotICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmVjdC5tb3ZlQnkoLW1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbFBvc2l0aW9uKCkpOwogICAgIGlmIChyZW5kZXJlcigpLmhhc092ZXJm
bG93Q2xpcCgpICYmICF1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKQogICAgICAgICByZWN0Lmlu
dGVyc2VjdChkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpLm92ZXJmbG93Q2xpcFJlY3Qo
TGF5b3V0UG9pbnQoKSwgbnVsbHB0cikpOyAvLyBGSVhNRTogUmVnaW9ucyBub3QgYWNjb3VudGVk
IGZvci4KICAgICBpZiAocmVuZGVyZXIoKS5oYXNDbGlwKCkpCkBAIC02MzU3LDIxICs1MjUxLDYg
QEAgYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZE1hc2soKSBjb25zdAogICAgIHJldHVy
biBtX2JhY2tpbmcgJiYgbV9iYWNraW5nLT5oYXNNYXNrTGF5ZXIoKTsKIH0KIAotR3JhcGhpY3NM
YXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+bGF5ZXJGb3JIb3Jpem9udGFsU2Ny
b2xsYmFyKCkgOiBudWxscHRyOwotfQotCi1HcmFwaGljc0xheWVyKiBSZW5kZXJMYXllcjo6bGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/
IG1fYmFja2luZy0+bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQot
R3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yU2Nyb2xsQ29ybmVyKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9iYWNraW5nID8gbV9iYWNraW5nLT5sYXllckZvclNjcm9sbENvcm5l
cigpIDogbnVsbHB0cjsKLX0KLQogYm9vbCBSZW5kZXJMYXllcjo6cGFpbnRzV2l0aFRyYW5zZm9y
bShPcHRpb25TZXQ8UGFpbnRCZWhhdmlvcj4gcGFpbnRCZWhhdmlvcikgY29uc3QKIHsKICAgICBi
b29sIHBhaW50c1RvV2luZG93ID0gIWlzQ29tcG9zaXRlZCgpIHx8IGJhY2tpbmcoKS0+cGFpbnRz
SW50b1dpbmRvdygpOwpAQCAtNjQwMiwxMSArNTI4MSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNo
b3VsZEFwcGx5Q2xpcFBhdGgoT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZpb3Is
IE9wCiAgICAgcmV0dXJuIHBhaW50RmxhZ3MuY29udGFpbnMoUGFpbnRMYXllckZsYWc6OlBhaW50
aW5nQ29tcG9zaXRpbmdDbGlwUGF0aFBoYXNlKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2Ny
b2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbHNP
dmVyZmxvdygpIHx8IHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXI6OmJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXlvdXRSZWN0
JiBsb2NhbFJlY3QpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1NlbGZQYWludGluZ0xheWVyKCkgJiYg
IWhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudCgpKQpAQCAtNjY0Nyw3ICs1NTIxLDcgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6aGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkgY29uc3QKICAgICBp
ZiAoIWhhc1Zpc2libGVDb250ZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCBoYXNPdmVyZmxv
d0NvbnRyb2xzKCk7CisgICAgcmV0dXJuIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9uc09yQmFja2dy
b3VuZCgpIHx8IChtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJm
bG93Q29udHJvbHMoKSk7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzVmlzdWFsbHlOb25FbXB0
eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CkBAIC02NjU3LDcgKzU1MzEs
NyBAQCBib29sIFJlbmRlckxheWVyOjppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRS
ZXF1ZXN0KiByZXF1ZXN0KSBjb25zdAogICAgIGlmICghaGFzVmlzaWJsZUNvbnRlbnQoKSB8fCAh
cmVuZGVyZXIoKS5zdHlsZSgpLm9wYWNpdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJSZXBsYWNlZCgpIHx8IGhhc092ZXJmbG93Q29udHJv
bHMoKSkgeworICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8fCAobV9zY3Jv
bGxhYmxlQXJlYSAmJiBtX3Njcm9sbGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpKSB7
CiAgICAgICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCkBAIC02
NjgyLDM4ICs1NTU2LDYgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVtcHR5KFBh
aW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICByZXR1cm4gaGFzTm9uRW1w
dHlDaGlsZFJlbmRlcmVycygqcmVxdWVzdCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0
ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkK
LXsKLSAgICAvLyBPdmVyZmxvdyBhcmUgYSBib3ggY29uY2VwdC4KLSAgICBSZW5kZXJCb3gqIGJv
eCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkg
PT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIE92ZXJmbG93IG92ZXJmbG93
WCA9IGJveC0+c3R5bGUoKS5vdmVyZmxvd1goKTsKLSAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBi
b3gtPnN0eWxlKCkub3ZlcmZsb3dZKCk7Ci0KLSAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5
b3V0IGluIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1
dG9tYXRpYyBzY3JvbGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgotICAgIGJvb2wgbmVl
ZHNIb3Jpem9udGFsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhhc0hv
cml6b250YWxTY3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94
LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJh
cihib3gtPnN0eWxlKCksIEhvcml6b250YWxTY3JvbGxiYXIpKTsKLSAgICBib29sIG5lZWRzVmVy
dGljYWxTY3JvbGxiYXIgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgoaGFzVmVydGljYWxT
Y3JvbGxiYXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgp
LCBWZXJ0aWNhbFNjcm9sbGJhcikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHls
ZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpOwotICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIo
bmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihu
ZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZs
b3c6c2Nyb2xsLCBzY3JvbGxiYXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2Fi
bGVkLgotICAgIC8vIFdoZW4gc3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8g
cmUtZW5hYmxlIHRoZW0gKHNlZSBidWcgMTE5ODUpLgotICAgIGlmIChtX2hCYXIgJiYgbmVlZHNI
b3Jpem9udGFsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9
PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQotICAg
ICAgICBtX2hCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBpZiAobV92QmFyICYmIG5lZWRz
VmVydGljYWxTY3JvbGxiYXIgJiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09
IE92ZXJmbG93OjpTY3JvbGwgJiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCi0gICAg
ICAgIG1fdkJhci0+c2V0RW5hYmxlZCh0cnVlKTsKLQotICAgIGlmICghbV9zY3JvbGxEaW1lbnNp
b25zRGlydHkpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVI
b3Jpem9udGFsT3ZlcmZsb3coKSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsK
LX0KLQogdm9pZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CiAgICAgc2V0SXNOb3JtYWxGbG93T25s
eShzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkpOwpAQCAtNjczNCw2ICs1NTc2LDggQEAgdm9pZCBS
ZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUKICNlbmRpZgogICAgIH0KIAorICAgIHVwZGF0ZUxheWVyU2Nyb2xs
YWJsZUFyZWEoKTsKKwogICAgIC8vIEZJWE1FOiBSZW5kZXJMYXllciBhbHJlYWR5IGhhbmRsZXMg
dmlzaWJpbGl0eSBjaGFuZ2VzIHRocm91Z2ggb3VyIHZpc2liaWxpdHkgZGlydHkgYml0cy4gVGhp
cyBsb2dpYyBjb3VsZAogICAgIC8vIGxpa2VseSBiZSBmb2xkZWQgYWxvbmcgd2l0aCB0aGUgcmVz
dC4KICAgICBpZiAob2xkU3R5bGUpIHsKQEAgLTY3NDUsMTggKzU1ODksMTQgQEAgdm9pZCBSZW5k
ZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFZpc2liaWxpdHkgaXMgaW5w
dXQgdG8gY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpLgotICAgICAgICBpZiAodmlzaWJpbGl0
eUNoYW5nZWQpCi0gICAgICAgICAgICBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpOworICAgICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZWQgJiYgbV9zY3JvbGxhYmxlQXJl
YSkKKyAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbXB1dGVIYXNDb21wb3NpdGVkU2Ny
b2xsYWJsZU92ZXJmbG93KCk7CiAgICAgfQogCi0gICAgaWYgKHJlbmRlcmVyKCkuaXNIVE1MTWFy
cXVlZSgpICYmIHJlbmRlcmVyKCkuc3R5bGUoKS5tYXJxdWVlQmVoYXZpb3IoKSAhPSBNYXJxdWVl
QmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIoKS5pc0JveCgpKSB7Ci0gICAgICAgIGlmICghbV9t
YXJxdWVlKQotICAgICAgICAgICAgbV9tYXJxdWVlID0gbWFrZVVuaXF1ZTxSZW5kZXJNYXJxdWVl
Pih0aGlzKTsKLSAgICAgICAgbV9tYXJxdWVlLT51cGRhdGVNYXJxdWVlU3R5bGUoKTsKLSAgICB9
IGVsc2UgaWYgKG1fbWFycXVlZSkKLSAgICAgICAgbV9tYXJxdWVlID0gbnVsbHB0cjsKLQotICAg
IHVwZGF0ZVNjcm9sbGJhcnNBZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkgeworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jcmVhdGVPckRlc3Ry
b3lNYXJxdWVlKCk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZVNjcm9sbGJhcnNB
ZnRlclN0eWxlQ2hhbmdlKG9sZFN0eWxlKTsKKyAgICB9CiAgICAgLy8gT3ZlcmxheSBzY3JvbGxi
YXJzIGNhbiBtYWtlIHRoaXMgbGF5ZXIgc2VsZi1wYWludGluZyBzbyB3ZSBuZWVkCiAgICAgLy8g
dG8gcmVjb21wdXRlIHRoZSBiaXQgb25jZSBzY3JvbGxiYXJzIGhhdmUgYmVlbiB1cGRhdGVkLgog
ICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7CkBAIC02NzcxLDEzICs1NjExLDggQEAgdm9p
ZCBSZW5kZXJMYXllcjo6c3R5bGVDaGFuZ2VkKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUKICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
ZGV0ZWN0IGEgc3dhcCBmcm9tIGN1c3RvbSB0byBuYXRpdmUgc2Nyb2xsYmFycyAoYW5kIHZpY2Ug
dmVyc2EpLgotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7
Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLSAgICAK
LSAgICB1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpOwotICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgp
OworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51
cGRhdGVBbGxTY3JvbGxiYXJSZWxhdGVkU3R5bGUoKTsKIAogICAgIHVwZGF0ZURlc2NlbmRhbnRE
ZXBlbmRlbnRGbGFncygpOwogICAgIHVwZGF0ZVRyYW5zZm9ybSgpOwpAQCAtNjc5OCw5OCArNTYz
Myw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKIH0KIAotdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdykKLXsKLSAgICBG
cmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0g
ICAgYm9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlcigpLnZpc2libGVUb0hpdFRlc3Rp
bmcoKTsKLSAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IGZyYW1lVmlldy5m
cmFtZSgpLm93bmVyRWxlbWVudCgpKQotICAgICAgICBpc1Zpc2libGVUb0hpdFRlc3QgJj0gb3du
ZXItPnJlbmRlcmVyKCkgJiYgb3duZXItPnJlbmRlcmVyKCktPnZpc2libGVUb0hpdFRlc3Rpbmco
KTsKLQotICAgIGJvb2wgaXNTY3JvbGxhYmxlID0gaGFzT3ZlcmZsb3cgJiYgaXNWaXNpYmxlVG9I
aXRUZXN0OwotICAgIGJvb2wgYWRkZWRPclJlbW92ZWQgPSBmYWxzZTsKLSAgICAKLSAgICBBU1NF
UlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xs
YWJsZUFyZWEodGhpcykpOwotICAgIAotICAgIGlmIChpc1Njcm9sbGFibGUpIHsKLSAgICAgICAg
aWYgKCFtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYWRkZWRPclJl
bW92ZWQgPSBmcmFtZVZpZXcuYWRkU2Nyb2xsYWJsZUFyZWEodGhpcyk7Ci0gICAgICAgICAgICBt
X3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKSB7Ci0gICAgICAgIGFkZGVkT3JSZW1vdmVk
ID0gZnJhbWVWaWV3LnJlbW92ZVNjcm9sbGFibGVBcmVhKHRoaXMpOwotICAgICAgICBtX3JlZ2lz
dGVyZWRTY3JvbGxhYmxlQXJlYSA9IGZhbHNlOwotICAgIH0KLQotI2lmIEVOQUJMRShJT1NfVE9V
Q0hfRVZFTlRTKQotICAgIGlmIChhZGRlZE9yUmVtb3ZlZCkgewotICAgICAgICBpZiAoaXNTY3Jv
bGxhYmxlICYmICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICByZWdp
c3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRoZSB0b3VjaCBsaXN0ZW5lciBmb3IgdW5hY2Nl
bGVyYXRlZCBvdmVyZmxvdyBzY3JvbGxpbmcsIHNvIGlmIHdlIGJlY2FtZQotICAgICAgICAgICAg
Ly8gYWNjZWxlcmF0ZWQsIHJlbW92ZSBvdXJzZWx2ZXMgYXMgYSB0b3VjaCBldmVudCBsaXN0ZW5l
ci4KLSAgICAgICAgICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGlu
ZygpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfVkFSSUFCTEUoYWRkZWRP
clJlbW92ZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbENv
cm5lclN0eWxlKCkKLXsKLSAgICBSZW5kZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRl
cmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKCkpOwotICAgIGF1dG8gY29ybmVyID0gcmVuZGVyZXIo
KS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0
eWxlKHsgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxl
KCkpIDogbnVsbHB0cjsKLQotICAgIGlmICghY29ybmVyKSB7Ci0gICAgICAgIGNsZWFyU2Nyb2xs
Q29ybmVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc2Nyb2xsQ29y
bmVyKSB7Ci0gICAgICAgIG1fc2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Ny
b2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpjb3JuZXIpKTsKLSAg
ICAgICAgLy8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVu
dCEKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldFBhcmVudCgmcmVuZGVyZXIoKSk7Ci0gICAg
ICAgIG1fc2Nyb2xsQ29ybmVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbV9zY3JvbGxDb3JuZXItPnNldFN0eWxlKFdURk1vdmUoKmNvcm5lcikpOwotfQotCi12b2lk
IFJlbmRlckxheWVyOjpjbGVhclNjcm9sbENvcm5lcigpCi17Ci0gICAgaWYgKCFtX3Njcm9sbENv
cm5lcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQobnVs
bHB0cik7Ci0gICAgbV9zY3JvbGxDb3JuZXIgPSBudWxscHRyOwotfQotCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVSZXNpemVyU3R5bGUoKQotewotICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJl
bmRlcmVyID0gcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZXNp
emVyID0gcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRV
bmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlJlc2l6ZXIgfSwgJmFjdHVhbFJlbmRlcmVy
LT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc2l6ZXIpIHsKLSAgICAgICAgY2xl
YXJSZXNpemVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzaXpl
cikgewotICAgICAgICBtX3Jlc2l6ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTY3JvbGxiYXJQ
YXJ0PihyZW5kZXJlcigpLmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKLSAgICAgICAg
Ly8gRklYTUU6IEEgcmVuZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKLSAg
ICAgICAgbV9yZXNpemVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Jlc2l6
ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIH0gZWxzZQotICAgICAgICBtX3Jlc2l6ZXItPnNl
dFN0eWxlKFdURk1vdmUoKnJlc2l6ZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJS
ZXNpemVyKCkKLXsKLSAgICBpZiAoIW1fcmVzaXplcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
cmVzaXplci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fcmVzaXplciA9IG51bGxwdHI7Ci19
Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6cmVmbGVjdGlvbkxheWVyKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9yZWZsZWN0aW9uID8gbV9yZWZsZWN0aW9uLT5sYXllcigpIDogbnVsbHB0
cjsKQEAgLTY5NzEsNiArNTcxNCwyNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjbGVhckxheWVyRmls
dGVycygpCiAgICAgbV9maWx0ZXJzID0gbnVsbHB0cjsKIH0KIAorUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYSogUmVuZGVyTGF5ZXI6OmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAg
IGJvb2wgaGFkU2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYSgpOworICAgIGlmICghbV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYSA9IG1ha2VVbmlxdWU8UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYT4oKnRoaXMpOworCisgICAgaWYgKCFoYWRTY3JvbGxhYmxl
QXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+c3RvcmVTY3JvbGxQb3NpdGlvbigpOwor
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQorCit2b2lkIFJlbmRlckxheWVy
OjpjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KSB7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAg
ICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmNsZWFyUmVzaXplcigpOworICAgICAgICBtX3Njcm9sbGFi
bGVBcmVhID0gbnVsbHB0cjsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZp
bHRlcnNBZnRlclN0eWxlQ2hhbmdlKCkKIHsKICAgICBpZiAoIWhhc0ZpbHRlcigpKSB7CkBAIC02
OTg3LDYgKzU3NTAsMTYgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyc0FmdGVyU3R5
bGVDaGFuZ2UoKQogICAgICAgICBtX2ZpbHRlcnMtPnJlbW92ZVJlZmVyZW5jZUZpbHRlckNsaWVu
dHMoKTsKIH0KIAordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJTY3JvbGxhYmxlQXJlYSgp
Cit7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpIHx8ICFkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSkgewor
ICAgICAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKK30KKwogdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiB7CiAgICAgLy8gUmVuZGVyTGF5
ZXJGaWx0ZXJzIGlzIG9ubHkgdXNlZCB0byByZW5kZXIgdGhlIGZpbHRlcnMgaW4gc29mdHdhcmUg
bW9kZSwKQEAgLTcwMjEsNyArNTc5NCw3IEBAIHN0YXRpYyBSZW5kZXJMYXllciogcGFyZW50TGF5
ZXJDcm9zc0ZyYW1lKGNvbnN0IFJlbmRlckxheWVyJiBsYXllcikKICAgICBpZiAoYXV0byogcGFy
ZW50ID0gbGF5ZXIucGFyZW50KCkpCiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAKLSAgICByZXR1
cm4gZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcihsYXllcik7CisgICAgcmV0dXJuIGxheWVyLmVu
Y2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllcjo6aXNUcmFu
c3BhcmVudFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdApAQCAtNzA0Myw2ICs1ODE2LDEx
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNpbXVsYXRlRnJlcXVlbnRQYWludCgpCiAgICAgU2luZ2xl
UGFpbnRGcmVxdWVuY3lUcmFja2luZyB7IG1fcGFpbnRGcmVxdWVuY3lUcmFja2VyLCBwYWdlKCku
bGFzdFJlbmRlcmluZ1VwZGF0ZVRpbWVzdGFtcCgpIH07CiB9CiAKK1JlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEqIFJlbmRlckxheWVyOjpzY3JvbGxhYmxlQXJlYSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEuZ2V0KCk7Cit9CisKICNpZiAhTE9HX0RJU0FCTEVECiBzdGF0
aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgUmVuZGVyTGF5ZXI6OkV2
ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHJlYXNvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmgKaW5kZXggMzZhMDZhNGJmYjIzNTk1Mzg0ZGFjODFjZTYwMzMzNjY1
NTA0ODNkYS4uNGZlZWI1N2Q3ODlmMzFlMzE3MTU1MjBlMmU5MzJjMGVhOGI0YzdlNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFBv
cnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29y
cG9yYXRpb24uCiAgKgpAQCAtNTEsNyArNTIsNiBAQAogI2luY2x1ZGUgIlJlbmRlckJveC5oIgog
I2luY2x1ZGUgIlJlbmRlclB0ci5oIgogI2luY2x1ZGUgIlNjcm9sbEJlaGF2aW9yLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3Rm
L01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTc1LDYgKzc1LDcgQEAg
Y2xhc3MgUmVuZGVyR2VvbWV0cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFz
cyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CiBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CitjbGFz
cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwogY2xhc3MgUmVuZGVyTWFycXVlZTsKIGNsYXNz
IFJlbmRlclJlcGxpY2E7CiBjbGFzcyBSZW5kZXJTY3JvbGxiYXJQYXJ0OwpAQCAtMTQzLDE3ICsx
NDQsNzIgQEAgc3RydWN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zIHsKIHVzaW5nIFNjcm9s
bGluZ1Njb3BlID0gdWludDY0X3Q7CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKFJlbmRlckxheWVyKTsKLWNsYXNzIFJlbmRlckxheWVyIGZpbmFsIDogcHVibGljIFNj
cm9sbGFibGVBcmVhIHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFJlbmRlckxheWVyPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lE
RU5USUZJRVIoUmVuZGVyTGF5ZXIpOwogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJS
ZXBsaWNhOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckZpbHRlcnM7CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckxheWVyQmFja2luZzsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOwog
CiAgICAgZXhwbGljaXQgUmVuZGVyTGF5ZXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYpOwogICAg
IHZpcnR1YWwgflJlbmRlckxheWVyKCk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEo
KTsKKworICAgIC8vIFN0YXJ0IG9mIHRlbXBvcmFyeSBnbHVlIGNvZGUgdG8gaGVscCBsYW5kaW5n
IHdlYmtpdC5vcmcvYi82MDMwNSAoc3BsaXQgUmVuZGVyTGF5ZXIgaW50byBSZW5kZXJMYXllci9S
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKQorICAgIFNjcm9sbFR5cGUgY3VycmVudFNjcm9sbFR5
cGUoKSBjb25zdDsKKyAgICB2b2lkIHNldEN1cnJlbnRTY3JvbGxUeXBlKFNjcm9sbFR5cGUpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbEFuaW1hdG9yJiBzY3JvbGxBbmltYXRvcigpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIFNjcm9sbE9mZnNldCBzY3JvbGxPZmZzZXQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNl
dCYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYgPSBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpYygpKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiwgU2Ny
b2xsQ2xhbXBpbmcgPSBTY3JvbGxDbGFtcGluZzo6Q2xhbXBlZCk7CisgICAgdm9pZCBzY3JvbGxU
b1hQb3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7Cisg
ICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFu
Z2VPcHRpb25zJik7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3Np
dGlvbiYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworICAgIHZvaWQgc2Ny
b2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBz
Y3JvbGxlZEFyZWEgPSBudWxscHRyKTsKKyAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRp
b25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKTsKKyNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKGJvb2wpOworICAgIHZvaWQgZGlkRW5kU2Nyb2xsKCk7
CisjZW5kaWYKKyAgICB2b2lkIHNldFNjcm9sbFNob3VsZENsZWFyTGF0Y2hlZFN0YXRlKGJvb2wp
OworICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNv
bnN0OworICAgIGJvb2wgY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2VzdG9yKCk7CisgICAgUmVu
ZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKCk7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOworICAgIHZvaWQg
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50Jiwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9
IGZhbHNlKTsKKyAgICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWlu
dFJlc2l6ZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlv
dXRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBh
aW50QmVoYXZpb3I+LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsK
KyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3Q7CisgICAgYm9v
bCBob3Jpem9udGFsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0OworICAgIGJvb2wgdmVy
dGljYWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQb3N0TGF5
b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+KTsKKyAgICB2b2lkIHBh
blNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIFNjcm9sbFBvc2l0aW9uIHNj
cm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkgY29uc3Q7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JWZXJ0aWNh
bFNjcm9sbGJhcigpIGNvbnN0OworICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigp
IGNvbnN0OworICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBi
b29sIHNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdDsKKyAgICBib29sIGhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFi
bGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29u
c3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7
IH0KKyAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jp
em9udGFsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gdmVydGljYWxTY3JvbGxiYXIoKTsgfQorICAgIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNj
cm9sbGJhclNpemUpIGNvbnN0OworICAgIGludCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUp
IGNvbnN0OworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQg
eCkgeyBzY3JvbGxUb09mZnNldChTY3JvbGxPZmZzZXQoeCwgc2Nyb2xsT2Zmc2V0KCkueSgpKSwg
U2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWNVbmNsYW1wZWQo
KSk7IH0KKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChT
Y3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkueCgpLCB5KSwgU2Nyb2xsUG9zaXRpb25DaGFuZ2VP
cHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWNVbmNsYW1wZWQoKSk7IH0KKyAgICB2b2lkIHNldENv
bnN0cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKGJvb2wpOworICAgIC8vIEVuZCBvZiB0ZW1w
b3JhcnkgZ2x1ZSBjb2RlCisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIENhbGxl
ZCBiZWZvcmUgdGhlIHJlbmRlcmVyJ3Mgd2lkZ2V0IChpZiBhbnkpIGhhcyBiZWVuIG51bGxlZCBv
dXQuCiAgICAgdm9pZCB3aWxsQmVEZXN0cm95ZWQoKTsKQEAgLTIyMyw2ICsyNzksOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRMYXllckxpc3RNdXRhdGlvbkFsbG93ZWQoYm9vbCBmbGFnKSB7IG1f
bGF5ZXJMaXN0TXV0YXRpb25BbGxvd2VkID0gZmxhZzsgfQogI2VuZGlmCiAKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGRlc3Ryb3koKTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGVzZSBmbGFncyBwcm9w
YWdhdGUgaW4gcGFpbnQgb3JkZXIgKHotb3JkZXIgdHJlZSkuCiAgICAgZW51bSBjbGFzcyBDb21w
b3NpdGluZyB7CkBAIC00MTEsOCArNDcwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzdHlsZUNo
YW5nZWQoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCi0g
ICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQo
KTsgfQotCiAgICAgYm9vbCBpc1NlbGZQYWludGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9p
c1NlbGZQYWludGluZ0xheWVyOyB9CiAKICAgICBib29sIGNhbm5vdEJsaXRUb1dpbmRvdygpIGNv
bnN0OwpAQCAtNDMzLDEwNiArNDkwLDI5IEBAIHB1YmxpYzoKIAogICAgIExheW91dFJlY3QgcmVj
dCgpIGNvbnN0IHsgcmV0dXJuIExheW91dFJlY3QobG9jYXRpb24oKSwgc2l6ZSgpKTsgfQogCi0g
ICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0IGZpbmFsOwotICAgIEludFNpemUgY29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSByZWFjaGFibGVUb3RhbENvbnRlbnRz
U2l6ZSgpIGNvbnN0IGZpbmFsOworICAgIEludFNpemUgdmlzaWJsZVNpemUoKSBjb25zdDsKIAog
ICAgIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwogICAgIGludCBzY3JvbGxIZWlnaHQoKSBjb25z
dDsKIAotICAgIHZvaWQgcGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7Ci0KLSAg
ICAvLyBTY3JvbGxpbmcgbWV0aG9kcyBmb3IgbGF5ZXJzIHRoYXQgY2FuIHNjcm9sbCB0aGVpciBv
dmVyZmxvdy4KLSAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVs
dGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7Ci0KLSAgICBib29s
IHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYsIFNjcm9s
bFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9IFNjcm9sbENsYW1waW5n
OjpDbGFtcGVkKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsVG9PZmZz
ZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25z
JiA9IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9uczo6Y3JlYXRlUHJvZ3JhbW1hdGljKCkpOwot
Ci0gICAgdm9pZCBzY3JvbGxUb1hQb3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJik7Ci0gICAgdm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3Qg
U2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBTY3JvbGxQb3NpdGlvbiYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9u
cyYpOwotCi0gICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgotICAgIHZvaWQg
c2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBz
Y3JvbGxPZmZzZXQoKS55KCkpLCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVBy
b2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQotICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5
KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBT
Y3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgp
KTsgfQotCi0gICAgdm9pZCBzZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Ny
b2xsUG9zaXRpb24+KTsKLSAgICB2b2lkIGFwcGx5UG9zdExheW91dFNjcm9sbFBvc2l0aW9uSWZO
ZWVkZWQoKTsKLQogICAgIC8vIFJldHVybnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIHRo
YXQgaXMgc2Nyb2xsYWJsZS4KICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcmV0dXJuIHRoZSBSZW5k
ZXJWaWV3J3MgbGF5ZXIgd2hlbiBjYWxsZXJzIHByb2JhYmx5IHdhbnQgdGhlIEZyYW1lVmlldyBh
cyBhIFNjcm9sbGFibGVBcmVhLgogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdTY3JvbGxhYmxl
TGF5ZXIoSW5jbHVkZVNlbGZPck5vdCwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXMpIGNvbnN0OwogCi0g
ICAgdm9pZCBhdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQoQXZhaWxhYmxlU2l6ZUNoYW5nZVJl
YXNvbikgZmluYWw7Ci0KICAgICAvLyAiYWJzb2x1dGVSZWN0IiBpcyBpbiBzY2FsZWQgZG9jdW1l
bnQgY29vcmRpbmF0ZXMuCiAgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91
dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRv
VmlzaWJsZU9wdGlvbnMmKTsKLQotICAgIGJvb2wgc2Nyb2xsc092ZXJmbG93KCkgY29uc3Q7Ci0g
ICAgYm9vbCBoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9v
bCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0OwotICAgIGJvb2wgaGFzU2Ny
b2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1faEJhciB8fCBtX3ZCYXI7IH0KLSAgICB2b2lkIHNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCk7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sKTsKLQotICAgIFJlZjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3Jv
bGxiYXJPcmllbnRhdGlvbik7Ci0gICAgdm9pZCBkZXN0cm95U2Nyb2xsYmFyKFNjcm9sbGJhck9y
aWVudGF0aW9uKTsKLQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXIoKTsgfQotICAgIGJvb2wgaGFzVmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9Ci0KLSAgICBib29s
IGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9v
bCB2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLQotICAgIC8v
IFNjcm9sbGFibGVBcmVhIG92ZXJyaWRlcwotICAgIFNjcm9sbFBvc2l0aW9uIHNjcm9sbFBvc2l0
aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQotCi0gICAgU2Ny
b2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oQmFy
LmdldCgpOyB9Ci0gICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQotICAgIFNjcm9sbGFibGVBcmVhKiBlbmNsb3NpbmdT
Y3JvbGxhYmxlQXJlYSgpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50
Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIE9wdGlvbmFsPFdoZWVsU2Ny
b2xsR2VzdHVyZVN0YXRlPikgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbGFibGVPclJ1YmJlcmJh
bmRhYmxlKCkgZmluYWw7Ci0gICAgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFu
Y2VzdG9yKCkgZmluYWw7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IGZpbmFs
OwotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0
cygpIGZpbmFsOwotI2VuZGlmCi0KLSAgICBib29sIHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNv
bmNpbGlhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29u
Y2lsaWF0aW9uOyB9Ci0gICAgdm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxp
YXRpb24oYm9vbCByZXF1aXJlc1JlY29uY2lsaWF0aW9uID0gdHJ1ZSkgeyBtX3JlcXVpcmVzU2Ny
b2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA9IHJlcXVpcmVzUmVjb25jaWxpYXRpb247IH0KLQot
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0g
ICAgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFs
OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkaWRTdGFydFNjcm9sbCgpIGZpbmFsOwotICAgIHZv
aWQgZGlkRW5kU2Nyb2xsKCkgZmluYWw7Ci0gICAgdm9pZCBkaWRVcGRhdGVTY3JvbGwoKSBmaW5h
bDsKLSNlbmRpZgotCiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxheWVyIGNvdWxkIGRv
IHRvdWNoIHNjcm9sbGluZywgYnV0IGRvZXNuJ3QgbG9vayBhdCB3aGV0aGVyIHRoZXJlIGlzIGFj
dHVhbGx5IHNjcm9sbGFibGUgb3ZlcmZsb3cuCiAgICAgYm9vbCBjYW5Vc2VDb21wb3NpdGVkU2Ny
b2xsaW5nKCkgY29uc3Q7CiAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhlcmUgaXMgYWN0dWFs
bHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyAocmVxdWlyZXMgbGF5b3V0IHRvIGJlIHVwLXRvLWRhdGUp
LgotICAgIGJvb2wgaGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdzsgfQorICAgIGJvb2wgaGFzQ29t
cG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpIGNvbnN0OwogCi0gICAgaW50IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7Ci0gICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSkgY29uc3Q7CisgICAgYm9vbCBoYXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0OwogCi0gICAg
Ym9vbCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CiAgICAgYm9vbCBpc1BvaW50SW5SZXNp
emVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0OwotICAgIGJvb2wgaGl0VGVzdE92
ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50
KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpIGNvbnN0OwogCi0gICAgdm9pZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBi
b29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzID0gZmFsc2UpOwotICAgIHZvaWQgcGFpbnRTY3Jv
bGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0
JiBkYW1hZ2VSZWN0KTsKLSAgICB2b2lkIHBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QpOwotCiAgICAg
dm9pZCB1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKIAotICAgIGJvb2wgc2Nyb2xsKFNj
cm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsK
ICAgICB2b2lkIGF1dG9zY3JvbGwoY29uc3QgSW50UG9pbnQmKTsKIAogICAgIGJvb2wgY2FuUmVz
aXplKCkgY29uc3Q7CkBAIC01NTUsOSArNTM1LDYgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRl
TGF5ZXJQb3NpdGlvbnNBZnRlclN0eWxlQ2hhbmdlKCk7CiAgICAgdm9pZCB1cGRhdGVMYXllclBv
c2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRyZWUsIGJvb2wgZGlkRnVs
bFJlcGFpbnQpOwogCi0gICAgdm9pZCB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dT
Y3JvbGwoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXJJbkVuY2xvc2luZ1BhZ2luYXRpb25D
aGFpbigpIGNvbnN0OwogICAgIGVudW0gUGFnaW5hdGlvbkluY2x1c2lvbk1vZGUgeyBFeGNsdWRl
Q29tcG9zaXRlZFBhZ2luYXRlZExheWVycywgSW5jbHVkZUNvbXBvc2l0ZWRQYWdpbmF0ZWRMYXll
cnMgfTsKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nUGFnaW5hdGlvbkxheWVyKFBhZ2luYXRp
b25JbmNsdXNpb25Nb2RlIG1vZGUpIGNvbnN0CkBAIC02MzcsNiArNjE0LDggQEAgcHVibGljOgog
ICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdBbmNlc3RvckZvclBvc2l0aW9uKFBvc2l0aW9uVHlw
ZSkgY29uc3Q7CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0xheWVySW5Db250YWlu
aW5nQmxvY2tPcmRlcigpIGNvbnN0OworICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdDb250YWlu
aW5nQmxvY2tMYXllcihDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CisgICAgUmVuZGVyTGF5
ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIoKSBjb25zdDsKIAogICAgIC8vIFRoZSBsYXll
ciByZWxhdGl2ZSB0byB3aGljaCBjbGlwcGluZyByZWN0cyBmb3IgdGhpcyBsYXllciBhcmUgY29t
cHV0ZWQuCiAgICAgUmVuZGVyTGF5ZXIqIGNsaXBwaW5nUm9vdEZvclBhaW50aW5nKCkgY29uc3Q7
CkBAIC02OTgsNyArNjc3LDYgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJPYmplY3QqIHN1YnRy
ZWVQYWludFJvb3QgPSBudWxscHRyLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+ID0geyB9LCBT
ZWN1cml0eU9yaWdpblBhaW50UG9saWN5ID0gU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeTo6QW55
T3JpZ2luLCBFdmVudFJlZ2lvbkNvbnRleHQqID0gbnVsbHB0cik7CiAgICAgYm9vbCBoaXRUZXN0
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYpOwogICAgIGJvb2wgaGl0VGVz
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RS
ZXN1bHQmKTsKLSAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKIAogICAgIHN0cnVj
dCBDbGlwUmVjdHNDb250ZXh0IHsKICAgICAgICAgQ2xpcFJlY3RzQ29udGV4dChjb25zdCBSZW5k
ZXJMYXllciogaW5Sb290TGF5ZXIsIENsaXBSZWN0c1R5cGUgaW5DbGlwUmVjdHNUeXBlLCBPdmVy
bGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBpbk92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5
ID0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUsIFNob3VsZFJlc3BlY3RPdmVyZmxvd0NsaXAg
aW5SZXNwZWN0T3ZlcmZsb3dDbGlwID0gUmVzcGVjdE92ZXJmbG93Q2xpcCkKQEAgLTc4NCwxMSAr
NzYyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3RhdGljSW5saW5lUG9zaXRpb24oTGF5b3V0
VW5pdCBwb3NpdGlvbikgeyBtX3N0YXRpY0lubGluZVBvc2l0aW9uID0gcG9zaXRpb247IH0KICAg
ICB2b2lkIHNldFN0YXRpY0Jsb2NrUG9zaXRpb24oTGF5b3V0VW5pdCBwb3NpdGlvbikgeyBtX3N0
YXRpY0Jsb2NrUG9zaXRpb24gPSBwb3NpdGlvbjsgfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygpIGNvbnN0IHsgcmV0
dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9Ci0gICAgdm9pZCBzZXRBZGp1
c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3Jv
bGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmc7IH0KLSNlbmRpZgotCiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiByZW5kZXJlcigpLmhhc1RyYW5zZm9ybSgpOyB9CiAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgdHJhbnNmb3JtIGhhcyB0aGUgdHJhbnNmb3JtLW9yaWdpbiBiYWtlZCBpbi4KICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCogdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFu
c2Zvcm0uZ2V0KCk7IH0KQEAgLTg1OCwxNiArODMxLDExIEBAIHB1YmxpYzoKICAgICBSZW5kZXJM
YXllckJhY2tpbmcqIGVuc3VyZUJhY2tpbmcoKTsKICAgICB2b2lkIGNsZWFyQmFja2luZyhib29s
IGxheWVyQmVpbmdEZXN0cm95ZWQgPSBmYWxzZSk7CiAKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGljc0xheWVy
KiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmluYWw7Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgdXNl
c0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIHVzZXNBc3luY1Nj
cm9sbGluZygpIGNvbnN0IGZpbmFsOwotCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IoKSBjb25zdCB7IHJldHVybiBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
cjsgfQogICAgIHZvaWQgc2V0SGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKGJvb2wgaGFz
Q29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yKSB7IG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0Fu
Y2VzdG9yID0gaGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2VzdG9yOyB9CiAKKyAgICBib29sIHVz
ZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3Q7CisKICAgICAvLyBMYXllcnMgd2l0aCB0aGUg
c2FtZSBTY3JvbGxpbmdTY29wZSBhcmUgc2Nyb2xsZWQgYnkgc29tZSBjb21tb24gYW5jZXN0b3Ig
c2Nyb2xsZXIuIFVzZWQgZm9yIGFzeW5jIHNjcm9sbGluZy4KICAgICBPcHRpb25hbDxTY3JvbGxp
bmdTY29wZT4gYm94U2Nyb2xsaW5nU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2JveFNjcm9sbGlu
Z1Njb3BlOyB9CiAgICAgT3B0aW9uYWw8U2Nyb2xsaW5nU2NvcGU+IGNvbnRlbnRzU2Nyb2xsaW5n
U2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2Nyb2xsaW5nU2NvcGU7IH0KQEAgLTg4
NSwxMSArODUzLDYgQEAgcHVibGljOgogICAgIC8vIFRoZSBxdWVyeSByZWN0IGlzIGdpdmVuIGlu
IGxvY2FsIGNvb3JkaW5hdGVzLgogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT3BhcXVl
SW5SZWN0KGNvbnN0IExheW91dFJlY3QmKSBjb25zdDsKIAotICAgIGJvb2wgc2Nyb2xsaW5nTWF5
UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OwotCi0gICAgYm9vbCBjb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xs
YmFyczsgfQotICAgIHZvaWQgc2V0Q29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGJvb2wg
ZGlydHlTY3JvbGxiYXJzKSB7IG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZGly
dHlTY3JvbGxiYXJzOyB9Ci0KICAgICBib29sIHBhaW50c1dpdGhGaWx0ZXJzKCkgY29uc3Q7CiAg
ICAgYm9vbCByZXF1aXJlc0Z1bGxMYXllckltYWdlRm9yRmlsdGVycygpIGNvbnN0OwogCkBAIC05
MTgsOCArODgxLDYgQEAgcHVibGljOgogCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYWdt
ZW50ZWRGbG93QW5jZXN0b3IoKSBjb25zdDsKIAotICAgIGJvb2wgc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHJlbmRlcmVyKCku
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOyB9Ci0KICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNpbXVsYXRlRnJlcXVlbnRQYWludCgpOwogICAgIGJvb2wgcGFpbnRp
bmdGcmVxdWVudGx5KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEZyZXF1ZW5jeVRyYWNrZXIucGFp
bnRpbmdGcmVxdWVudGx5KCk7IH0KIApAQCAtOTMwLDcgKzg5MSw3IEBAIHB1YmxpYzoKICAgICBl
bnVtIGNsYXNzIEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uIHsgUGFpbnQsIFNldHRpbmdE
aWRDaGFuZ2UsIFN0eWxlLCBOb25Db21wb3NpdGVkRnJhbWUgfTsKICAgICBib29sIGludmFsaWRh
dGVFdmVudFJlZ2lvbihFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbik7CiAKLSAgICBTdHJp
bmcgZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0IGZpbmFsOworICAgIFN0cmluZyBkZWJ1Z0Rlc2Ny
aXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAKQEAgLTEwMTAsOSArOTcxLDYgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgdXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKIAotICAgIHZvaWQgdXBk
YXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2UoY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
KTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpOwotCiAgICAgZW51bSBV
cGRhdGVMYXllclBvc2l0aW9uc0ZsYWcgewogICAgICAgICBDaGVja0ZvclJlcGFpbnQgICAgICAg
ICAgICAgICAgICAgICA9IDEgPDwgMCwKICAgICAgICAgTmVlZHNGdWxsUmVwYWludEluQmFja2lu
ZyAgICAgICAgICAgPSAxIDw8IDEsCkBAIC0xMDM4LDggKzk5Niw2IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0
cnlNYXAqLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbEZsYWc+ID0g
eyB9KTsKIAotICAgIFNjcm9sbE9mZnNldCBjbGFtcFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxP
ZmZzZXQmKSBjb25zdDsKLQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5
ZXJJblN1YnRyZWUoY29uc3QgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciwgUGFnaW5hdGlvbkluY2x1
c2lvbk1vZGUpIGNvbnN0OwogCiAgICAgTGF5b3V0UG9pbnQgcmVuZGVyQm94TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKS5sb2NhdGlvbigpIDogTGF5b3V0UG9pbnQoKTsgfQpAQCAtMTA1Myw2
ICsxMDA5LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGVuc3VyZUxheWVyRmlsdGVycygpOwogICAg
IHZvaWQgY2xlYXJMYXllckZpbHRlcnMoKTsKIAorICAgIHZvaWQgdXBkYXRlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworICAgIHZvaWQgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICBS
ZW5kZXJMYXllckZpbHRlcnMqIGZpbHRlcnNGb3JQYWludGluZyhHcmFwaGljc0NvbnRleHQmLCBP
cHRpb25TZXQ8UGFpbnRMYXllckZsYWc+KSBjb25zdDsKICAgICBHcmFwaGljc0NvbnRleHQqIHNl
dHVwRmlsdGVycyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgTGF5ZXJQYWlu
dGluZ0luZm8mLCBPcHRpb25TZXQ8UGFpbnRMYXllckZsYWc+LCBjb25zdCBMYXlvdXRTaXplJiBv
ZmZzZXRGcm9tUm9vdCk7CiAgICAgdm9pZCBhcHBseUZpbHRlcnMoR3JhcGhpY3NDb250ZXh0JiBv
cmlnaW5hbENvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgT3B0aW9uU2V0PFBhaW50
QmVoYXZpb3I+LCBjb25zdCBMYXllckZyYWdtZW50cyYpOwpAQCAtMTA5OSw2NCArMTA1OCwxMyBA
QCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgaGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFJlY3QmIGxheWVyQm91bmRzLCBj
b25zdCBIaXRUZXN0TG9jYXRpb24mLCBIaXRUZXN0RmlsdGVyKSBjb25zdDsKICAgICBib29sIGhp
dFRlc3RDb250ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhp
dFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhp
dFRlc3RGaWx0ZXIsIGJvb2wmIGluc2lkZUNsaXBSZWN0KSBjb25zdDsKLSAgICBib29sIGhpdFRl
c3RSZXNpemVySW5GcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mLCBMYXlvdXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKICAgICBSZW5k
ZXJMYXllciogaGl0VGVzdFRyYW5zZm9ybWVkTGF5ZXJJbkZyYWdtZW50cyhSZW5kZXJMYXllciog
cm9vdExheWVyLCBSZW5kZXJMYXllciogY29udGFpbmVyTGF5ZXIsIGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsCiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmIGhpdFRlc3RS
ZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGUqID0gbnVsbHB0ciwgZG91YmxlKiB6T2Zmc2V0ID0gbnVsbHB0cik7CiAKICAgICBib29sIGxp
c3RCYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5ZXJMaXN0JiwgY29u
c3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgdm9pZCBjb21wdXRlU2Nyb2xsRGltZW5zaW9u
cygpOwotICAgIHZvaWQgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsK
LQotICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNW
ZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0KLSAgICBib29sIHNob3dzT3ZlcmZsb3dDb250cm9s
cygpIGNvbnN0OwotCiAgICAgYm9vbCBzaG91bGRCZVNlbGZQYWludGluZ0xheWVyKCkgY29uc3Q7
CiAKLSAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UKLSAgICBib29sIGlzUmVuZGVyTGF5
ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdm9pZCBpbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgdm9pZCBp
bnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0JikgZmluYWw7Ci0gICAgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNTY3JvbGxDb3JuZXJWaXNpYmxl
KCkgY29uc3QgZmluYWw7Ci0gICAgSW50UmVjdCBzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QgZmlu
YWw7Ci0gICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciYsIGNv
bnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3Jv
bGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKLSAg
ICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmKSBmaW5hbDsKLSAgICBT
Y3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3QgZmluYWw7Ci0KLSAgICBJbnRS
ZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVjdEluY2x1ZGVz
U2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3IpIGNvbnN0IGZpbmFsOwotICAg
IEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRQb2ludCBsYXN0
S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc0hhbmRs
aW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgc2hvdWxkU3VzcGVuZFNjcm9s
bEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIpIGNvbnN0IGZpbmFsOwotICAg
IGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZm9yY2VVcGRhdGVT
Y3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QgZmluYWw7
Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBib29sIGlzU2Nyb2xsU25hcEluUHJv
Z3Jlc3MoKSBjb25zdCBmaW5hbDsKLSNlbmRpZgotICAgIGJvb2wgdXNlc01vY2tTY3JvbGxBbmlt
YXRvcigpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgbG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2Fn
ZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKQotICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotICAgIHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7
Ci0jZW5kaWYKLQotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRo
ZSBvdmVycmlkZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGFibGVBcmVhLgotICAgIHZv
aWQgc2Nyb2xsVG8oY29uc3QgU2Nyb2xsUG9zaXRpb24mKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBv
c2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLQotICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0
KGNvbnN0IFNjcm9sbGJhciYpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJs
ZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxvdyk7Ci0gICAgCiAgICAgYm9vbCBhbGxvd3NDdXJyZW50
U2Nyb2xsKCkgY29uc3Q7CiAKICAgICB2b2lkIGRpcnR5QW5jZXN0b3JDaGFpblZpc2libGVEZXNj
ZW5kYW50U3RhdHVzKCk7CkBAIC0xMTk2LDE0ICsxMTA0LDYgQEAgcHJpdmF0ZToKICAgICAvLyBD
b252ZXJ0IGEgcG9pbnQgaW4gYWJzb2x1dGUgY29vcmRzIGludG8gbGF5ZXIgY29vcmRzLCB0YWtp
bmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQKICAgICBMYXlvdXRQb2ludCBhYnNvbHV0ZVRvQ29u
dGVudHMoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgcG9zaXRpb25PdmVy
Zmxvd0NvbnRyb2xzKGNvbnN0IEludFNpemUmKTsKLSAgICB2b2lkIHVwZGF0ZVNjcm9sbENvcm5l
clN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOwotICAgIHZvaWQgdXBkYXRl
UmVzaXplclN0eWxlKCk7Ci0gICAgdm9pZCBjbGVhclJlc2l6ZXIoKTsKLQotICAgIHZvaWQgZHJh
d1BsYXRmb3JtUmVzaXplckltYWdlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFJlY3Qm
IHJlc2l6ZXJDb3JuZXJSZWN0KTsKLQogICAgIHZvaWQgdXBkYXRlUGFnaW5hdGlvbigpOwogCiAg
ICAgdm9pZCBzZXRIYXNDb21wb3NpdGluZ0Rlc2NlbmRhbnQoYm9vbCBiKSAgeyBtX2hhc0NvbXBv
c2l0aW5nRGVzY2VuZGFudCA9IGI7IH0KQEAgLTEyMTIsMTEgKzExMTIsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2V0SW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbihJbmRpcmVjdENvbXBvc2l0aW5n
UmVhc29uIHJlYXNvbikgeyBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24gPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmVhc29uKTsgfQogICAgIGJvb2wgbXVzdENvbXBvc2l0ZUZvckluZGlyZWN0
UmVhc29ucygpIGNvbnN0IHsgcmV0dXJuIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbjsgfQog
Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3Zl
cmZsb3dCb3R0b20oKSBjb25zdDsKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0
OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OwotCiAgICAgc3RydWN0IE92
ZXJmbG93Q29udHJvbFJlY3RzIHsKICAgICAgICAgSW50UmVjdCBob3Jpem9udGFsU2Nyb2xsYmFy
OwogICAgICAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyOwpAQCAtMTIyOSw4ICsxMTI0LDYg
QEAgcHJpdmF0ZToKICAgICB9OwogICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29u
dHJvbHNSZWN0cygpIGNvbnN0OwogCi0gICAgYm9vbCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0
UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0OwotCiAgICAgT3B0aW9uU2V0PENv
bXBvc2l0aW5nPiBtX2NvbXBvc2l0aW5nRGlydHlCaXRzOwogCiAgICAgY29uc3QgYm9vbCBtX2lz
UmVuZGVyVmlld0xheWVyIDogMTsKQEAgLTEyNDcsNyArMTE0MCw2IEBAIHByaXZhdGU6CiAgICAg
Ly8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGF5ZXIgaXMgY3VycmVudGx5IHJlc2l6aW5n
LCBzbyBldmVudHMgY2FuIGNhdXNlIHJlc2l6aW5nIHRvIHN0YXJ0IGFuZCBzdG9wLgogICAgIGJv
b2wgbV9pblJlc2l6ZU1vZGUgOiAxOwogCi0gICAgYm9vbCBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0
eSA6IDE7CiAgICAgYm9vbCBtX2lzU2VsZlBhaW50aW5nTGF5ZXIgOiAxOwogCiAgICAgLy8gSWYg
aGF2ZSBubyBzZWxmLXBhaW50aW5nIGRlc2NlbmRhbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdhbGsg
b3VyIGNoaWxkcmVuIGR1cmluZyBwYWludGluZy4gVGhpcyBjYW4gbGVhZCB0bwpAQCAtMTI1OSwx
NCArMTE1MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgZW5kZWQgdXAgcGFpbnRpbmcgdGhpcyBsYXllciBvciBhbnkgZGVzY2VuZGFudHMgKGFu
ZCB0aGVyZWZvcmUgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YmxlbmQpLgogICAgIGJvb2wgbV9wYWludGluZ0luc2lkZVJlZmxlY3Rpb24gOiAxOyAgLy8gQSBz
dGF0ZSBiaXQgdHJhY2tpbmcgaWYgd2UgYXJlIHBhaW50aW5nIGluc2lkZSBhIHJlcGxpY2EuCi0g
ICAgYm9vbCBtX2luT3ZlcmZsb3dSZWxheW91dCA6IDE7CiAgICAgdW5zaWduZWQgbV9yZXBhaW50
U3RhdHVzIDogMjsgLy8gUmVwYWludFN0YXR1cwogCiAgICAgYm9vbCBtX3Zpc2libGVDb250ZW50
U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNWaXNpYmxlQ29udGVudCA6IDE7CiAgICAg
Ym9vbCBtX3Zpc2libGVEZXNjZW5kYW50U3RhdHVzRGlydHkgOiAxOwogICAgIGJvb2wgbV9oYXNW
aXNpYmxlRGVzY2VuZGFudCA6IDE7Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJl
YSA6IDE7CiAgICAgYm9vbCBtX2lzRml4ZWRJbnRlcnNlY3RpbmdWaWV3cG9ydCA6IDE7CiAgICAg
Ym9vbCBtX2JlaGF2ZXNBc0ZpeGVkIDogMTsKIApAQCAtMTI3Nyw3ICsxMTY3LDYgQEAgcHJpdmF0
ZToKIAogICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVkRGVzY2VuZGFudHMgOiAx
OwogICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IgOiAxOyAvLyBJbiB0
aGUgbGF5ZXItb3JkZXIgdHJlZS4KLSAgICBib29sIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVP
dmVyZmxvdyA6IDE7CiAKICAgICBib29sIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CiAg
ICAgYm9vbCBtX2hhczNEVHJhbnNmb3JtZWRBbmNlc3RvciA6IDE7CkBAIC0xMjg3LDE3ICsxMTc2
LDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24g
OiA0OyAvLyBJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uCiAgICAgdW5zaWduZWQgbV92aWV3cG9y
dENvbnN0cmFpbmVkTm90Q29tcG9zaXRlZFJlYXNvbiA6IDI7IC8vIFZpZXdwb3J0Q29uc3RyYWlu
ZWROb3RDb21wb3NpdGVkUmVhc29uCiAKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOwotI2VuZGlmCi0gICAgYm9vbCBtX2FkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9yZXF1aXJlc1Nj
cm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gOiAxOwotICAgIGJvb2wgbV9jb250YWluc0RpcnR5
T3ZlcmxheVNjcm9sbGJhcnMgOiAxOwotICAgIGJvb2wgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlv
biA6IDE7Ci0KICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9sYXllckxpc3RNdXRhdGlv
bkFsbG93ZWQgOiAxOwogI2VuZGlmCkBAIC0xMzM4LDI1ICsxMjE2LDExIEBAIHByaXZhdGU6CiAg
ICAgLy8gVGhlIGxheWVyJ3Mgd2lkdGgvaGVpZ2h0CiAgICAgSW50U2l6ZSBtX2xheWVyU2l6ZTsK
IAotICAgIFNjcm9sbFBvc2l0aW9uIG1fc2Nyb2xsUG9zaXRpb247Ci0gICAgT3B0aW9uYWw8U2Ny
b2xsUG9zaXRpb24+IG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gVGhlIHdp
ZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4KLSAgICBJbnRTaXplIG1fc2Nyb2xsU2l6
ZTsKLQotICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Yg
c2Nyb2xsYmFycy4KLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7Ci0gICAgUmVmUHRyPFNj
cm9sbGJhcj4gbV92QmFyOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaXBSZWN0c0NhY2hlPiBt
X2NsaXBSZWN0c0NhY2hlOwotICAgIAotICAgIEludFBvaW50IG1fY2FjaGVkT3ZlcmxheVNjcm9s
bGJhck9mZnNldDsKIAogICAgIE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmth
YmxlVHJhaXRzPFNjcm9sbGluZ1Njb3BlLCAwPj4gbV9ib3hTY3JvbGxpbmdTY29wZTsKICAgICBN
YXJrYWJsZTxTY3JvbGxpbmdTY29wZSwgSW50ZWdyYWxNYXJrYWJsZVRyYWl0czxTY3JvbGxpbmdT
Y29wZSwgMD4+IG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJNYXJxdWVlPiBtX21hcnF1ZWU7IC8vIFVzZWQgZm9yIDxtYXJxdWVlPi4KLSAgICAK
ICAgICAvLyBDYWNoZWQgbm9ybWFsIGZsb3cgdmFsdWVzIGZvciBhYnNvbHV0ZSBwb3NpdGlvbmVk
IGVsZW1lbnRzIHdpdGggc3RhdGljIGxlZnQvdG9wIHZhbHVlcy4KICAgICBMYXlvdXRVbml0IG1f
c3RhdGljSW5saW5lUG9zaXRpb247CiAgICAgTGF5b3V0VW5pdCBtX3N0YXRpY0Jsb2NrUG9zaXRp
b247CkBAIC0xMzY2LDEwICsxMjMwLDYgQEAgcHJpdmF0ZToKICAgICAvLyBNYXkgdWx0aW1hdGVs
eSBiZSBleHRlbmRlZCB0byBtYW55IHJlcGxpY2FzICh3aXRoIHRoZWlyIG93biBwYWludCBvcmRl
cikuCiAgICAgUmVuZGVyUHRyPFJlbmRlclJlcGxpY2E+IG1fcmVmbGVjdGlvbjsKIAotICAgIC8v
IFJlbmRlcmVycyB0byBob2xkIG91ciBjdXN0b20gc2Nyb2xsIGNvcm5lciBhbmQgcmVzaXplci4K
LSAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9zY3JvbGxDb3JuZXI7Ci0gICAg
UmVuZGVyUHRyPFJlbmRlclNjcm9sbGJhclBhcnQ+IG1fcmVzaXplcjsKLQogICAgIC8vIFBvaW50
ZXIgdG8gdGhlIGVuY2xvc2luZyBSZW5kZXJMYXllciB0aGF0IGNhdXNlZCB1cyB0byBiZSBwYWdp
bmF0ZWQuIEl0IGlzIDAgaWYgd2UgYXJlIG5vdCBwYWdpbmF0ZWQuCiAgICAgV2Vha1B0cjxSZW5k
ZXJMYXllcj4gbV9lbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXI7CiAKQEAgLTEzNzcsNiArMTIzNyw3
IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJGaWx0ZXJzPiBt
X2ZpbHRlcnM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyQmFja2luZz4gbV9iYWNr
aW5nOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhPiBtX3Nj
cm9sbGFibGVBcmVhOwogICAgIAogICAgIFBhaW50RnJlcXVlbmN5VHJhY2tlciBtX3BhaW50RnJl
cXVlbmN5VHJhY2tlcjsKIH07CkBAIC0xNDQ5LDYgKzEzMTAsMyBAQCB2b2lkIHNob3dQYWludE9y
ZGVyVHJlZShjb25zdCBXZWJDb3JlOjpSZW5kZXJMYXllciopOwogdm9pZCBzaG93TGF5ZXJUcmVl
KGNvbnN0IFdlYkNvcmU6OlJlbmRlck9iamVjdCopOwogI2VuZGlmCiAKLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6UmVuZGVyTGF5ZXIpCi0gICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhJiBhcmVhKSB7IHJldHVybiBhcmVhLmlz
UmVuZGVyTGF5ZXIoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCAxMWQ5NGEx
MWU4Y2ZlZDI2N2M4NTUxMjgyNjJiZmU3MjBkM2YwYzA3Li4xMGI3NjIyZDQxMDEwN2FlZWUzMjg3
ZDcyZGIyN2ExNWEzY2Q1MmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTMsMTMgKzUzLDE0IEBACiAjaW5jbHVkZSAiUGVyZm9y
bWFuY2VMb2dnaW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNs
dWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RnJhZ21lbnRlZEZsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySUZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJSZW5k
ZXJNZWRpYS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZGVvLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmll
dy5oIgpAQCAtMjA2NSwxMCArMjA2NiwxMiBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBk
YXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyhib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbAogICAg
IGxheWVyc0NoYW5nZWQgfD0gY3JlYXRlT3JEZXN0cm95TGF5ZXIobV9sYXllckZvclNjcm9sbENv
cm5lciwgbmVlZHNTY3JvbGxDb3JuZXJMYXllciwgdHJ1ZSwgInNjcm9sbCBjb3JuZXIiKTsKIAog
ICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fb3duaW5nTGF5ZXIucGFnZSgp
LnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxi
YXJMYXllckNoYW5nZWQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xs
YWJsZUFyZWFTY3JvbGxiYXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKLSAgICAgICAgaWYgKHZlcnRpY2FsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQot
ICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFy
TGF5ZXJEaWRDaGFuZ2UobV9vd25pbmdMYXllciwgVmVydGljYWxTY3JvbGxiYXIpOworICAgICAg
ICBpZiAoYXV0byogc2Nyb2xsYWJsZUFyZWEgPSBtX293bmluZ0xheWVyLnNjcm9sbGFibGVBcmVh
KCkpIHsKKyAgICAgICAgICAgIGlmIChob3Jpem9udGFsU2Nyb2xsYmFyTGF5ZXJDaGFuZ2VkKQor
ICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3JvbGxhYmxlQXJlYVNjcm9s
bGJhckxheWVyRGlkQ2hhbmdlKCpzY3JvbGxhYmxlQXJlYSwgSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Nyb2xsYmFyTGF5
ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVBcmVhLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAg
IH0KICAgICB9CiAKICAgICByZXR1cm4gbGF5ZXJzQ2hhbmdlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggZmYxMjMwZWRl
OGE4NmE4ODhmMjMyMzEzZmMzZjg1NzFjYmM2MzBjNC4uYzhhMGZhMjZkZmVkMmIwMzMyMDRjNzcx
MjJiODVkZDIxMzY3Y2E1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCkBAIC00NzI1LDggKzQ3MjYsMTAgQEAgU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUoUmVuZGUKICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6
OkxheWVyKQogICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQs
IGxheWVyLCAqc2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJl
bnROb2RlSUQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5n
Tm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlm
IChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRy
ZWVTdGF0ZS5wYXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdO
b2RlSUQsICpzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJu
IG5ld05vZGVJRDsKQEAgLTQ5MDEsNyArNDkwNCw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGlu
CiAgICAgaWYgKG5vZGVJRCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9k
ZUlEKCkpCiAgICAgICAgIHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAg
cmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xs
aW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2lu
ZyYgYmFja2luZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcAppbmRleCAwNTJhOWM3NWU2MzU1NmEzZWVhYmJmZGYxYzIyMWJlM2Mx
M2I0Y2FjLi5jN2ZjNjZjNzAxM2I3ZThkZTZhYTA2YzQzMTNiZDI5YTgxODUxYWUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3Bw
CkBAIC0xNzYsOCArMTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3Jv
bGxTbmFwQ29udGFpbmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5l
d1N0eWxlKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIo
KSkgewotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
ICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0
cygpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1l
VmlldygpOwogICAgICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0x
OTUsOCArMTk2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9s
bFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAg
IGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmlj
dG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51
cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVy
KCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZz
ZXRzKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwg
c2Nyb2xsU25hcEJveC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwCmluZGV4IDg5OTllMDAzN2ExNTI3ZWJjZGMzNWZhMTc1ODY4YmNkMjdhZWM3YWYuLjJjNmYz
YmUwODNmYWQ4OTRiZTZlNDdlNzJlZDcxZTE4NGI5YTA3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTQ5
LDEyICs0OSw2MSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKLSAg
ICA6IG1fbGF5ZXIobGF5ZXIpCisgICAgOiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQor
ICAgICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYShmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fbGF5ZXIo
bGF5ZXIpCiB7CiB9CiAKIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhKCkKIHsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYg
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKKyNlbmRpZgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVu
dCgpKQorICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIp
OworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJS
ZXNpemVyKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3Jv
bGxQb3NpdGlvbigpCit7CisgICAgYXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5l
bGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9sYXllci5yZW5kZXJCb3goKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9u
bHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxj
dWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkK
KyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOworICAgIH0KKworICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKQEAgLTYyLDQg
KzExMSwxNzExIEBAIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXIu
cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CiB9
CiAKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNo
RXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0
aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50
KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5yZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8g
dHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3Zl
cmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Cisg
ICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhz
Y3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllci5yZW5kZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5h
YmxlZCgpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1h
ZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3Jv
bGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29y
ZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3Jv
bGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBwb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChz
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUo
KSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4
LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgU2Ny
b2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNj
cm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRp
b25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTY3JvbGxQ
b3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Nyb2xsVG9PZmZzZXQoc2Ny
b2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgb3B0aW9ucyk7Cit9CisKK1Njcm9sbE9m
ZnNldCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zm
c2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXll
ciA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAg
IGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xs
T2Zmc2V0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IG9wdGlvbnMuY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9s
bE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0
Q3VycmVudFNjcm9sbFR5cGUob3B0aW9ucy50eXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBzbmFw
cGVkT2Zmc2V0ID0gY2VpbGVkSW50UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS5hZGp1c3RTY3JvbGxP
ZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNsYW1wZWRTY3JvbGxPZmZzZXQsIG9wdGlvbnMuc25h
cFBvaW50U2VsZWN0aW9uTWV0aG9kKSk7CisgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZWQgPT0gQW5p
bWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBz
bmFwcGVkUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoc25hcHBlZE9mZnNldCk7
CisgICAgICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNuYXBwZWRQb3NpdGlv
biwgb3B0aW9ucy50eXBlLCBvcHRpb25zLmNsYW1waW5nKSkKKyAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0LCBvcHRpb25zLmNsYW1waW5nKTsK
KyAgICAgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5v
dEluQW5pbWF0aW9uKTsKKyAgICB9CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91
c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsK
KworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Nj
cm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG5l
d1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlm
IHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgorICAgICAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMg
cmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCisgICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0g
c2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKKyAgICAgICAg
ICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3
UG9zaXRpb24pOworICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgp
OworICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOworICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxY
T2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQorICAgICAgICAgICAg
ICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKKworICAgICAgICAgICAgbmV3T2Zmc2V0
LnNldFgoc2Nyb2xsWE9mZnNldCk7CisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisK
KyAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKKyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxU
bygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1
cmUuCisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0
byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBp
ZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAg
IG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsK
KworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlclZp
ZXcmIHZpZXcgPSByZW5kZXJlci52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZm
ZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJl
IGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEg
ZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9m
IGEgcGFydGljdWxhciByZWdpb24uCisgICAgICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuaW52YWxp
ZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdlT3Zlcmxh
eXM6OmRpZExheW91dChyZW5kZXJlci5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlci5mcmFtZSgpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIgPSByZW5kZXJlci5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgLy8gVGhl
IGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIExheW91
dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlci5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/
IHJlbmRlcmVyLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlci5j
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZs
b2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBh
aW50KTsKKyAgICBpZiAocmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hG
YWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwor
CisgICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBt
X2xheWVyLmJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7CisgICAg
fQorCisgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0Lgor
ICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hl
ZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBp
ZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdl
U2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHND
aGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwobV9sYXll
cik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKG1fbGF5ZXIuY29tcG9zaXRvcigpLmhh
c0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBj
b250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMg
dGhhdCBtYXkgbmVlZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9z
aXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9z
aXRpbmdBbmNlc3RvciA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBv
c2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25z
IHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5n
QW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2
ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21w
b3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAg
IHJldHVybiBtX3Njcm9sbFdpZHRoOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJCb3go
KSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5z
dGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbEhlaWdo
dDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9z
aXRpb24oKQoreworICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3
b3JrIHdpdGggYml0ZmllbGRzLgorICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOworICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1
ZWUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlci5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIuc3R5bGUoKS5tYXJxdWVlQmVo
YXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIuaXNCb3goKSkgewor
ICAgICAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlx
dWU8UmVuZGVyTWFycXVlZT4oJm1fbGF5ZXIpOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bHNPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIuc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIuc2V0
dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
aXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFtX2xheWVyLmlzSW5zaWRlU1ZHRm9y
ZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJG
TE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVy
ZmxvdygpICYmIChyZW5kZXJlci5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8
fCByZW5kZXJlci5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwo
KSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCkKK3sKKyAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7
Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdAoreworICAgIGlmICghbV9sYXllci5pc0NvbXBvc2l0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCktPnNjcm9sbGlu
Z05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxT
Y3JvbGxHZXN0dXJlU3RhdGU+IGdlc3R1cmVTdGF0ZSkKK3sKKyAgICBpZiAoIWlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xs
aW5nTm9kZUlEKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
bV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBzY3JvbGxpbmdDb29yZGluYXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVl
bEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSwgZ2VzdHVyZVN0YXRlKTsKKyAgICB9CisjZW5kaWYK
KworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGlu
Zyh3aGVlbEV2ZW50LCBnZXN0dXJlU3RhdGUpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVj
dEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVj
dEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYg
KHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRl
U2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24o
KTsKKworICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJl
dHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgo
KSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWln
aHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9s
bGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAg
SW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0
KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVp
Z2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0
KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxl
SGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAo
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNj
cm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNl
dC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZz
ZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAg
IHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAg
IHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fbGF5ZXIucmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJl
Y3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9s
bGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJU
b0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJl
Y3QgcmVjdCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQ
b2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBz
Y3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50
Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVu
ZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRl
cmVyKCZyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLnZpc2libGVTaXplKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxX
aWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNp
emUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdp
ZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkp
KTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAg
Y29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZp
c2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFu
Z2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVB
cmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxl
U2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAg
cmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5k
ZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsK
K30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5j
bGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlz
IG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBz
ZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5k
aWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVy
OjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0
byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Ny
b2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250
cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94
UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBh
dXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
KSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Ny
b2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1f
dkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0g
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2
ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAg
ICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxT
Y3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNp
emVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJs
YXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xs
YmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXpl
ID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAg
ICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgewor
ICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Owor
ICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Cisg
ICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAg
ICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lk
dGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFj
dChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhv
cml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsK
KyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAg
ICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
CisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwor
CisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBi
b3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4
WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3Ju
ZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNv
cm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNv
cm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAg
ICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAg
ICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlj
a25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJ
bnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93
Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92
QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0
byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0
ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICgh
Ym94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7
CisgICAgYm94LT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1f
cmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQor
CitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5
U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQor
CitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYg
KHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAg
ICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Cisg
ICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAg
ICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBh
Z2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVh
c2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAg
IHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAg
ICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRy
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNT
Y3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxh
c3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVy
QmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0
eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAg
ICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIp
OworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNl
dEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1
c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRl
IHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAg
ICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJh
ci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhh
c1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJh
cihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxh
c3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGlu
Z3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3Jv
bGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Cisj
ZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVB
cmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwor
I2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNh
biBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1
cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisg
ICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAg
bV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpO
bykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZv
ciAoYXV0byogbmV4dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0
TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxl
dmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZs
b3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYm
IChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hv
dWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9o
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigp
LnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBv
ZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVy
LmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVy
Qm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxT
Y3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7
CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7
CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIp
OworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXpl
cikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25z
dAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlv
dXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gt
PmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1Jl
Y3QueSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJm
bG93Qm90dG9tKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94
ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gt
PmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92
ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7Cisg
ICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwor
CisgICAgbV9zY3JvbGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZs
b3dMZWZ0KCkpOworICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRv
bSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50
IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+
Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxl
ZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7Cisg
ICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNj
cm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1Zl
cnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZ
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
KworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJv
eCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQo
bV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Ny
b2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1go
KSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHls
ZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3Zl
cmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxl
RGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9s
bGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09
IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZs
b3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xp
a2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRv
U3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNl
c092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpB
dXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisg
ICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMg
c28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6
b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wg
aGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAg
IC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0
byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIu
c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxl
ZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAg
IG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9s
bGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Ny
b2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxv
dyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIo
KSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9s
bEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBp
ZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAg
ICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwor
ICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkK
KyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cp
OworCisgICAgICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAg
ICByZW5kZXJlci5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxh
eW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAg
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5k
ZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9I
b3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAg
ICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5w
YXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAm
JiByZW5kZXJlci5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVC
b3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJC
b3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9s
aW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0g
cm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBT
Y3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9o
QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9Cisg
ICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChi
b3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpw
YWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFBy
b3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBk
YXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8
IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxl
ZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVl
OworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgp
OworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNl
bGZQYWludGluZ0xheWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8v
IEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBw
cm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRp
ZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0
IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhp
cyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFj
ayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9s
bE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxl
ZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUg
d2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQg
d291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEg
dGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFt
cGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlm
CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAo
b3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAg
aWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0Nv
bXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBv
c2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RS
ZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9s
bGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMo
bG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXpl
ci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3Zl
cmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAv
LyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAg
IHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVy
Zmxvdy4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVy
bGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0
cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcg
ZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwg
dGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8g
dGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3Mg
dGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRo
ZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRo
YXQgdGhlCisgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBS
ZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5
U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVj
ZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRv
IGxheWVycy4KKyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJl
Y3Q7CisgICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAg
ICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0g
bV9sYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRp
bmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVy
KCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+
c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20g
Q1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYm
ICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVy
bGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMg
aWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcg
bGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxh
eW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0
aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisK
KyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmln
aHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVj
dCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3Vy
IHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9l
c24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94Lgor
ICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFn
ZVJlY3QpOworCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBv
biB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQor
eworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0
Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAg
bV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1Jl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
YWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVl
ZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xs
Q29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVy
SW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJl
ci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsK
KyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAg
ICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVm
KCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7
CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsK
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNp
emVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJl
c2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEu
MCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVy
UmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1h
Z2UsIGltYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFp
bnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJl
c2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJz
UmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50
cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50
b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNp
emVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgx
cHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAv
LyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhp
cyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBt
X2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAg
TGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2Vy
Q29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxh
cmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBl
ZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1f
dkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCBy
ZXNpemVDb250cm9sUmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsK
KyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0
ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3Vs
dC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAg
ICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZv
Y3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2Uo
KTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5k
IHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Piht
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgp
LT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBt
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9m
ZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBh
ZGRpbmdCb3hSZWN0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9s
bGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1f
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNs
b3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1
YnRyZWVQYWludFJvb3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGlu
Z0luZm8sIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xs
YmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkg
Y29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29u
c3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7
CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hS
ZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigp
IC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0
KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBy
ZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZy
YWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSBy
ZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBm
b3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFn
bWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIp
OworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRp
b24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xh
eW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZv
clNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cg
YXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJv
eCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBw
YXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBh
cnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5
bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCku
b3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3Jv
bGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFs
U2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jp
em9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCks
IEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIg
PSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJh
cikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9s
bGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Ny
b2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xs
YmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxi
YXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4g
c3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNl
ZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFy
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVu
YWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIg
JiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwg
JiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5h
YmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAg
IHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3co
KSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZy
YW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAg
Ym9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7
CisgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUo
KS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5y
ZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisK
KyAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVz
dDsKKyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEo
dGhpcykpOworCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1l
Vmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcu
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJm
bG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRl
ZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAg
ICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAg
IH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Cisj
ZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxD
b3JuZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcik7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAo
KSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNj
cm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKwor
ICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1f
c2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVy
ZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJl
bmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmlu
aXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0
U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOwor
ICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0g
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRl
cmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRv
U3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDog
bnVsbHB0cjsKKworICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAg
IG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVy
LmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVu
ZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVy
LT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5
bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpy
ZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNp
emVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVz
aXplci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRl
ZFN0eWxlKCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdl
ZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cisg
ICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsK
K30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91
Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0
IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1l
bnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcg
PSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJz
LgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXll
ci5iYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50
IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMg
aW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxs
YS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwj
ODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3Rl
ZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVk
RGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1
c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAx
OworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsK
K30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50
U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShk
ZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RL
bm93bk1vdXNlUG9zaXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxh
c3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1v
dXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAg
IHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93
bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDAp
CisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247
CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24g
LSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBm
b3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0
YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRl
bHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXllci5hbGxv
d3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRl
ckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3Jv
bGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShy
b3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRT
Y3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAg
IFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
c2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCwgb3B0aW9ucyk7CisgICAgICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRT
Y3JvbGxPZmZzZXQ7CisgICAgICAgIGF1dG8gbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQgPSBsb2Nh
bEV4cG9zZVJlY3Q7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkLm1vdmUoLXNjcm9s
bE9mZnNldERpZmZlcmVuY2UpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChib3gtPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3RTY3JvbGxl
ZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Ny
b2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIucGFyZW50KCkpCisg
ICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUo
KS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci5oYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBu
ZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxU
b09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAg
ICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXll
ciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBz
Y3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3
U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Ny
b2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyLnBhcmVudCgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJl
bWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKworICAgICAgICAgICAgcmVuZGVy
ZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJl
IGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xs
ZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2gg
bWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisg
ICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAg
ICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0
IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBm
cmFtZXMgb3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAg
ICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsK
KworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgp
Cit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Cisg
ICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAg
ICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgp
LCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRo
ZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUg
dGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3Rv
cldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5p
bWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
Y29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxh
eWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rl
c2NyaXB0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCmluZGV4IDZk
OWNkZWMyMjU1NzZjMDkxMWUyZTIwMTE4MDc3MmFmMDBlOTA1NDkuLjMwYWE0MWYxY2IyNWQyYjNk
OGY1MzNhMjdlNDgzYzgzN2NkNTk2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtNDksMTcgKzQ5LDI1MiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBNYXJrIGFzICdmaW5hbCcgb25jZSB0
aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGxhbmRzLgotY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYSA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJNYXJxdWVlOwor
CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDogcHVibGljIFNjcm9sbGFi
bGVBcmVhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJik7CiAgICAgdmlydHVh
bCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogCisgICAgUmVuZGVyTGF5ZXImIGxheWVy
KCkgeyByZXR1cm4gbV9sYXllcjsgfQorCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQgdXBkYXRlTWFycXVlZVBv
c2l0aW9uKCk7CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisKKyAgICB2b2lk
IHN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQor
ICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAg
IHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5k
aWYKKworICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9s
bFBvc2l0aW9uPik7CisgICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVl
ZGVkKCk7CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsSGVp
Z2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2lu
dCYpOworCisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3Jv
bGwgdGhlaXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IElu
dFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmID0gU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWMoKSk7CisgICAgdm9pZCBzY3JvbGxUb1hQ
b3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7CisgICAg
dm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VP
cHRpb25zJik7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlv
biYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworCisgICAgLy8gVGhlc2Ug
YXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4
KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBT
Y3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgp
KTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9w
dGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQorCisgICAgYm9vbCBzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0K
KyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxT
Y3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsK
KyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9s
bGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRl
c3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRy
dWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1Jl
Y29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291
bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUg
aXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBh
Y3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8t
ZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNv
bnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAg
ICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1
YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xs
YWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXpl
Q2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9y
aXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZl
cnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xs
UG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBv
c2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xs
YWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+KSBmaW5hbDsKKyAgICBib29sIGlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBl
YXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBoYW5kbGVU
b3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBm
aW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOworI2VuZGlmCisKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5h
bDsKKworICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOworCiAgICAgYm9vbCBzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWw7CiAKKyAg
ICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0
JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3Ju
ZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2lu
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsK
KyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29s
IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wg
dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Nj
cm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworICAgIFN0
cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRTaXplIHZpc2li
bGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQ
b3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0
ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5
b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0
b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExh
eW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJm
bG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9v
bCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBO
T1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3Jv
bGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zm
c2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmLCBjb25zdCBMYXlvdXRSZWN0JiByZXZl
YWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpOworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAg
dm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJT
dHlsZSgpOworCiBwcml2YXRlOgorICAgIC8vIE1pbmltdW0gcGFkZGluZyBvbiB4ODZfNjQgKDQg
Ynl0ZXMpLCBhZnRlciBtX3Njcm9sbEhlaWdodCkKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29s
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKyAgICBib29sIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gOiAxOworCisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4K
KyAgICBpbnQgbV9zY3JvbGxXaWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKICAgICBS
ZW5kZXJMYXllciYgbV9sYXllcjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9u
OworICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bjsKKworICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Yg
c2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNj
cm9sbGJhcj4gbV92QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0OworCisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29y
bmVyIGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Nj
cm9sbENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVy
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNl
ZCBmb3IgPG1hcnF1ZWU+LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDJkMDgyNjQ4N2NjMGQwNzhi
Y2NhOGU4ZGM1ZmI5MjFlYWVmNGY0NGYuLjJjNmEwNGIwZmMyODgyOTFkYTYzNTlhMjZhMDA5ZGQ3
MGZkZDE2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgz
LDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDE1
NDcxNzRlNzQyMWI4YmNmYTlmODczM2RjYjM4YTdlZjVlOTc1ZTEuLmMxZTY0NDNjMzgyZTJhMzAx
YWVjNzE5ZGQ3ZGE2Mjc0ZmYzNWUyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJl
bmRlck9iamVjdDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9h
dAogc3RhdGljIHZvaWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0p
CiB7CiAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5s
aW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEsp
eSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQs
IGhhcyhMKWF5ZXIsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91
dCI7CisgICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSli
c29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxv
dyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMp
Y3JvbGxhYmxlQXJlYSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5
b3V0IjsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNiwxMCArMTExNiwxNCBA
QCB2b2lkIFJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVh
bSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0i
OwogCi0gICAgaWYgKGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAg
c3RyZWFtIDw8ICJMIjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Ny
b2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8
PCAiLS0iOwogCiAgICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMi
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGQzYTY2NzFjNjdh
YzFkOTM0YWY2YjJlZjRkN2ZlZDBjZmZmOTMwN2QuLjk4MWFiYzBlNDYzMjk3NDBhZGY0YTAwNzBm
MDg5ZjVhNTI2MzZlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
QEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1h
Z2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3Vs
ZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0
b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVj
dG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGY4YmQxMTNhOTg2YjAz
Nzg4N2I2MDFlZGZlZWNmNWE0MmQyYWNlNzIuLjRmMzFiZDgzODBmMDA2NDVhMGQ1ODNkODEwMGE2
YmM2YmI2OTc1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2
ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCkBAIC0xODM4LDcgKzE4MzksOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91Ygog
ICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94Lmxh
eWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg2NCw4
ICsyODY2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3Jv
bGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVu
ZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRv
d25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlw
ZUVycm9yIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417666</attachid>
            <date>2021-01-14 16:12:31 -0800</date>
            <delta_ts>2021-01-16 16:28:29 -0800</delta_ts>
            <desc>Patch, v23</desc>
            <filename>bug-60305-20210115011229.patch</filename>
            <type>text/plain</type>
            <size>248760</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNkMTc2ZGVlYmQ4ODEy
NzI3OTlhM2EwY2YyMjUyMjExZDkxMzcxNC4uNDU5N2ZjMDVkODIzMjcyYWQ1MWExNjRkODdhY2Ex
MmNiZWQ0YjM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2NCBAQAorMjAyMS0wMS0xNCAgTmlr
b2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AaWdhbGlhLmNvbT4KKworICAgICAgICBTZXBh
cmF0ZSBzY3JvbGxpbmcgY29kZSBvdXQgb2YgUmVuZGVyTGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBhbGwgc2Nyb2xsaW5nL292ZXJmbG93
IGhhbmRsaW5nIG91dCBvZiBSZW5kZXJMYXllciwgdG8KKyAgICAgICAgc3RyZWFtbGluZSBpdHMg
aW50ZXJmYWNlIGFuZCBtYWtlIGl0IHJlLXVzYWJsZSBmb3IgbGF5ZXIKKyAgICAgICAgdHlwZXMg
dGhhdCBkbyBub3QgbmVlZCBub3Igc3VwcG9ydCBzY3JvbGxpbmcvb3ZlcmZsb3cuCisKKyAgICAg
ICAgTWFueSB2YXJpYWJsZXMgdHJhY2tpbmcgc2Nyb2xsaW5nL292ZXJmbG93IHN0YXRlIHdlcmUg
bWlncmF0ZWQgdG8KKyAgICAgICAgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSwgd2hpY2ggaXMg
b25seSBjcmVhdGVkIGlmIHRoZSByZW5kZXJlcgorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRo
ZSBsYXllciBoYXMgYSBDU1MgJ3Jlc2l6ZScgcHJvcGVydHkgIT0gJ25vbmUnLAorICAgICAgICBo
YXMgcG90ZW50aWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdyBjb250ZW50IG9yIDxtYXJxdWVlPi4K
KworICAgICAgICBGb3IgdGhlIGNvbW1vbiBjYXNlIChubyBzY3JvbGxhYmxlIG92ZXJmbG93KSwg
dGhlIFJlbmRlckxheWVyCisgICAgICAgIG92ZXJoZWFkIGlzIHJlZHVjZWQ6IGxlc3MgbWVtb3J5
LCBsZXNzIHN0YXRlIHRyYWNraW5nLgorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVz
dHMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE1ha2Ug
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCisgICAgICAgIGluY2x1ZGUgd29yayBpbiBXZWJL
aXQgcHJvamVjdC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwOiBBZGFwdCB0byB0aGUgZmFjdCB0aGF0CisgICAgICAgIFJlbmRlckxheWVyIGlz
IG5vIGxvbmdlciBhIFNjcm9sbGFibGVBcmVhLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6Z2V0U2Nyb2xsYWJsZUFyZWFJZlNjcm9sbGFibGUgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDogQWRhcHQgdG8gdGhlIGZhY3Qg
dGhhdCBSZW5kZXJMYXllciBpcworICAgICAgICBubyBsb25nZXIgYSBTY3JvbGxhYmxlQXJlYS4K
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudEluQXBwcm9wcmlhdGVFbmNsb3NpbmdC
b3gpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVZpZXc6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhIGNvbnN0KToKKyAgICAgICAg
KiBwYWdlL2lvcy9GcmFtZUlPUy5tbTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
b3ZlcmZsb3dTY3JvbGxQb3NpdGlvbkNoYW5nZWRGb3JOb2RlKToKKyAgICAgICAgKiBwYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlQXJlYUZv
ckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEgY29uc3QpOiBE
ZWNpZGVzCisgICAgICAgIHdoZXRoZXIgYSBSZW5kZXJMYXllciBuZWVkcyBhIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWEuIFRoZSBwcmVzZW5jZQorICAgICAgICBvZiByZXNpemUvbWFycXVlZS9v
dmVyZmxvdyB0cmlnZ2VycyBjcmVhdGlvbiBvZiBhCisgICAgICAgIFJlbmRlckxheWVyU2Nyb2xs
YWJsZUFyZWEgb2JqZWN0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOiBNb3ZlIGFsbCBvdmVyZmxvdy9yZXNpemUv
bWFycXVlZS9zY3JvbGwKKyAgICAgICAgaGFuZGxpbmcgdG8gUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYSBhbmQgYWRhcHQgdGhlIGFmZmVjdGVkIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6UmVuZGVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y3VycmVudFNjcm9s
bFR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbEFuaW1h
dG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxPZmZzZXQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxUb1hQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjpzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldEFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0U2Nyb2xsU2hvdWxk
Q2xlYXJMYXRjaGVkU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNob3Vs
ZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVBbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6bWFycXVlZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlv
bnNBZnRlckRvY3VtZW50U2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
cGFpbnRPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpw
YWludFJlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xs
Q29ybmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJsYXlTY3Jv
bGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpyZWFjaGFibGVUb3RhbENv
bnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpv
bnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxi
YXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3Jv
bGxiYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Ny
b2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxpbmdN
YXlSZXZlYWxCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
OjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhl
aWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3Np
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b25zQWZ0ZXJTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVuY2xvc2luZ0Zy
YW1lUmVuZGVyTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6ZnJhbWVFbGVtZW50QW5kVmlld1Blcm1pdFNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6YWxsb3dzQ3VycmVudFNjcm9sbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp2
aXNpYmxlU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6b3ZlcmZs
b3dDb250cm9sc1JlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpk
ZWJ1Z0Rlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpv
ZmZzZXRGcm9tUmVzaXplQ29ybmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyOjpzY3JvbGxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
c2Nyb2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRh
dGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OmNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3cgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6Omhhc092ZXJsYXlTY3JvbGxiYXJzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGluZyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJv
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXllckNvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludE92ZXJmbG93Q29udHJv
bHNGb3JGcmFnbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6aGFzU2Nyb2xsYmFycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllcjo6aGFzSG9yaXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6aGFzVmVydGljYWxTY3JvbGxiYXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvWE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6c2Nyb2xsVG9ZT2Zmc2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcDogQWRhcHQgdG8gdGhlIGZhY3QgdGhhdAorICAgICAgICBSZW5kZXJM
YXllciBpcyBubyBsb25nZXIgYSBTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlT3ZlcmZsb3dDb250cm9sc0xheWVycyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHA6IEFkYXB0IHRvIHRoZSBmYWN0
IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8gbG9uZ2VyIGEgU2Nyb2xsYWJsZUFyZWEu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0aXZl
U2Nyb2xsYWJsZVJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yU2Nyb2xsaW5nUm9sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5n
Tm9kZUlEIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5jcHA6IEFkYXB0IHRvIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgUmVuZGVyTGF5ZXIgaXMgbm8g
bG9uZ2VyIGEgU2Nyb2xsYWJsZUFyZWEuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1v
ZGVsT2JqZWN0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWEuY3BwOiBNb3N0bHkgbW92ZWQgZnJvbQorICAgICAgICBSZW5kZXJM
YXllci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6flJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVy
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9y
U2Nyb2xsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc1J1YmJlckJhbmRJ
blByb2dyZXNzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojp1c2VzQXN5bmNTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmFwcGx5UG9zdExheW91dFNjcm9s
bFBvc2l0aW9uSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6c2Nyb2xsVG9YUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xhbXBTY3JvbGxPZmZzZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVxdWVz
dFNjcm9sbFBvc2l0aW9uVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsV2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Ny
b2xsSGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbHNPdmVyZmxvdyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxpbmdOb2RlSUQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9s
bGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp2aXNp
YmxlQ29udGVudFJlY3RJbnRlcm5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpvdmVyaGFuZ0Ftb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29y
bmVyVmlzaWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnZpc2libGVTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbnRlbnRzU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpyZWFjaGFibGVUb3RhbENvbnRl
bnRzU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGlkU3Rh
cnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
ZGlkRW5kU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmRpZFVwZGF0ZVNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsYmFyT2Zmc2V0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJh
ckhpZGRlbkJ5U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRlcmVyRm9yU2Nyb2xsYmFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNj
cm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpk
ZXN0cm95U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJs
ZUFyZWEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNPdmVyZmxvd0NvbnRyb2xz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd1RvcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0JvdHRvbSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpj
b21wdXRlU2Nyb2xsRGltZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYXNTY3JvbGxhYmxl
SG9yaXpvbnRhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omhhc0hvcml6b250YWxP
dmVyZmxvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpoYXNWZXJ0aWNhbE92ZXJmbG93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxl
UmVxdWlyZXNTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6c3R5bGVEZWZpbmVzQXV0b21h
dGljU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dDb250cm9s
c0ludGVyc2VjdFJlY3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhaW50T3ZlcmZsb3dDb250cm9scyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludFNjcm9sbENv
cm5lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkcmF3
UGxhdGZvcm1SZXNpemVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6cGFpbnRSZXNpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjppc0FjdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpsYXN0S25vd25Nb3VzZVBvc2l0aW9u
SW5WaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFy
ZWE6OmlzSGFuZGxpbmdXaGVlbEV2ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmlzU2Nyb2xsU25h
cEluUHJvZ3Jlc3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjpoaXRUZXN0UmVzaXplckluRnJhZ21lbnRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9ySG9y
aXpvbnRhbFNjcm9sbGJhciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmxheWVyRm9yU2Nyb2xsQ29ybmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNj
cm9sbGluZ01heVJldmVhbEJhY2tncm91bmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsYmFyc0FmdGVyU3R5bGVDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Ny
b2xsYWJsZUFyZWFTZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6dXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlUmVzaXplclN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNsZWFyUmVzaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVBbGxTY3Jv
bGxiYXJSZWxhdGVkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6YWRqdXN0ZWRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpwYW5TY3JvbGxGcm9tUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsQnlSZWN1cnNpdmVseSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVMYXll
clBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlck92ZXJmbG93U2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNN
b2NrU2Nyb2xsQW5pbWF0b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6bG9nTW9ja1Njcm9sbEFuaW1hdG9yTWVzc2FnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpkZWJ1Z0Rlc2NyaXB0aW9u
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDogQWRhcHQgdG8gdGhlIGZh
Y3QgdGhhdAorICAgICAgICBSZW5kZXJMYXllciBpcyBubyBsb25nZXIgYSBTY3JvbGxhYmxlQXJl
YS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmVuY2xvc2luZ1Njcm9sbGFibGVB
cmVhIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDogQWRkICdT
JyBzdGF0ZSBpbiBkZWJ1ZyBvdXRwdXQsCisgICAgICAgIGluZGljYXRpbmcgd2hldGhlciB0aGUg
UmVuZGVyTGF5ZXIgaGFzIGEgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICAgICAgKFdl
YkNvcmU6Om91dHB1dFJlbmRlclRyZWVMZWdlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjpvdXRwdXRSZW5kZXJPYmplY3QgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogQWRkIGZyaWVuZHNoaXAgd2l0aAorICAgICAgICBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDogQWRhcHQgdG8g
dGhlIGZhY3QgdGhhdAorICAgICAgICBSZW5kZXJMYXllciBpcyBubyBsb25nZXIgYSBTY3JvbGxh
YmxlQXJlYS4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2Nyb2xsQnlTaW11bGF0aW5n
V2hlZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorCiAyMDIxLTAxLTEzICBD
b21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByZXZlcnRpbmcgcjI3MTQwMS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA0MTlhMDkxMTg0MzFiM2JmYmVmNWYwMDY2YzAx
MzA0MjJmMDQ3ZWNmLi5hYzkwNGQzODYwOWQ3ODdhMzE3Nzc1ODg5MTNhOWMyZDUxOWVmMTQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC00MDg1LDYgKzQwODUsNyBAQAogCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVu
ZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUE0ODM3MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODc4MDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRUE0ODM5MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0VBNDg3
QTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODNCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5k
ZXJMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGNTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUzRkI4
NDIxM0I3ODY0MDBDNDBEMzQgLyogUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRUE0ODgwMDk3RDkz
MDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQxMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmpl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlC
Q0VBNDg4NzA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUE0ODQ4MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJUaGVtZU1hYy5oICovOyB9OwogCQlCQ0VBNDg4QTA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVyVGhlbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRUE0ODRCMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNDIyMyw2ICszNDIy
NCw3IEBACiAJCQkJMEY1ODBDRkYwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1ODBDRkQwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRl
ckxheWVyQ29tcG9zaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0MyNDRGRUFBMzc1QUM2MzNG
ODhCRTZGIC8qIFJlbmRlckxheWVyTW9kZWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NTNGQjg0MjEzQjdBNjQwMEM0MEQzNCAvKiBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogUmVuZGVyTGF5b3V0
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBCRTAzMEEyMEYzMTEyRkIwMDNDMUE0NiAvKiBS
ZW5kZXJMaW5lQm94TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NjQwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlckxpbmVCcmVhay5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAppbmRleCAwMjMwMGQ5ODc4NTFhYmEwNGQ3ZDMzZDU2ZDAwYmM2OTAwZmU1YWNjLi4zYzU1
MzI0Zjk2ZGMxMzUwNWY3MTdjNDlkYTg5YThhODZkMTA3YmRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5o
IgpAQCAtMzkwNiw3ICszOTA3LDcgQEAgU2Nyb2xsYWJsZUFyZWEqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmdldFNjcm9sbGFibGVBcmVhSWZTY3JvbGxhYmxlKCkgY29uc3QKICAgICBpZiAo
IWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gYm94LmxheWVyKCk7CisgICAgcmV0dXJuIGJveC5sYXll
cigpID8gYm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCkgOiBudWxscHRyOwogfQogCiB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnNjcm9sbFRvKGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRU
eXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRl
eCAyZGU0M2RhZDVhOWZiNmQ4YzU5MWQ3ZmZmZDQ0ZTFjNDQyNjc4NmEzLi5jMDJhOGQ3NmMyMTBl
Mjc5NDczNWQxZWQzMWEyYWUwM2YzOTMwZDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0
RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMjUzLDkgKzI1NCwxMSBAQCB2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6ZWxlbWVudERpZEJsdXIoKQogICAgIGlmICghaW5uZXJM
YXllcikKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byogaW5uZXJMYXllclNjcm9sbGFibGUg
PSBpbm5lckxheWVyLT5lbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICBib29sIGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24gPSBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU+KCpyZW5kZXJlcikuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0gICAgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID8gMCA6IGlubmVy
TGF5ZXItPnNjcm9sbFdpZHRoKCksIDApOwotICAgIGlubmVyTGF5ZXItPnNjcm9sbFRvT2Zmc2V0
KHNjcm9sbE9mZnNldCk7CisgICAgU2Nyb2xsT2Zmc2V0IHNjcm9sbE9mZnNldChpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID8gMCA6IGlubmVyTGF5ZXJTY3JvbGxhYmxlLT5zY3JvbGxXaWR0aCgpLCAw
KTsKKyAgICBpbm5lckxheWVyU2Nyb2xsYWJsZS0+c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0
KTsKIAogI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQogICAgIGNsb3NlU3VnZ2VzdGlvbnMo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBhOTNlYzU1NTA4OTM2MGQ5
NjIxMGYwNDJkZDJlY2M4M2U3ODlkZjkyLi5kNjlmMjk3MDQ1MzFlNzg3MjU4OGQ0YTVmZjhkM2E1
NGJlMzZlYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC04MCw2ICs4
MCw3IEBACiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJGcmFtZVNldC5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0xODUzLDcg
KzE4NTQsNyBAQCBTY3JvbGxhYmxlQXJlYSogRXZlbnRIYW5kbGVyOjplbmNsb3NpbmdTY3JvbGxh
YmxlQXJlYShOb2RlKiBub2RlKQogCiAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlTGF5ZXIg
PSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkluY2x1
ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8pKSB7CiAgICAgICAgICAgICBpZiAoIXNj
cm9sbGFibGVMYXllci0+aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gc2Nyb2xsYWJsZUxheWVyOworICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5
ZXItPnNjcm9sbGFibGVBcmVhKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI5ODQsNyArMjk4
NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50SW5BcHByb3ByaWF0ZUVu
Y2xvc2luZ0JveChOb2RlKiBzdGFydE5vZGUsIGNvCiAKICAgICBSZW5kZXJCb3gqIGN1cnJlbnRF
bmNsb3NpbmdCb3ggPSAmaW5pdGlhbEVuY2xvc2luZ0JveDsKICAgICB3aGlsZSAoY3VycmVudEVu
Y2xvc2luZ0JveCkgewotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGJveExheWVyID0gY3VycmVu
dEVuY2xvc2luZ0JveC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoYXV0byogYm94TGF5ZXIgPSBj
dXJyZW50RW5jbG9zaW5nQm94LT5sYXllcigpID8gY3VycmVudEVuY2xvc2luZ0JveC0+bGF5ZXIo
KS0+c2Nyb2xsYWJsZUFyZWEoKSA6IG51bGxwdHIpIHsKICAgICAgICAgICAgIGF1dG8gcGxhdGZv
cm1FdmVudCA9IHdoZWVsRXZlbnQudW5kZXJseWluZ1BsYXRmb3JtRXZlbnQoKTsKICAgICAgICAg
ICAgIGJvb2wgc2Nyb2xsaW5nV2FzSGFuZGxlZDsKICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUV2
ZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNDcwZGRjOGZhMjJjOTliY2Rh
NGM4N2I5NzU5NTliMWI4MTk0YWU5OC4uZmMyYjM1Nzg2MzM5MTZmMzQzMmU5MzUyYzFlY2NiMTc3
MDQ0NjVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtODIsNiArODIsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRl
ICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmgiCkBA
IC0zODYzLDcgKzM4NjQsMTEgQEAgU2Nyb2xsYWJsZUFyZWEqIEZyYW1lVmlldzo6ZW5jbG9zaW5n
U2Nyb2xsYWJsZUFyZWEoKSBjb25zdAogICAgIGlmICghbGF5ZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGxheWVyLT5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIoSW5j
bHVkZVNlbGZPck5vdDo6SW5jbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7Cisg
ICAgYXV0byogZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyID0gbGF5ZXItPmVuY2xvc2luZ1Njcm9s
bGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90OjpJbmNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXM6Ok5vKTsKKyAgICBpZiAoIWVuY2xvc2luZ1Njcm9sbGFibGVMYXllcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyLT5z
Y3JvbGxhYmxlQXJlYSgpOwogfQogCiBJbnRSZWN0IEZyYW1lVmlldzo6c2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5k
ZXggMzJkMzJlNTliMjQyNjUyODY3MTBhNWYzZjcwNTNlMTgxNmFkOWUzYi4uYzk3MDg3ZmZlNDVh
NzFhM2I3NWMzZWQxOWVkZTM5MmRhOGZjZjM4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJ
T1MubW0KQEAgLTU3LDYgKzU3LDcgQEAKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5k
ZXJMYXllci5oIgogI2ltcG9ydCAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCisjaW1wb3J0ICJS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyZWREb2N1bWVudE1hcmtl
ci5oIgpAQCAtODE5LDE0ICs4MjAsMTcgQEAgdm9pZCBGcmFtZTo6b3ZlcmZsb3dTY3JvbGxQb3Np
dGlvbkNoYW5nZWRGb3JOb2RlKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgTm9kZSoKICAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aGFzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVuZGVyTGF5ZXImIGxheWVyID0gKmRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0
PigqcmVuZGVyZXIpLmxheWVyKCk7CisgICAgYXV0byogbGF5ZXIgPSBkb3duY2FzdDxSZW5kZXJC
b3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKS5sYXllcigpOworICAgIGlmICghbGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5zdXJlTGF5
ZXJTY3JvbGxhYmxlQXJlYSgpOwogCi0gICAgYXV0byBvbGRTY3JvbGxUeXBlID0gbGF5ZXIuY3Vy
cmVudFNjcm9sbFR5cGUoKTsKLSAgICBsYXllci5zZXRDdXJyZW50U2Nyb2xsVHlwZShpc1VzZXJT
Y3JvbGwgPyBTY3JvbGxUeXBlOjpVc2VyIDogU2Nyb2xsVHlwZTo6UHJvZ3JhbW1hdGljKTsKLSAg
ICBsYXllci5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOwotICAgIGxh
eWVyLnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOworICAgIGF1dG8gb2xkU2Ny
b2xsVHlwZSA9IHNjcm9sbGFibGVMYXllci0+Y3VycmVudFNjcm9sbFR5cGUoKTsKKyAgICBzY3Jv
bGxhYmxlTGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKGlzVXNlclNjcm9sbCA/IFNjcm9sbFR5
cGU6OlVzZXIgOiBTY3JvbGxUeXBlOjpQcm9ncmFtbWF0aWMpOworICAgIHNjcm9sbGFibGVMYXll
ci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKKyAgICBzY3JvbGxh
YmxlTGF5ZXItPnNldEN1cnJlbnRTY3JvbGxUeXBlKG9sZFNjcm9sbFR5cGUpOwogCi0gICAgbGF5
ZXIuZGlkRW5kU2Nyb2xsKCk7IC8vIEZJWE1FOiBTaG91bGQgd2UgYWx3YXlzIGNhbGwgdGhpcz8K
KyAgICBzY3JvbGxhYmxlTGF5ZXItPmRpZEVuZFNjcm9sbCgpOyAvLyBGSVhNRTogU2hvdWxkIHdl
IGFsd2F5cyBjYWxsIHRoaXM/CiB9CiAKIHZvaWQgRnJhbWU6OnJlc2V0QWxsR2VvbG9jYXRpb25Q
ZXJtaXNzaW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpp
bmRleCBmNjQ4ZDZlMjJiMTc2YjM5NzIyNmJmNjk5NGNjNmI4NGQwMjJlOGZjLi4xZDRjODYxMTc2
ZmVkZWYyMDY0ZTIyMDIzNjM5MDE0NTYzODQxZDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9t
YWMvRXZlbnRIYW5kbGVyTWFjLm1tCkBAIC01NCw2ICs1NCw3IEBACiAjaW1wb3J0ICJQbGF0Zm9y
bVdoZWVsRXZlbnQuaCIKICNpbXBvcnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJMYXllci5o
IgorI2ltcG9ydCAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2ltcG9ydCAiUmVuZGVy
TGlzdEJveC5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiUmVuZGVyV2lkZ2V0
LmgiCkBAIC03OTEsNyArNzkyLDEyIEBAIHN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJs
ZUFyZWFGb3JCb3goUmVuZGVyQm94JiBib3gpCiAgICAgaWYgKGlzPFJlbmRlckxpc3RCb3g+KGJv
eCkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0Qm94PigmYm94KTsKIAotICAg
IHJldHVybiBib3gubGF5ZXIoKTsKKyAgICBpZiAoYm94LmxheWVyKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxlQXJlYSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAogLy8gRklYTUU6IFRoaXMgY291bGQgYmUgd3JpdHRlbiBpbiB0ZXJtcyBv
ZiBTY3JvbGxhYmxlQXJlYTo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUFyZWEoKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNmI5YzExNjZlOTdiMzljMjJlZjI3ODNjMmMw
MmVmNjdkMmE5M2NlZC4uMDZmNWMyNWZhNDQwOGQ1NGIyNDE2YTE3MWQyMTk0MzVjNGIxN2E0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTkyMSw2ICs5MjEsMjcg
QEAgYm9vbCBSZW5kZXJCb3g6OmlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVCb3goKSBjb25z
dAogICAgIHJldHVybiBjYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKTsKIH0KIAor
Ym9vbCBSZW5kZXJCb3g6OnJlcXVpcmVzTGF5ZXJXaXRoU2Nyb2xsYWJsZUFyZWEoKSBjb25zdAor
eworICAgIC8vIFRoZSBSZW5kZXJWaWV3IGlzIGFsd2F5cyBleHBlY3RlZCB0byBiZSBwb3RlbnRp
YWxseSBzY3JvbGxhYmxlLgorICAgIGlmIChpc1JlbmRlclZpZXcoKSB8fCBpc0RvY3VtZW50RWxl
bWVudFJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gT3ZlcmZsb3cg
aGFuZGxpbmcgbmVlZHMgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS4KKyAgICBpZiAoc2Nyb2xs
c092ZXJmbG93KCkgfHwgaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzVmVydGljYWxPdmVy
ZmxvdygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIFJlc2l6ZSBoYW5kbGluZyBu
ZWVkcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLgorICAgIGlmIChzdHlsZSgpLnJlc2l6ZSgp
ICE9IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBNYXJxdWVl
IGhhbmRsaW5nIG5lZWRzIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuCisgICAgaWYgKGlzSFRN
TE1hcnF1ZWUoKSAmJiBzdHlsZSgpLm1hcnF1ZWVCZWhhdmlvcigpICE9IE1hcnF1ZWVCZWhhdmlv
cjo6Tm9uZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IC8vIEZJWE1FOiBUaGlzIGlzIGJhZGx5IG5hbWVkLiBvdmVyZmxvdzpoaWRkZW4gY2FuIGJlIHBy
b2dyYW1tYXRpY2FsbHkgc2Nyb2xsZWQsIHlldCB0aGlzIHJldHVybnMgZmFsc2UgaW4gdGhhdCBj
YXNlLgogYm9vbCBSZW5kZXJCb3g6OmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKSBjb25z
dAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCmluZGV4IDYwNGVhOWE1ZDc3ZWJh
MjY2YWY1NTQ0OThiNTM5YzA4ZDRiMmM0M2EuLjBmYjg3M2QyNjE5ZTE1ZWU2MjkwNDg3NjczNzIx
MDZhNzEzYjI1OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKQEAgLTU3LDYg
KzU3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgfHwgIXN0eWxlKCkuaGFzQXV0b1VzZWRaSW5k
ZXgoKSB8fCBoYXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25zKCk7CiAgICAgfQogCisgICAg
Ym9vbCByZXF1aXJlc0xheWVyV2l0aFNjcm9sbGFibGVBcmVhKCkgY29uc3Q7CiAgICAgYm9vbCBi
YWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxS
ZWN0KSBjb25zdCBmaW5hbDsKICAgICAKICAgICAvLyBSZXR1cm5zIGZhbHNlIGZvciB0aGUgYm9k
eSByZW5kZXJlciBpZiBpdHMgYmFja2dyb3VuZCBpcyBwcm9wYWdhdGVkIHRvIHRoZSByb290Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggMzNmOGU2YzlkMDVl
YjUxNWY0Mjk1NzFlY2NiMjkzZGExZGU3ZDhhYi4uOTM2NWU3ODA0MmUzODkwZmQ1NmUyNjZmNjhm
OWM4NDhjN2Q0OTdjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxOSBBZG9iZS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAyMCBJZ2FsaWEgUy5MLgogICoK
ICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUgQ29tbXVuaWNhdGlv
bnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtOTcsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1
ZGUgIlJlbmRlckxheWVyRmlsdGVycy5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWEuaCIKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5oIgpAQCAtMzAxLDE4ICsz
MDMsMTUgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVyTW9kZWxPYmplY3Qm
IHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1fbm9ybWFsRmxvd0xpc3REaXJ0eSh0
cnVlKQogICAgICwgbV9oYWROZWdhdGl2ZVpPcmRlckxpc3QoZmFsc2UpCiAgICAgLCBtX2luUmVz
aXplTW9kZShmYWxzZSkKLSAgICAsIG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KHRydWUpCiAgICAg
LCBtX2hhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFudChmYWxzZSkKICAgICAsIG1faGFzU2Vs
ZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50RGlydHkoZmFsc2UpCiAgICAgLCBtX3VzZWRUcmFuc3Bh
cmVuY3koZmFsc2UpCiAgICAgLCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbihmYWxzZSkKLSAg
ICAsIG1faW5PdmVyZmxvd1JlbGF5b3V0KGZhbHNlKQogICAgICwgbV9yZXBhaW50U3RhdHVzKE5l
ZWRzTm9ybWFsUmVwYWludCkKICAgICAsIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0eSh0cnVl
KQogICAgICwgbV9oYXNWaXNpYmxlQ29udGVudChmYWxzZSkKICAgICAsIG1fdmlzaWJsZURlc2Nl
bmRhbnRTdGF0dXNEaXJ0eShmYWxzZSkKICAgICAsIG1faGFzVmlzaWJsZURlc2NlbmRhbnQoZmFs
c2UpCi0gICAgLCBtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYShmYWxzZSkKICAgICAsIG1faXNG
aXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0KGZhbHNlKQogICAgICwgbV9iZWhhdmVzQXNGaXhlZChm
YWxzZSkKICAgICAsIG1fM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXNEaXJ0eSh0cnVlKQpA
QCAtMzIwLDIxICszMTksMTEgQEAgUmVuZGVyTGF5ZXI6OlJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmIHJlbmRlcmVyTGF5ZXJNb2RlbE9iamVjdCkKICAgICAsIG1faGFzQ29tcG9z
aXRpbmdEZXNjZW5kYW50KGZhbHNlKQogICAgICwgbV9oYXNDb21wb3NpdGVkTm9uQ29udGFpbmVk
RGVzY2VuZGFudHMoZmFsc2UpCiAgICAgLCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3Rv
cihmYWxzZSkKLSAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyhmYWxzZSkK
ICAgICAsIG1faGFzVHJhbnNmb3JtZWRBbmNlc3RvcihmYWxzZSkKICAgICAsIG1faGFzM0RUcmFu
c2Zvcm1lZEFuY2VzdG9yKGZhbHNlKQogICAgICwgbV9pbnNpZGVTVkdGb3JlaWduT2JqZWN0KGZh
bHNlKQogICAgICwgbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKHN0YXRpY19jYXN0PHVuc2ln
bmVkPihJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOjpOb25lKSkKICAgICAsIG1fdmlld3BvcnRD
b25zdHJhaW5lZE5vdENvbXBvc2l0ZWRSZWFzb24oTm9Ob3RDb21wb3NpdGVkUmVhc29uKQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAg
LCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZyhmYWxzZSkKLSNl
bmRpZgotICAgICwgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpCi0jZW5k
aWYKLSAgICAsIG1fcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGZhbHNlKQot
ICAgICwgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgLCBtX3Vw
ZGF0aW5nTWFycXVlZVBvc2l0aW9uKGZhbHNlKQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgLCBt
X2xheWVyTGlzdE11dGF0aW9uQWxsb3dlZCh0cnVlKQogI2VuZGlmCkBAIC0zNTgsMTYgKzM0Nyw2
IEBAIFJlbmRlckxheWVyOjpSZW5kZXJMYXllcihSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5k
ZXJlckxheWVyTW9kZWxPYmplY3QpCiAgICAgICAgIG1fdmlzaWJsZUNvbnRlbnRTdGF0dXNEaXJ0
eSA9IGZhbHNlOwogICAgICAgICBtX2hhc1Zpc2libGVDb250ZW50ID0gcmVuZGVyZXIoKS5zdHls
ZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAgIH0KLQotICAgIGlm
IChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIoKS5lbGVtZW50KCkpIHsKLSAgICAgICAgLy8g
V2Ugc2F2ZSBhbmQgcmVzdG9yZSBvbmx5IHRoZSBzY3JvbGxPZmZzZXQgYXMgdGhlIG90aGVyIHNj
cm9sbCB2YWx1ZXMgYXJlIHJlY2FsY3VsYXRlZC4KLSAgICAgICAgaWYgKHJlbmRlckJveCgpKSB7
Ci0gICAgICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNjcm9s
bFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkp
Ci0gICAgICAgICAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5zZXRDdXJyZW50UG9zaXRpb24obV9z
Y3JvbGxQb3NpdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC0+c2V0U2F2ZWRMYXll
clNjcm9sbFBvc2l0aW9uKEludFBvaW50KCkpOwotICAgIH0KIH0KIAogUmVuZGVyTGF5ZXI6On5S
ZW5kZXJMYXllcigpCkBAIC0zNzUsMjkgKzM1NCwxMCBAQCBSZW5kZXJMYXllcjo6flJlbmRlckxh
eWVyKCkKICAgICBpZiAoaW5SZXNpemVNb2RlKCkpCiAgICAgICAgIHJlbmRlcmVyKCkuZnJhbWUo
KS5ldmVudEhhbmRsZXIoKS5yZXNpemVMYXllckRlc3Ryb3llZCgpOwogCi0gICAgQVNTRVJUKG1f
cmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygp
LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOwotCi0gICAgaWYgKG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhKQotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5yZW1v
dmVTY3JvbGxhYmxlQXJlYSh0aGlzKTsKLQotI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQot
ICAgIHVucmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOwotI2VuZGlm
Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAg
ICAgZWxlbWVudC0+c2V0U2F2ZWRMYXllclNjcm9sbFBvc2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24p
OwotCi0gICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBkZXN0
cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Nyb2xsYmFyKTsKLQotICAgIGlmIChhdXRvKiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IHJlbmRlcmVyKCkucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
Ci0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9sbGFibGVBcmVh
KCp0aGlzKTsKLQogICAgIGlmIChtX3JlZmxlY3Rpb24pCiAgICAgICAgIHJlbW92ZVJlZmxlY3Rp
b24oKTsKIAotICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgY2xlYXJSZXNpemVyKCk7Ci0K
KyAgICBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKICAgICBjbGVhckxheWVyRmlsdGVycygp
OwogCiAgICAgaWYgKHBhaW50c0ludG9Qcm92aWRlZEJhY2tpbmcoKSkgewpAQCAtNDE2LDYgKzM3
NiwyNDggQEAgUmVuZGVyTGF5ZXI6On5SZW5kZXJMYXllcigpCiAgICAgUkVMRUFTRV9BU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ry
b3llZCgpIHx8ICFmaXJzdENoaWxkKCkpOwogfQogCisvLyBTdGFydCBvZiB0ZW1wb3JhcnkgZ2x1
ZSBjb2RlIHRvIGhlbHAgbGFuZGluZyB3ZWJraXQub3JnL2IvNjAzMDUgKHNwbGl0IFJlbmRlckxh
eWVyIGludG8gUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSkKK1Njcm9sbFR5
cGUgUmVuZGVyTGF5ZXI6OmN1cnJlbnRTY3JvbGxUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmN1cnJlbnRT
Y3JvbGxUeXBlKCk7CisgICAgcmV0dXJuIFNjcm9sbFR5cGU6OlVzZXI7Cit9CisKK1Njcm9sbEFu
aW1hdG9yJiBSZW5kZXJMYXllcjo6c2Nyb2xsQW5pbWF0b3IoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdF9jYXN0PFJlbmRlckxheWVyKj4odGhpcyktPmVuc3VyZUxheWVyU2Nyb2xsYWJsZUFy
ZWEoKS0+c2Nyb2xsQW5pbWF0b3IoKTsKK30KKworU2Nyb2xsT2Zmc2V0IFJlbmRlckxheWVyOjpz
Y3JvbGxPZmZzZXQoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAg
ICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0dXJuIHsg
MCwgMCB9OworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChjb25zdCBTY3Jv
bGxPZmZzZXQmIHNjcm9sbE9mZnNldCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25z
JiBvcHRpb25zKQoreworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9P
ZmZzZXQoc2Nyb2xsT2Zmc2V0LCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG9YUG9zaXRpb24oaW50IHgsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9sbFRvWFBv
c2l0aW9uKHgsIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3Np
dGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQor
eworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9ZUG9zaXRpb24oeSwg
b3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0
IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+c2V0U2Ny
b2xsUG9zaXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpz
Y3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IEludFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoq
IHNjcm9sbGVkQXJlYSkKK3sKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCktPnNjcm9s
bEJ5UmVjdXJzaXZlbHkoZGVsdGEsIHNjcm9sbGVkQXJlYSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihib29sIHJlcXVpcmVz
UmVjb25jaWxpYXRpb24pCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1f
c2Nyb2xsYWJsZUFyZWEtPnNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbihy
ZXF1aXJlc1JlY29uY2lsaWF0aW9uKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2
b2lkIFJlbmRlckxheWVyOjpzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcpCit7CisgICAgZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpLT5zZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYWRqdXN0Rm9ySU9T
Q2FyZXRXaGVuU2Nyb2xsaW5nKTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlckxheWVyOjpzZXRT
Y3JvbGxTaG91bGRDbGVhckxhdGNoZWRTdGF0ZShib29sIHNob3VsZENsZWFyKQoreworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRTY3JvbGxT
aG91bGRDbGVhckxhdGNoZWRTdGF0ZShzaG91bGRDbGVhcik7Cit9CisKK2Jvb2wgUmVuZGVyTGF5
ZXI6OnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSBjb25zdAorewor
ICAgIHJldHVybiByZW5kZXJlcigpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0
dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycygpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5oYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZUFuY2VzdG9yKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitSZW5kZXJNYXJxdWVlKiBS
ZW5kZXJMYXllcjo6bWFycXVlZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEp
CisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5tYXJxdWVlKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0
ZXJEb2N1bWVudFNjcm9sbCgpCit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAg
IG1fc2Nyb2xsYWJsZUFyZWEtPnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJEb2N1bWVudFNjcm9s
bCgpOworfQorCitib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQoreworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+aGl0
VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBsb2NhbFBvaW50KTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scykKK3sKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYS0+cGFpbnRPdmVyZmxvd0Nv
bnRyb2xzKGNvbnRleHQsIHBvaW50LCBkYW1hZ2VSZWN0LCBwYWludGluZ092ZXJsYXlDb250cm9s
cyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXplcihHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgY29uc3QgTGF5b3V0UmVjdCYgZGFt
YWdlUmVjdCkKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgbV9zY3JvbGxh
YmxlQXJlYS0+cGFpbnRSZXNpemVyKGNvbnRleHQsIHBvaW50LCBkYW1hZ2VSZWN0KTsKK30KKwor
dm9pZCBSZW5kZXJMYXllcjo6cGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCit7
CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBh
aW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIHBvaW50LCBkYW1hZ2VSZWN0KTsKK30KKwordm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJlY3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9y
PiBiZWhhdmlvciwgUmVuZGVyT2JqZWN0KiBzdWJ0cmVlUGFpbnRSb290KQoreworICAgIGlmICht
X3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYWludE92ZXJsYXlT
Y3JvbGxiYXJzKGNvbnRleHQsIGRhbWFnZVJlY3QsIGJlaGF2aW9yLCBzdWJ0cmVlUGFpbnRSb290
KTsKK30KKworSW50U2l6ZSBSZW5kZXJMYXllcjo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9z
Y3JvbGxhYmxlQXJlYS0+cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsKKyAgICByZXR1cm4g
eyAwLCAwIH07Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhvcml6b250YWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCkgY29uc3QKK3sKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxl
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNj
cm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxiYXJIaWRk
ZW5CeVN0eWxlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVyOjpz
ZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24oT3B0aW9uYWw8U2Nyb2xsUG9zaXRpb24+IHBvc2l0
aW9uKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVB
cmVhLT5zZXRQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24pOworfQorCit2b2lkIFJl
bmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5wYW5T
Y3JvbGxGcm9tUG9pbnQocG9pbnQpOworfQorCitTY3JvbGxQb3NpdGlvbiBSZW5kZXJMYXllcjo6
c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAg
ICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICByZXR1
cm4gU2Nyb2xsUG9zaXRpb24oKTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXI6Omxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJs
ZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5sYXllckZvckhvcml6b250
YWxTY3JvbGxiYXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciog
UmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIGlm
IChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+bGF5
ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIHJldHVybiBudWxscHRyOworfQorCitTY3Jv
bGxiYXIqIFJlbmRlckxheWVyOjpob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhv
cml6b250YWxTY3JvbGxiYXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworU2Nyb2xsYmFy
KiBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAoreworICAgIGlmIChtX3Nj
cm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxT
Y3JvbGxiYXIoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllcjo6
c2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxpbmdNYXlS
ZXZlYWxCYWNrZ3JvdW5kKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxh
eWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyTGF5ZXI6Omhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sK
KyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFy
ZWEtPmhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitpbnQgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9s
bGJhclNpemVSZWxldmFuY3kgcmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFi
bGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+dmVydGljYWxTY3JvbGxi
YXJXaWR0aChyZWxldmFuY3kpOworICAgIHJldHVybiAwOworfQorCitpbnQgUmVuZGVyTGF5ZXI6
Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kg
cmVsZXZhbmN5KSBjb25zdAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChyZWxldmFu
Y3kpOworICAgIHJldHVybiAwOworfQorCitib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xs
RGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0
IG11bHRpcGxpZXIpCit7CisgICAgcmV0dXJuIGVuc3VyZUxheWVyU2Nyb2xsYWJsZUFyZWEoKS0+
c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworfQorCit2b2lkIFJl
bmRlckxheWVyOjpzZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShib29sIGNvbnN0
cmFpbnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKQoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250
ZW50RWRnZShjb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZSk7Cit9CisvLyBFbmQgb2Yg
dGVtcG9yYXJ5IGdsdWUgY29kZQorCiB2b2lkIFJlbmRlckxheWVyOjphZGRDaGlsZChSZW5kZXJM
YXllciYgY2hpbGQsIFJlbmRlckxheWVyKiBiZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJMYXll
ciogcHJldlNpYmxpbmcgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxp
bmcoKSA6IGxhc3RDaGlsZCgpOwpAQCAtOTQ2LDcgKzExNDgsOCBAQCB2b2lkIFJlbmRlckxheWVy
Ojp1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyTGF5b3V0KGJvb2wgaXNSZWxheW91dGluZ1N1YnRy
ZWUsIGJvbwogdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQ8VXBkYXRlTGF5ZXJQb3NpdGlvbnNGbGFn
PiBmbGFncykKIHsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCZmbGFncyk7Ci0gICAgYXBwbHlQ
b3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25JZk5lZWRlZCgpOworICAgIGlmIChtX3Njcm9sbGFibGVB
cmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5hcHBseVBvc3RMYXlvdXRTY3JvbGxQb3Np
dGlvbklmTmVlZGVkKCk7CiAKICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgIGdlb21ldHJ5
TWFwLT5wdXNoTWFwcGluZ3NUb0FuY2VzdG9yKHRoaXMsIHBhcmVudCgpKTsKQEAgLTk1NCw3ICsx
MTU3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMoUmVuZGVyR2Vv
bWV0cnlNYXAqIGdlb21ldHJ5TWFwLCBPcHRpb25TZXQKICAgICAvLyBDbGVhciBvdXIgY2FjaGVk
IGNsaXAgcmVjdCBpbmZvcm1hdGlvbi4KICAgICBjbGVhckNsaXBSZWN0cygpOwogCi0gICAgaWYg
KGhhc092ZXJmbG93Q29udHJvbHMoKSkgeworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhICYmIG1f
c2Nyb2xsYWJsZUFyZWEtPmhhc092ZXJmbG93Q29udHJvbHMoKSkgewogICAgICAgICBMYXlvdXRT
aXplIG9mZnNldEZyb21Sb290OwogICAgICAgICBpZiAoZ2VvbWV0cnlNYXApCiAgICAgICAgICAg
ICBvZmZzZXRGcm9tUm9vdCA9IExheW91dFNpemUodG9GbG9hdFNpemUoZ2VvbWV0cnlNYXAtPmFi
c29sdXRlUG9pbnQoRmxvYXRQb2ludCgpKSkpOwpAQCAtOTYzLDcgKzExNjYsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9ucyhSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0
cnlNYXAsIE9wdGlvblNldAogICAgICAgICAgICAgLy8gYXMgY2FuVXNlT2Zmc2V0RnJvbUFuY2Vz
dG9yIG1heSBiZSB0cnVlIGZvciBhbiBhbmNlc3RvciBsYXllci4KICAgICAgICAgICAgIG9mZnNl
dEZyb21Sb290ID0gb2Zmc2V0RnJvbUFuY2VzdG9yKHJvb3QoKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKHJvdW5kZWRJbnRTaXplKG9mZnNldEZyb21Sb290
KSk7CisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhy
b3VuZGVkSW50U2l6ZShvZmZzZXRGcm9tUm9vdCkpOwogICAgIH0KIAogICAgIHVwZGF0ZURlc2Nl
bmRhbnREZXBlbmRlbnRGbGFncygpOwpAQCAtMTAzOSwxNCArMTI0Miw4IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zKFJlbmRlckdlb21ldHJ5TWFwKiBnZW9tZXRyeU1h
cCwgT3B0aW9uU2V0CiAgICAgZm9yIChSZW5kZXJMYXllciogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZC0+dXBk
YXRlTGF5ZXJQb3NpdGlvbnMoZ2VvbWV0cnlNYXAsIGZsYWdzKTsKIAotICAgIC8vIFdpdGggYWxs
IG91ciBjaGlsZHJlbiBwb3NpdGlvbmVkLCBub3cgdXBkYXRlIG91ciBtYXJxdWVlIGlmIHdlIG5l
ZWQgdG8uCi0gICAgaWYgKG1fbWFycXVlZSkgewotICAgICAgICAvLyBGSVhNRTogd291bGQgbGlr
ZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggYml0ZmllbGRz
LgotICAgICAgICBib29sIG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uID0gbV91cGRhdGluZ01h
cnF1ZWVQb3NpdGlvbjsKLSAgICAgICAgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IHRydWU7
Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7Ci0gICAgICAgIG1f
dXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbjsKLSAg
ICB9CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEt
PnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwogCiAgICAgaWYgKHJlbmRlcmVyKCkuaXNGaXhlZFBv
c2l0aW9uZWQoKSAmJiByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZpeGVkUG9zaXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgYm9vbCBpbnRlcnNlY3RzVmll
d3BvcnQgPSBjb21wb3NpdG9yKCkuZml4ZWRMYXllckludGVyc2VjdHNWaWV3cG9ydCgqdGhpcyk7
CkBAIC0xMTI2LDI3ICsxMzIzLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJSZXBhaW50UmVj
dHMoKQogICAgIHJlbmRlcmVyKCkuY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkK
LXsKLSAgICBBU1NFUlQodGhpcyA9PSByZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsKLQotICAg
IExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRv
Y3VtZW50U2Nyb2xsIik7Ci0KLSAgICBSZW5kZXJHZW9tZXRyeU1hcCBnZW9tZXRyeU1hcChVc2VU
cmFuc2Zvcm1zKTsKLSAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsKCZnZW9tZXRy
eU1hcCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpCi17Ci0gICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNl
VHJhbnNmb3Jtcyk7Ci0gICAgaWYgKHRoaXMgIT0gcmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkK
LSAgICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihwYXJlbnQoKSwgbnVs
bHB0cik7Ci0KLSAgICAvLyBGSVhNRTogd2h5IGlzIGl0IE9LIHRvIG5vdCBjaGVjayB0aGUgYW5j
ZXN0b3JzIG9mIHRoaXMgbGF5ZXIgaW4gb3JkZXIgdG8KLSAgICAvLyBpbml0aWFsaXplIHRoZSBI
YXNTZWVuVmlld3BvcnRDb25zdHJhaW5lZEFuY2VzdG9yIGFuZCBIYXNTZWVuQW5jZXN0b3JXaXRo
T3ZlcmZsb3dDbGlwIGZsYWdzPwotICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwo
Jmdlb21ldHJ5TWFwLCBJc092ZXJmbG93U2Nyb2xsKTsKLX0KLQogdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9tZXRyeU1hcCogZ2VvbWV0
cnlNYXAsIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4gZmxh
Z3MpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIG5lZWRlZCwgYnV0IHRoZXJl
IGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZQpAQCAtMTE5OSwxMiArMTM3NSw4IEBAIHZvaWQg
UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJTY3JvbGwoUmVuZGVyR2VvbWV0
cnlNYXAqIGdlb21ldHJ5TWFwCiAgICAgLy8gb2YgYW4gb2JqZWN0LCB0aHVzIFJlbmRlclJlcGxp
Y2Egd2lsbCBzdGlsbCByZXBhaW50IGl0c2VsZiBwcm9wZXJseSBhcyB0aGUgbGF5ZXIgcG9zaXRp
b24gd2FzCiAgICAgLy8gdXBkYXRlZCBhYm92ZS4KIAotICAgIGlmIChtX21hcnF1ZWUpIHsKLSAg
ICAgICAgYm9vbCBvbGRVcGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG1fdXBkYXRpbmdNYXJxdWVl
UG9zaXRpb247Ci0gICAgICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRpb24gPSB0cnVlOwotICAg
ICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1hcnF1ZWVQb3NpdGlvbigpOwotICAgICAgICBtX3VwZGF0
aW5nTWFycXVlZVBvc2l0aW9uID0gb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb247Ci0gICAgfQor
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT51cGRh
dGVNYXJxdWVlUG9zaXRpb24oKTsKIAogICAgIGlmIChzaG91bGRQdXNoQW5kUG9wTWFwcGluZ3Mp
CiAgICAgICAgIGdlb21ldHJ5TWFwLT5wb3BNYXBwaW5nc1RvQW5jZXN0b3IocGFyZW50KCkpOwpA
QCAtMTY5NSw4ICsxODY3LDEwIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRp
b24oT3B0aW9uU2V0PFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZz4qIGZsYWdzCiAgICAgUmVuZGVy
TGF5ZXIqIHBvc2l0aW9uZWRQYXJlbnQ7CiAgICAgaWYgKHJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkgJiYgKHBvc2l0aW9uZWRQYXJlbnQgPSBlbmNsb3NpbmdBbmNlc3RvckZvclBv
c2l0aW9uKHJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpKSkpIHsKICAgICAgICAgLy8gRm9y
IHBvc2l0aW9uZWQgbGF5ZXJzLCB3ZSBzdWJ0cmFjdCBvdXQgdGhlIGVuY2xvc2luZyBwb3NpdGlv
bmVkIGxheWVyJ3Mgc2Nyb2xsIG9mZnNldC4KLSAgICAgICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQt
PnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBsb2NhbFBvaW50IC09
IHRvTGF5b3V0U2l6ZShwb3NpdGlvbmVkUGFyZW50LT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAg
ICAgaWYgKHBvc2l0aW9uZWRQYXJlbnQtPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiBwb3NpdGlvbmVkUGFyZW50U2Nyb2xsYWJsZUFyZWEgPSBw
b3NpdGlvbmVkUGFyZW50LT5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIGxvY2Fs
UG9pbnQgLT0gdG9MYXlvdXRTaXplKHBvc2l0aW9uZWRQYXJlbnRTY3JvbGxhYmxlQXJlYS0+c2Ny
b2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChwb3NpdGlv
bmVkUGFyZW50LT5yZW5kZXJlcigpLmlzSW5GbG93UG9zaXRpb25lZCgpICYmIGlzPFJlbmRlcklu
bGluZT4ocG9zaXRpb25lZFBhcmVudC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIExheW91
dFNpemUgb2Zmc2V0ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPihwb3NpdGlvbmVkUGFyZW50LT5y
ZW5kZXJlcigpKS5vZmZzZXRGb3JJbkZsb3dQb3NpdGlvbmVkSW5saW5lKCZkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpKTsKQEAgLTE3MDYsOCArMTg4MCwxMCBAQCBib29sIFJlbmRlckxh
eWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0Zs
YWc+KiBmbGFncwogICAgICAgICBBU1NFUlQocG9zaXRpb25lZFBhcmVudC0+Y29udGVudHNTY3Jv
bGxpbmdTY29wZSgpKTsKICAgICAgICAgbV9ib3hTY3JvbGxpbmdTY29wZSA9IHBvc2l0aW9uZWRQ
YXJlbnQtPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKTsKICAgICB9IGVsc2UgaWYgKGF1dG8qIHBh
cmVudExheWVyID0gcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudExheWVyLT5yZW5kZXJl
cigpLmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91
dFNpemUocGFyZW50KCktPnNjcm9sbFBvc2l0aW9uKCkpOworICAgICAgICBpZiAocGFyZW50TGF5
ZXItPnJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiBwYXJlbnRMYXllclNjcm9sbGFibGVBcmVhID0gcGFyZW50TGF5ZXItPnNjcm9sbGFibGVBcmVh
KCkpCisgICAgICAgICAgICAgICAgbG9jYWxQb2ludCAtPSB0b0xheW91dFNpemUocGFyZW50TGF5
ZXJTY3JvbGxhYmxlQXJlYS0+c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgICAgIH0KIAogICAgICAg
ICBBU1NFUlQocGFyZW50TGF5ZXItPmNvbnRlbnRzU2Nyb2xsaW5nU2NvcGUoKSk7CiAgICAgICAg
IG1fYm94U2Nyb2xsaW5nU2NvcGUgPSBwYXJlbnRMYXllci0+Y29udGVudHNTY3JvbGxpbmdTY29w
ZSgpOwpAQCAtMTgzOSw5ICsyMDE1LDkgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdMYXllckluQ29udGFpbmluZ0Jsb2NrT3JkZXIoKSBjb25zdAogICAgIHJldHVybiBudWxs
cHRyOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIo
Y29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQorUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjplbmNs
b3NpbmdGcmFtZVJlbmRlckxheWVyKCkgY29uc3QKIHsKLSAgICBhdXRvKiBvd25lckVsZW1lbnQg
PSBsYXllci5yZW5kZXJlcigpLmRvY3VtZW50KCkub3duZXJFbGVtZW50KCk7CisgICAgYXV0byog
b3duZXJFbGVtZW50ID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogICAg
IGlmICghb3duZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTg1Miwx
NSArMjAyOCwxNSBAQCBzdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5
ZXIoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyKQogICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5l
bmNsb3NpbmdMYXllcigpOwogfQogCi1zdGF0aWMgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKGNvbnN0IFJlbmRlckxheWVyJiBsYXllciwgQ3Jvc3NGcmFtZUJvdW5k
YXJpZXMgY3Jvc3NGcmFtZUJvdW5kYXJpZXMpCitSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVu
Y2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzIGNyb3NzRnJh
bWVCb3VuZGFyaWVzKSBjb25zdAogewotICAgIGlmIChhdXRvKiBhbmNlc3RvciA9IGxheWVyLmVu
Y2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQorICAgIGlmIChhdXRvKiBhbmNl
c3RvciA9IGVuY2xvc2luZ0xheWVySW5Db250YWluaW5nQmxvY2tPcmRlcigpKQogICAgICAgICBy
ZXR1cm4gYW5jZXN0b3I7CiAKICAgICBpZiAoY3Jvc3NGcmFtZUJvdW5kYXJpZXMgPT0gQ3Jvc3NG
cmFtZUJvdW5kYXJpZXM6Ok5vKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBlbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKGxheWVyKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
RnJhbWVSZW5kZXJMYXllcigpOwogfQogCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmVuY2xv
c2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9yTm90IGluY2x1ZGVTZWxmLCBDcm9zc0Zy
YW1lQm91bmRhcmllcyBjcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3QKQEAgLTE4NzQsNyArMjA1
MCw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgaWYgKGluY2x1ZGVTZWxmID09IElu
Y2x1ZGVTZWxmT3JOb3Q6OkluY2x1ZGVTZWxmICYmIGlzQ29uc2lkZXJlZFNjcm9sbGFibGUoKnRo
aXMpKQogICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxSZW5kZXJMYXllcio+KHRoaXMpOwogICAg
IAotICAgIGZvciAoYXV0byogbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoKnRoaXMsIGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBl
bmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqbmV4dExheWVyLCBjcm9zc0ZyYW1lQm91bmRh
cmllcykpIHsKKyAgICBmb3IgKGF1dG8qIG5leHRMYXllciA9IGVuY2xvc2luZ0NvbnRhaW5pbmdC
bG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFyaWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBu
ZXh0TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKGNyb3NzRnJhbWVCb3VuZGFy
aWVzKSkgewogICAgICAgICBpZiAoaXNDb25zaWRlcmVkU2Nyb2xsYWJsZSgqbmV4dExheWVyKSkK
ICAgICAgICAgICAgIHJldHVybiBuZXh0TGF5ZXI7CiAgICAgfQpAQCAtMTg4Miw1MCArMjA1OCw2
IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXllcjo6ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKElu
Y2x1ZGVTZWxmT3JOb3QgaW5jbHVkZVNlbGYsCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyTGF5ZXI6OnNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNp
ZGVGaXhlZCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVuZGVyZXIoKS5hYnNvbHV0ZUJvdW5kaW5n
Qm94UmVjdCgvKiB1c2VUcmFuc2Zvcm1zICovIHRydWUsIGlzSW5zaWRlRml4ZWQpOwotfQotCi1i
b29sIFJlbmRlckxheWVyOjppc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIXNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
YXV0byBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigp
KSB7Ci0gICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9n
cmVzcyhzY3JvbGxpbmdOb2RlSUQoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3Io
KSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNz
KCk7Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlckxheWVyOjppc1J1
YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGF1dG8gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlKCkuc2Nyb2xsaW5nQ29vcmRp
bmF0b3IoKSkgewotICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmlzUnViYmVyQmFu
ZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFu
aW1hdG9yKCkpCi0gICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVy
TGF5ZXI6OmZvcmNlVXBkYXRlU2Nyb2xsYmFyc09uTWFpblRocmVhZEZvclBlcmZvcm1hbmNlVGVz
dGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5zY3JvbGxp
bmdQZXJmb3JtYW5jZVRlc3RpbmdFbmFibGVkKCk7Ci19Ci0KIFJlbmRlckxheWVyKiBSZW5kZXJM
YXllcjo6ZW5jbG9zaW5nVHJhbnNmb3JtZWRBbmNlc3RvcigpIGNvbnN0CiB7CiAgICAgUmVuZGVy
TGF5ZXIqIGN1cnIgPSBwYXJlbnQoKTsKQEAgLTI0NTEsMTkgKzI1ODMsNiBAQCBMYXlvdXRTaXpl
IFJlbmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3IoY29uc3QgUmVuZGVyTGF5ZXIqIGFuY2Vz
dG9yTGF5ZXIsIENvbAogICAgIHJldHVybiB0b0xheW91dFNpemUoY29udmVydFRvTGF5ZXJDb29y
ZHMoYW5jZXN0b3JMYXllciwgTGF5b3V0UG9pbnQoKSwgYWRqdXN0Rm9yQ29sdW1ucykpOwogfQog
Ci1ib29sIFJlbmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKLXsK
LSAgICBib29sIGlzVmlzaWJsZSA9IHJlbmRlcmVyKCkuc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VmlzaWJpbGl0eTo6VmlzaWJsZTsKLSAgICBpZiAocmVuZGVyZXIoKS5zZXR0aW5ncygpLmFzeW5j
T3ZlcmZsb3dTY3JvbGxpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpc1Zpc2libGUgJiYg
c2Nyb2xsc092ZXJmbG93KCkgJiYgIWlzSW5zaWRlU1ZHRm9yZWlnbk9iamVjdCgpOwotCi0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkK
LSAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmIChyZW5kZXJlcigp
LnN0eWxlKCkudXNlVG91Y2hPdmVyZmxvd1Njcm9sbGluZygpIHx8IHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5hbHdheXNVc2VBY2NlbGVyYXRlZE92ZXJmbG93U2Nyb2xsKCkpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQog
Ym9vbCBSZW5kZXJMYXllcjo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZl
bnQmIHRvdWNoRXZlbnQpCiB7CkBAIC0yNDkzLDMyMyArMjYxMiw1MSBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQogCi0vLyBGSVhNRTogdGhpcyBpcyBvbmx5
IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJzLgotYm9vbCBSZW5kZXJMYXllcjo6dXNlc0Nv
bXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBpc0NvbXBvc2l0ZWQoKSAm
JiBiYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Ci19Ci0KLS8vIEZJWE1FOiB0aGlzIGlz
IG9ubHkgdmFsaWQgYWZ0ZXIgd2UndmUgbWFkZSBsYXllcnMuCi1ib29sIFJlbmRlckxheWVyOjp1
c2VzQXN5bmNTY3JvbGxpbmcoKSBjb25zdAotewotICAgIHJldHVybiBjb21wb3NpdG9yKCkudXNl
Q29vcmRpbmF0ZWRTY3JvbGxpbmdGb3JMYXllcigqdGhpcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
aW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQorc3RhdGljIGlubGlu
ZSBib29sIGZyYW1lRWxlbWVudEFuZFZpZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJh
c2UqIGZyYW1lRWxlbWVudEJhc2UsIEZyYW1lVmlldyYgZnJhbWVWaWV3KQogewotICAgIC8vIFRo
aXMgaW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgotICAgIC8vIGh0dHA6Ly9teHIubW96
aWxsYS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54
bWwjODU2LgotICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKyAgICAvLyBJZiBzY3Jv
bGxiYXJzIGFyZW4ndCBleHBsaWNpdGx5IGZvcmJpZGRlbiwgcGVybWl0IHNjcm9sbGluZy4KKyAg
ICBpZiAoZnJhbWVFbGVtZW50QmFzZSAmJiBmcmFtZUVsZW1lbnRCYXNlLT5zY3JvbGxpbmdNb2Rl
KCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlu
dCBhZGp1c3RlZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7Ci0gICAgaWYg
KGFkanVzdGVkRGVsdGEgPiAxKQotICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8
aW50PihhZGp1c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVs
dGEpKSkgLSAxOwotICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKLSAgICAgICAgYWRq
dXN0ZWREZWx0YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGlj
X2Nhc3Q8ZG91YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisgICAgLy8gSWYgc2Nyb2xsYmFy
cyBhcmUgZm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBvYnZpb3VzbHkg
YmUgaWdub3JlZC4KKyAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2VyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBhZGp1c3RlZERlbHRhOworICAgIC8vIEZv
cmJpZCBhdXRvc2Nyb2xscyB3aGVuIHNjcm9sbGJhcnMgYXJlIG9mZiwgYnV0IHBlcm1pdHMgb3Ro
ZXIgcHJvZ3JhbW1hdGljIHNjcm9sbHMsCisgICAgLy8gbGlrZSBuYXZpZ2F0aW9uIHRvIGFuIGFu
Y2hvci4KKyAgICByZXR1cm4gIWZyYW1lVmlldy5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9z
Y3JvbGxJblByb2dyZXNzKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgSW50U2l6ZSBhZGp1c3RlZFNj
cm9sbERlbHRhKGNvbnN0IEludFNpemUmIGRlbHRhKQorYm9vbCBSZW5kZXJMYXllcjo6YWxsb3dz
Q3VycmVudFNjcm9sbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQo
KSkpOwotfQorICAgIGlmICghcmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi12b2lkIFJlbmRlckxheWVyOjpwYW5TY3JvbGxGcm9tUG9pbnQoY29u
c3QgSW50UG9pbnQmIHNvdXJjZVBvaW50KQotewotICAgIEludFBvaW50IGxhc3RLbm93bk1vdXNl
UG9zaXRpb24gPSByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkubGFzdEtub3duTW91
c2VQb3NpdGlvbigpOwotICAgIAotICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxhc3Qg
a25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1vdXNl
IGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAotICAgIHN0
YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0gICAgaWYgKGxhc3RLbm93bk1v
dXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDApCi0g
ICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247Ci0g
ICAgZWxzZQotICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3VzZVBv
c2l0aW9uOworICAgIC8vIERvbid0IHNjcm9sbCB0byByZXZlYWwgYW4gb3ZlcmZsb3cgbGF5ZXIg
dGhhdCBpcyByZXN0cmljdGVkIGJ5IHRoZSAtd2Via2l0LWxpbmUtY2xhbXAgcHJvcGVydHkuCisg
ICAgLy8gRklYTUU6IElzIHRoaXMgc3RpbGwgbmVlZGVkPyBJdCB1c2VkIHRvIGJlIHJlbGV2YW50
IGZvciBTYWZhcmkgUlNTLgorICAgIGlmIChyZW5kZXJlcigpLnBhcmVudCgpICYmICFyZW5kZXJl
cigpLnBhcmVudCgpLT5zdHlsZSgpLmxpbmVDbGFtcCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBJbnRTaXplIGRlbHRhID0gbGFzdEtub3duTW91c2VQb3NpdGlvbiAt
IHNvdXJjZVBvaW50OworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7IC8vIE9ubHkgYm94ZXMgY2FuIGhhdmUgb3ZlcmZsb3dDbGlwIHNldC4KIAotICAg
IGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMp
IC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBmb3IgdGhlIGljb24KLSAgICAgICAg
ZGVsdGEuc2V0V2lkdGgoMCk7Ci0gICAgaWYgKGFicyhkZWx0YS5oZWlnaHQoKSkgPD0gU2Nyb2xs
Vmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCi0gICAgICAgIGRlbHRhLnNldEhlaWdodCgwKTsKKyAg
ICBpZiAocmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dy
ZXNzKCkpIHsKKyAgICAgICAgLy8gVGhlICJwcm9ncmFtbWF0aWNhbGx5IiBoZXJlIGlzIG1pc2xl
YWRpbmc7IHRoaXMgYXNrcyB3aGV0aGVyIHRoZSBib3ggaGFzIHNjcm9sbGFibGUgb3ZlcmZsb3cs
CisgICAgICAgIC8vIG9yIGlzIGEgc3BlY2lhbCBjYXNlIGxpa2UgYSBmb3JtIGNvbnRyb2wuCisg
ICAgICAgIHJldHVybiBib3gtPmNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoKTsKKyAgICB9
CiAKLSAgICBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGFkanVzdGVkU2Nyb2xsRGVsdGEoZGVsdGEpKTsK
KyAgICAvLyBQcm9ncmFtbWF0aWMgc2Nyb2xscyBjYW4gc2Nyb2xsIG92ZXJmbG93OmhpZGRlbi4K
KyAgICByZXR1cm4gYm94LT5oYXNIb3Jpem9udGFsT3ZlcmZsb3coKSB8fCBib3gtPmhhc1ZlcnRp
Y2FsT3ZlcmZsb3coKTsKIH0KIAotLy8gRklYTUU6IHVuaWZ5IHdpdGggdGhlIHNjcm9sbFJlY3RU
b1Zpc2libGUoKSBjb2RlIGJlbG93Lgotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNp
dmVseShjb25zdCBJbnRTaXplJiBkZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEp
Ci17Ci0gICAgaWYgKGRlbHRhLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29s
IHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9IGZhbHNlOwotICAgIGlmIChyZW5kZXJlcigpLnBhcmVu
dCgpKQotICAgICAgICByZXN0cmljdGVkQnlMaW5lQ2xhbXAgPSAhcmVuZGVyZXIoKS5wYXJlbnQo
KS0+c3R5bGUoKS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKLQotICAgIGlmIChyZW5kZXJlcigpLmhh
c092ZXJmbG93Q2xpcCgpICYmICFyZXN0cmljdGVkQnlMaW5lQ2xhbXApIHsKLSAgICAgICAgU2Ny
b2xsT2Zmc2V0IG5ld1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgpICsgZGVsdGE7Ci0gICAg
ICAgIHNjcm9sbFRvT2Zmc2V0KG5ld1Njcm9sbE9mZnNldCk7Ci0gICAgICAgIGlmIChzY3JvbGxl
ZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gdGhpczsKLQotICAgICAgICAvLyBJ
ZiB0aGlzIGxheWVyIGNhbid0IGRvIHRoZSBzY3JvbGwgd2UgYXNrIHRoZSBuZXh0IGxheWVyIHVw
IHRoYXQgY2FuIHNjcm9sbCB0byB0cnkKLSAgICAgICAgSW50U2l6ZSByZW1haW5pbmdTY3JvbGxP
ZmZzZXQgPSBuZXdTY3JvbGxPZmZzZXQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgaWYgKCFy
ZW1haW5pbmdTY3JvbGxPZmZzZXQuaXNaZXJvKCkgJiYgcmVuZGVyZXIoKS5wYXJlbnQoKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2tpcHMgc2Nyb2xsYWJsZSBmcmFtZXMuCi0gICAg
ICAgICAgICBpZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gZW5jbG9zaW5nU2Nyb2xsYWJsZUxh
eWVyKEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6
WWVzKSkKLSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbEJ5UmVjdXJzaXZl
bHkocmVtYWluaW5nU2Nyb2xsT2Zmc2V0LCBzY3JvbGxlZEFyZWEpOwotCi0gICAgICAgICAgICBy
ZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkudXBkYXRlQXV0b3Njcm9sbFJlbmRlcmVy
KCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiB3ZSBhcmUgaGVyZSwg
d2Ugd2VyZSBjYWxsZWQgb24gYSByZW5kZXJlciB0aGF0IGNhbiBiZSBwcm9ncmFtbWF0aWNhbGx5
IHNjcm9sbGVkLCBidXQgZG9lc24ndAotICAgICAgICAvLyBoYXZlIGFuIG92ZXJmbG93IGNsaXAu
IFdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgYSBkb2N1bWVudCBub2RlIHRoYXQgY2FuIGJlIHNjcm9s
bGVkLgotICAgICAgICByZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0
YSk7Ci0gICAgICAgIGlmIChzY3JvbGxlZEFyZWEpCi0gICAgICAgICAgICAqc2Nyb2xsZWRBcmVh
ID0gJnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBkaWRuJ3Qgc2Nyb2xsIHRoZSB3aG9sZSB3YXksIGRvIHdlIHdhbnQgdG8gdHJ5IGxvb2tp
bmcgYXQgdGhlIGZyYW1lcyBvd25lckVsZW1lbnQ/IAotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyMzcKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXI6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlv
bj4gcG9zaXRpb24pCi17Ci0gICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlv
bjsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6YXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgc2Nyb2xsVG9PZmZzZXQoc2Nyb2xsT2Zmc2V0RnJvbVBvc2l0aW9u
KG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uLnZhbHVlKCkpKTsKLSAgICBtX3Bvc3RMYXlvdXRT
Y3JvbGxQb3NpdGlvbiA9IFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2Ny
b2xsVG9YUG9zaXRpb24oaW50IHgsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBTY3JvbGxQb3NpdGlvbiBwb3NpdGlvbih4LCBtX3Njcm9sbFBvc2l0
aW9uLnkoKSk7Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIG9wdGlvbnMpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xs
UG9zaXRpb25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQotewotICAgIFNjcm9sbFBvc2l0aW9uIHBv
c2l0aW9uKG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihw
b3NpdGlvbiwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJiBvcHRpb25zKQotewotICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbE9mZnNl
dEZyb21Qb3NpdGlvbihwb3NpdGlvbiksIG9wdGlvbnMpOwotfQotCi1TY3JvbGxPZmZzZXQgUmVu
ZGVyTGF5ZXI6OmNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0KSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxPZmZzZXQuY29uc3RyYWluZWRCZXR3ZWVu
KEludFBvaW50KCksIG1heGltdW1TY3JvbGxPZmZzZXQoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5
ZXI6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9z
aXRpb24sIFNjcm9sbFR5cGUgc2Nyb2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCi17
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xs
aW5nLCBzdHJlYW0gPDwgKnRoaXMgPDwgIiByZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUgIiA8
PCBwb3NpdGlvbik7Ci0KLSAgICBpZiAoYXV0byogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLT5yZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoKnRoaXMsIHBvc2l0aW9uLCBzY3Jv
bGxUeXBlLCBjbGFtcGluZyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xsT2Zm
c2V0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3RhdHVz
OjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKLSAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5jZWxB
bmltYXRpb25zKCk7Ci0KLSAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9IG9w
dGlvbnMuY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9sbE9m
ZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChjbGFtcGVkU2Nyb2xs
T2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7Ci0gICAgc2V0Q3Vy
cmVudFNjcm9sbFR5cGUob3B0aW9ucy50eXBlKTsKLQotICAgIFNjcm9sbE9mZnNldCBzbmFwcGVk
T2Zmc2V0ID0gY2VpbGVkSW50UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS5hZGp1c3RTY3JvbGxPZmZz
ZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNsYW1wZWRTY3JvbGxPZmZzZXQsIG9wdGlvbnMuc25hcFBv
aW50U2VsZWN0aW9uTWV0aG9kKSk7Ci0gICAgaWYgKG9wdGlvbnMuYW5pbWF0ZWQgPT0gQW5pbWF0
ZWRTY3JvbGw6OlllcykKLSAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0
aEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBzbmFw
cGVkUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoc25hcHBlZE9mZnNldCk7Ci0g
ICAgICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNuYXBwZWRQb3NpdGlvbiwg
b3B0aW9ucy50eXBlLCBvcHRpb25zLmNsYW1waW5nKSkKLSAgICAgICAgICAgIHNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0LCBvcHRpb25zLmNsYW1waW5nKTsKLSAg
ICAgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdElu
QW5pbWF0aW9uKTsKLSAgICB9Ci0KLSAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91c1Nj
cm9sbFR5cGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhjb25zdCBTY3JvbGxQ
b3NpdGlvbiYgcG9zaXRpb24pCi17Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsK
LSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKFNj
cm9sbGluZywgc3RyZWFtIDw8ICJSZW5kZXJMYXllcjo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8
PCAiIGZyb20gIiA8PCBtX3Njcm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwg
KGN1cnJlbnRTY3JvbGxUeXBlKCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKLQotICAg
IFNjcm9sbFBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgaWYgKCFib3gtPmlz
SFRNTE1hcnF1ZWUoKSkgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3
aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBi
bG9ja3MpLgotICAgICAgICBpZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCi0gICAgICAgICAg
ICBjb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgICAgIGlmIChhZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IEl0J3Mgbm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBk
by4gQmVoYXZpb3Igc2VlbXMgcmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCi0gICAgICAgICAg
ICBpbnQgbWF4T2Zmc2V0ID0gc2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRX
aWR0aCgpKTsKLSAgICAgICAgICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZz
ZXRGcm9tUG9zaXRpb24obmV3UG9zaXRpb24pOwotICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZz
ZXQgPSBuZXdPZmZzZXQueCgpOwotICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhP
ZmZzZXQgLSBjYXJldFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBj
YXJldFdpZHRoOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lk
dGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOwotICAgICAgICAgICAg
fSBlbHNlIGlmIChzY3JvbGxYT2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdp
ZHRoKQotICAgICAgICAgICAgICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKLQotICAg
ICAgICAgICAgbmV3T2Zmc2V0LnNldFgoc2Nyb2xsWE9mZnNldCk7Ci0gICAgICAgICAgICBuZXdQ
b3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fc2Nyb2xsUG9zaXRpb24gPT0gbmV3UG9z
aXRpb24gJiYgY3VycmVudFNjcm9sbEJlaGF2aW9yU3RhdHVzKCkgPT0gU2Nyb2xsQmVoYXZpb3JT
dGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOb3RoaW5nIGd1YXJh
bnRlZXMgd2UgZ2V0IGEgc2Nyb2xsVG8oKSB3aXRoIGFuIHVuY2hhbmdlZCBwb3NpdGlvbiBhdCB0
aGUgZW5kIG9mIGEgdXNlciBnZXN0dXJlLgotICAgICAgICAvLyBUaGUgU2Nyb2xsaW5nQ29vcmRp
bmF0b3IgcHJvYmFibHkgbmVlZHMgdG8gbWVzc2FnZSB0aGUgbWFpbiB0aHJlYWQgd2hlbiBhIGdl
c3R1cmUgZW5kcy4KLSAgICAgICAgaWYgKHJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbigpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUo
KTsKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzQWZ0ZXJTY3JvbGwoKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9zY3JvbGxQb3NpdGlvbiA9
IG5ld1Bvc2l0aW9uOwotCi0gICAgUmVuZGVyVmlldyYgdmlldyA9IHJlbmRlcmVyKCkudmlldygp
OwotCi0gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbnMgb2Ygb3VyIGNoaWxkIGxheWVycyAoaWYg
bmVlZGVkIGFzIG9ubHkgZml4ZWQgbGF5ZXJzIHNob3VsZCBiZSBpbXBhY3RlZCBieSBhIHNjcm9s
bCkuCi0gICAgLy8gV2UgZG9uJ3QgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycywgYmVjYXVzZSB3
ZSBuZWVkIHRvIGRvIGEgZGVlcCB1cGRhdGUgZnJvbSB0aGUgY29tcG9zaXRpbmcgYW5jZXN0b3Iu
Ci0gICAgaWYgKCF2aWV3LmZyYW1lVmlldygpLmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJl
ZUxheW91dCgpKSB7Ci0gICAgICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgbGF5b3V0
LCB3ZSdsbCBqdXN0IHVwZGF0ZSBsYXllcnMgb25jZSBsYXlvdXQgaGFzIGZpbmlzaGVkLgotICAg
ICAgICB1cGRhdGVMYXllclBvc2l0aW9uc0FmdGVyT3ZlcmZsb3dTY3JvbGwoKTsKLQotICAgICAg
ICB2aWV3LmZyYW1lVmlldygpLnNjaGVkdWxlVXBkYXRlV2lkZ2V0UG9zaXRpb25zKCk7Ci0KLSAg
ICAgICAgaWYgKCFtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAvLyBB
dm9pZCB1cGRhdGluZyBjb21wb3NpdGluZyBsYXllcnMgaWYsIGhpZ2hlciBvbiB0aGUgc3RhY2ss
IHdlJ3JlIGFscmVhZHkgdXBkYXRpbmcgbGF5ZXIKLSAgICAgICAgICAgIC8vIHBvc2l0aW9ucy4g
VXBkYXRpbmcgbGF5ZXIgcG9zaXRpb25zIHJlcXVpcmVzIGEgZnVsbCB3YWxrIG9mIHVwLXRvLWRh
dGUgUmVuZGVyTGF5ZXJzLCBhbmQKLSAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3ZSdyZSBz
dGlsbCB1cGRhdGluZyB0aGVpciBwb3NpdGlvbnM7IHdlJ2xsIHVwZGF0ZSBjb21wb3NpdGluZyBs
YXllcnMgbGF0ZXIKLSAgICAgICAgICAgIC8vIHdoZW4gdGhhdCBjb21wbGV0ZXMuCi0gICAgICAg
ICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkgewotICAgICAgICAgICAgICAgIHNl
dE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2Nyb2xsIHBvc2l0aW9uIGNhbiBhZmZlY3QgdGhlIGxvY2F0aW9uIG9mIGEgY29tcG9zaXRlZCBk
ZXNjZW5kYW50ICh3aGljaCBtYXkgYmUgYSBzaWJsaW5nIGluIHotb3JkZXIpLAotICAgICAgICAg
ICAgICAgIC8vIHNvIHRyaWdnZXIgYSBkZXNjZW5kYW50IHdhbGsgZnJvbSB0aGUgc3RhY2tpbmcg
Y29udGV4dC4KLSAgICAgICAgICAgICAgICBpZiAoYXV0byogcGFpbnRQYXJlbnQgPSBzdGFja2lu
Z0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRh
bnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hh
bmdlIHRoZSBjbGlwIG9mIGEgcGFydGljdWxhciByZWdpb24uCi0gICAgICAgIHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5pbnZhbGlkYXRlUmVuZGVyaW5nRGVwZW5kZW50UmVnaW9ucygpOwotICAgICAg
ICBEZWJ1Z1BhZ2VPdmVybGF5czo6ZGlkTGF5b3V0KHJlbmRlcmVyKCkuZnJhbWUoKSk7Ci0gICAg
fQotCi0gICAgRnJhbWUmIGZyYW1lID0gcmVuZGVyZXIoKS5mcmFtZSgpOwotICAgIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIgPSByZW5kZXJlcigpLmNvbnRhaW5lckZv
clJlcGFpbnQoKTsKLSAgICAvLyBUaGUgY2FyZXQgcmVjdCBuZWVkcyB0byBiZSBpbnZhbGlkYXRl
ZCBhZnRlciBzY3JvbGxpbmcKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRDYXJldFJlY3ROZWVk
c1VwZGF0ZSgpOwotICAgIAotICAgIExheW91dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJl
cigpLmhhc1JlcGFpbnRMYXlvdXRSZWN0cygpID8gcmVuZGVyZXIoKS5yZXBhaW50TGF5b3V0UmVj
dHMoKS5tX3JlcGFpbnRSZWN0IDogcmVuZGVyZXIoKS5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyKTsKLQotICAgIEZsb2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNl
TW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBhaW50KTsKLSAgICBpZiAocmVwYWludENv
bnRhaW5lcikKLSAgICAgICAgcXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCA9IHJlcGFpbnRDb250
YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZvckZha2VNb3VzZU1vdmVFdmVudCk7Ci0g
ICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uSW5R
dWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwotCi0gICAgYm9vbCByZXF1aXJlc1JlcGFp
bnQgPSB0cnVlOwotICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpKSB7Ci0gICAgICAg
IHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXREZXNjZW5k
YW50c05lZWRVcGRhdGVCYWNraW5nQW5kSGllcmFyY2h5VHJhdmVyc2FsKCk7Ci0gICAgICAgIHJl
cXVpcmVzUmVwYWludCA9IGJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xs
KCk7Ci0gICAgfQotCi0gICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIg
b2JqZWN0LgotICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCi0gICAgICAgIHJlbmRlcmVyKCkucmVw
YWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKLQot
ICAgIC8vIFNjaGVkdWxlIHRoZSBzY3JvbGwgYW5kIHNjcm9sbC1yZWxhdGVkIERPTSBldmVudHMu
Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlcigpLmVsZW1lbnQoKSkKLSAgICAg
ICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5hZGRQZW5kaW5nU2Nyb2xsRXZlbnRUYXJnZXQoKmVsZW1l
bnQpOwotCi0gICAgaWYgKHNjcm9sbHNPdmVyZmxvdygpKQotICAgICAgICB2aWV3LmZyYW1lVmll
dygpLmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwotCi0gICAgdmlldy5mcmFtZVZpZXcoKS52aWV3
cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwotICAgIGZyYW1lLmVkaXRvcigpLnJlbmRlckxheWVyRGlk
U2Nyb2xsKCp0aGlzKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZyYW1lRWxlbWVudEFuZFZp
ZXdQZXJtaXRTY3JvbGwoSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxlbWVudEJhc2UsIEZy
YW1lVmlldyYgZnJhbWVWaWV3KQotewotICAgIC8vIElmIHNjcm9sbGJhcnMgYXJlbid0IGV4cGxp
Y2l0bHkgZm9yYmlkZGVuLCBwZXJtaXQgc2Nyb2xsaW5nLgotICAgIGlmIChmcmFtZUVsZW1lbnRC
YXNlICYmIGZyYW1lRWxlbWVudEJhc2UtPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdh
eXNPZmYpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgc2Nyb2xsYmFycyBhcmUg
Zm9yYmlkZGVuLCB1c2VyIGluaXRpYXRlZCBzY3JvbGxzIHNob3VsZCBvYnZpb3VzbHkgYmUgaWdu
b3JlZC4KLSAgICBpZiAoZnJhbWVWaWV3Lndhc1Njcm9sbGVkQnlVc2VyKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZvcmJpZCBhdXRvc2Nyb2xscyB3aGVuIHNjcm9sbGJhcnMg
YXJlIG9mZiwgYnV0IHBlcm1pdHMgb3RoZXIgcHJvZ3JhbW1hdGljIHNjcm9sbHMsCi0gICAgLy8g
bGlrZSBuYXZpZ2F0aW9uIHRvIGFuIGFuY2hvci4KLSAgICByZXR1cm4gIWZyYW1lVmlldy5mcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLmF1dG9zY3JvbGxJblByb2dyZXNzKCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyTGF5ZXI6OmFsbG93c0N1cnJlbnRTY3JvbGwoKSBjb25zdAotewotICAgIGlmICghcmVuZGVy
ZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
RG9uJ3Qgc2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0
ZWQgYnkgdGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KLSAgICAvLyBGSVhNRTogSXMg
dGhpcyBzdGlsbCBuZWVkZWQ/IEl0IHVzZWQgdG8gYmUgcmVsZXZhbnQgZm9yIFNhZmFyaSBSU1Mu
Ci0gICAgaWYgKHJlbmRlcmVyKCkucGFyZW50KCkgJiYgIXJlbmRlcmVyKCkucGFyZW50KCktPnN0
eWxlKCkubGluZUNsYW1wKCkuaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGJveCk7IC8vIE9ubHkg
Ym94ZXMgY2FuIGhhdmUgb3ZlcmZsb3dDbGlwIHNldC4KLQotICAgIGlmIChyZW5kZXJlcigpLmZy
YW1lKCkuZXZlbnRIYW5kbGVyKCkuYXV0b3Njcm9sbEluUHJvZ3Jlc3MoKSkgewotICAgICAgICAv
LyBUaGUgInByb2dyYW1tYXRpY2FsbHkiIGhlcmUgaXMgbWlzbGVhZGluZzsgdGhpcyBhc2tzIHdo
ZXRoZXIgdGhlIGJveCBoYXMgc2Nyb2xsYWJsZSBvdmVyZmxvdywKLSAgICAgICAgLy8gb3IgaXMg
YSBzcGVjaWFsIGNhc2UgbGlrZSBhIGZvcm0gY29udHJvbC4KLSAgICAgICAgcmV0dXJuIGJveC0+
Y2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZCgpOwotICAgIH0KLQotICAgIC8vIFByb2dyYW1t
YXRpYyBzY3JvbGxzIGNhbiBzY3JvbGwgb3ZlcmZsb3c6aGlkZGVuLgotICAgIHJldHVybiBib3gt
Pmhhc0hvcml6b250YWxPdmVyZmxvdygpIHx8IGJveC0+aGFzVmVydGljYWxPdmVyZmxvdygpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlz
aWJsZU9wdGlvbnMmIG9wdGlvbnMpCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNp
YmxlKGNvbnN0IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29u
c3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlvbnMmIG9wdGlvbnMpCiB7CiAgICAgTE9HX1dJVEhf
U1RSRUFNKFNjcm9sbGluZywgc3RyZWFtIDw8ICJMYXllciAiIDw8IHRoaXMgPDwgIiBzY3JvbGxS
ZWN0VG9WaXNpYmxlICIgPDwgYWJzb2x1dGVSZWN0KTsKIAogICAgIExheW91dFJlY3QgbmV3UmVj
dCA9IGFic29sdXRlUmVjdDsKICAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9IHJlbmRlcmVyKCku
dmlldygpLmZyYW1lVmlldygpOwotICAgIGF1dG8qIHBhcmVudExheWVyID0gZW5jbG9zaW5nQ29u
dGFpbmluZ0Jsb2NrTGF5ZXIoKnRoaXMsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpObyk7CisgICAg
YXV0byogcGFyZW50TGF5ZXIgPSBlbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcihDcm9zc0Zy
YW1lQm91bmRhcmllczo6Tm8pOwogCiAgICAgYXV0byBzY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlv
bnNGb3JFbGVtZW50ID0gW3RoaXMsIG9wdGlvbnNdKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgewpA
QCAtMjgyMCw2ICsyNjY3LDggQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsUmVjdFRvVmlzaWJs
ZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWQKICAgICB9OwogCiAg
ICAgaWYgKGFsbG93c0N1cnJlbnRTY3JvbGwoKSkgeworICAgICAgICBhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAgICAgLy8gRG9uJ3Qg
c2Nyb2xsIHRvIHJldmVhbCBhbiBvdmVyZmxvdyBsYXllciB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkg
dGhlIC13ZWJraXQtbGluZS1jbGFtcCBwcm9wZXJ0eS4KICAgICAgICAgLy8gVGhpcyB3aWxsIHBy
ZXZlbnQgdXMgZnJvbSByZXZlYWxpbmcgdGV4dCBoaWRkZW4gYnkgdGhlIHNsaWRlciBpbiBTYWZh
cmkgUlNTLgogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwpAQCAtMjgzMCwy
MyArMjY3OSwxNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0
IExheW91dFJlY3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAvLyBib3JkZXIg
ZWRnZS4gTWFrZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBzY3JvbGxhYmxlIGFyZWEu
CiAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoLUxheW91dFBvaW50KGJveC0+Ym9yZGVy
TGVmdCgpLCBib3gtPmJvcmRlclRvcCgpKSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgICAgICBpZiAoYm94LT5zaG91bGRQ
bGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpIHsKICAgICAgICAgICAgIC8vIEZv
ciBkaXJlY3Rpb246IHJ0bDsgd3JpdGluZy1tb2RlOiBob3Jpem9udGFsLXRiIGJveCwgdGhlIHNj
cm9sbCBiYXIgaXMgb24gdGhlIGxlZnQgc2lkZS4gVGhlIHZpc2libGUgcmVjdAogICAgICAgICAg
ICAgLy8gc3RhcnRzIGZyb20gdGhlIHJpZ2h0IHNpZGUgb2Ygc2Nyb2xsIGJhci4gU28gdGhlIHgg
b2YgbG9jYWxFeHBvc2VSZWN0IHNob3VsZCBzdGFydCBmcm9tIHRoZSBzYW1lIHBvc2l0aW9uIHRv
by4KLSAgICAgICAgICAgIGxvY2FsRXhwb3NlUmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQoLXZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgoKSwgMCkpOworICAgICAgICAgICAgbG9jYWxFeHBvc2VSZWN0Lm1v
dmVCeShMYXlvdXRQb2ludCgtc2Nyb2xsYWJsZUxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldpZHRo
KCksIDApKTsKICAgICAgICAgfQogICAgICAgICBMYXlvdXRSZWN0IGxheWVyQm91bmRzKDBfbHUs
IDBfbHUsIGJveC0+Y2xpZW50V2lkdGgoKSwgYm94LT5jbGllbnRIZWlnaHQoKSk7CiAgICAgICAg
IGV4cGFuZFNjcm9sbFJlY3RUb1Zpc2libGVUYXJnZXRSZWN0VG9JbmNsdWRlU2Nyb2xsUGFkZGlu
Zyhib3gsIGxheWVyQm91bmRzLCBsb2NhbEV4cG9zZVJlY3QpOwogICAgICAgICBMYXlvdXRSZWN0
IHJldmVhbFJlY3QgPSBnZXRSZWN0VG9FeHBvc2UobGF5ZXJCb3VuZHMsIGxvY2FsRXhwb3NlUmVj
dCwgaW5zaWRlRml4ZWQsIG9wdGlvbnMuYWxpZ25YLCBvcHRpb25zLmFsaWduWSk7CiAKLSAgICAg
ICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3JvbGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChz
Y3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShyb3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2Nh
dGlvbigpKSk7Ci0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNl
dCgpIHx8IGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpICE9IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpOb3RJbkFuaW1hdGlvbikgewotICAgICAgICAgICAgU2Nyb2xsT2Zmc2V0IG9sZFNjcm9s
bE9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwotICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xh
bXBlZFNjcm9sbE9mZnNldCwgc2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zRm9yRWxlbWVudChi
b3gtPmVsZW1lbnQoKSkpOwotICAgICAgICAgICAgSW50U2l6ZSBzY3JvbGxPZmZzZXREaWZmZXJl
bmNlID0gY2xhbXBlZFNjcm9sbE9mZnNldCAtIG9sZFNjcm9sbE9mZnNldDsKLSAgICAgICAgICAg
IGxvY2FsRXhwb3NlUmVjdC5tb3ZlKC1zY3JvbGxPZmZzZXREaWZmZXJlbmNlKTsKLSAgICAgICAg
ICAgIG5ld1JlY3QgPSBMYXlvdXRSZWN0KGJveC0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1
YWQoRmxvYXRSZWN0KGxvY2FsRXhwb3NlUmVjdCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0Jv
eCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzY3JvbGxhYmxlTGF5
ZXItPnVwZGF0ZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9uc0ZvckVs
ZW1lbnQoYm94LT5lbGVtZW50KCkpLCByZXZlYWxSZWN0LCBsb2NhbEV4cG9zZVJlY3QpKQorICAg
ICAgICAgICAgbmV3UmVjdCA9IHJlc3VsdC52YWx1ZSgpOwogICAgIH0gZWxzZSBpZiAoIXBhcmVu
dExheWVyKSB7CiAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50ID0g
cmVuZGVyZXIoKS5kb2N1bWVudCgpLm93bmVyRWxlbWVudCgpOwogCkBAIC0yODYwLDcgKzI3MDMs
NyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJl
Y3QmIGFic29sdXRlUmVjdCwgYm9vbCBpbnNpZAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMg
YXNzZXJ0aW9uIGZpcmVzIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgb3duZXJFbGVtZW50IGZyb20g
YmVpbmcgZGVzdHJveWVkLgogICAgICAgICAgICAgICAgIFNjcmlwdERpc2FsbG93ZWRTY29wZTo6
SW5NYWluVGhyZWFkIHNjcmlwdERpc2FsbG93ZWRTY29wZTsKIAotICAgICAgICAgICAgICAgIExh
eW91dFJlY3Qgdmlld1JlY3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlP
U0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgICAgICAgICAgICAgIExheW91dFJlY3Qgdmlld1Jl
Y3QgPSBmcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KFNjcm9sbGFibGVBcmVhOjpMZWdhY3lJ
T1NEb2N1bWVudFZpc2libGVSZWN0KTsKIAogICAgICAgICAgICAgICAgIGF1dG8qIGVsZW1lbnQg
PSBvd25lckVsZW1lbnQtPmNvbnRlbnREb2N1bWVudCgpID8gb3duZXJFbGVtZW50LT5jb250ZW50
RG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgOiBudWxscHRyOwogICAgICAgICAgICAgICAg
IFJlbmRlckJveCogcmVuZGVyZXIgPSBlbGVtZW50ID8gZWxlbWVudC0+cmVuZGVyQm94KCkgOiBu
dWxscHRyOwpAQCAtMjkzNiwyMyArMjc3OSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFJl
Y3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkCiAg
ICAgICAgIHBhcmVudExheWVyLT5zY3JvbGxSZWN0VG9WaXNpYmxlKG5ld1JlY3QsIGluc2lkZUZp
eGVkLCBvcHRpb25zKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlQ29tcG9zaXRpbmdM
YXllcnNBZnRlclNjcm9sbCgpCi17Ci0gICAgaWYgKGNvbXBvc2l0b3IoKS5oYXNDb250ZW50Q29t
cG9zaXRpbmdMYXllcnMoKSkgewotICAgICAgICAvLyBPdXIgc3RhY2tpbmcgY29udGFpbmVyIGlz
IGd1YXJhbnRlZWQgdG8gY29udGFpbiBhbGwgb2Ygb3VyIGRlc2NlbmRhbnRzIHRoYXQgbWF5IG5l
ZWQKLSAgICAgICAgLy8gcmVwb3NpdGlvbmluZywgc28gdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVy
cyBmcm9tIHRoZXJlLgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGNvbXBvc2l0aW5nQW5jZXN0
b3IgPSBzdGFja2luZ0NvbnRleHQoKS0+ZW5jbG9zaW5nQ29tcG9zaXRpbmdMYXllcigpKSB7Ci0g
ICAgICAgICAgICBpZiAodXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKLSAgICAgICAgICAgICAg
ICBjb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVU
eXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBvc2l0aW5nQW5jZXN0b3IpOwotICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25s
eSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25zIHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5n
LgotICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nQW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVl
ZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKLSAgICAgICAgICAgICAgICBj
b21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBl
OjpPblNjcm9sbCwgY29tcG9zaXRpbmdBbmNlc3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KIExheW91dFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShj
b25zdCBMYXlvdXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgZXhwb3NlUmVj
dCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgsIGNvbnN0
IFNjcm9sbEFsaWdubWVudCYgYWxpZ25ZKSBjb25zdAogewogICAgIEZyYW1lVmlldyYgZnJhbWVW
aWV3ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCk7CkBAIC0zMDk5LDcgKzI5MjUsNyBA
QCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQs
IGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGVsZW1lbnQtPnNldE1pbmltdW1TaXplRm9y
UmVzaXppbmcobWluaW11bVNpemUpOwogICAgIAogICAgIExheW91dFNpemUgYWRqdXN0ZWRPbGRP
ZmZzZXQgPSBMYXlvdXRTaXplKG9sZE9mZnNldC53aWR0aCgpIC8gem9vbUZhY3Rvciwgb2xkT2Zm
c2V0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7Ci0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJl
Y3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkgeworICAgIGlmIChyZW5kZXJlci0+c2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKSB7CiAgICAgICAgIG5ld09mZnNldC5zZXRX
aWR0aCgtbmV3T2Zmc2V0LndpZHRoKCkpOwogICAgICAgICBhZGp1c3RlZE9sZE9mZnNldC5zZXRX
aWR0aCgtYWRqdXN0ZWRPbGRPZmZzZXQud2lkdGgoKSk7CiAgICAgfQpAQCAtMzEyNCwxMDc4ICsy
OTUwLDE2MCBAQCB2b2lkIFJlbmRlckxheWVyOjpyZXNpemUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldnQsIGNvbnN0IExheW91dFNpemUmIG9sZE9mZgogICAgIGlmIChyZXNpemUgIT0gUmVz
aXplOjpIb3Jpem9udGFsICYmIGRpZmZlcmVuY2UuaGVpZ2h0KCkpIHsKICAgICAgICAgaWYgKGlz
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgLy8gTWFr
ZSBpbXBsaWNpdCBtYXJnaW5zIGZyb20gdGhlIHRoZW1lIGV4cGxpY2l0IChzZWUgPGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk1NDc+KS4KLSAgICAgICAgICAgIHN0eWxl
ZEVsZW1lbnQtPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJl
bmRlcmVyLT5tYXJnaW5Ub3AoKSAvIHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOwot
ICAgICAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eU1hcmdpbkJvdHRvbSwgcmVuZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3Rvciwg
Q1NTVW5pdFR5cGU6OkNTU19QWCk7Ci0gICAgICAgIH0KLSAgICAgICAgTGF5b3V0VW5pdCBiYXNl
SGVpZ2h0ID0gcmVuZGVyZXItPmhlaWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6
IHJlbmRlcmVyLT52ZXJ0aWNhbEJvcmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7Ci0gICAgICAgIGJh
c2VIZWlnaHQgPSBiYXNlSGVpZ2h0IC8gem9vbUZhY3RvcjsKLSAgICAgICAgc3R5bGVkRWxlbWVu
dC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChi
YXNlSGVpZ2h0ICsgZGlmZmVyZW5jZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOwot
ICAgIH0KLQotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gRklYTUUgKFJh
ZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5kb3cgYXMgbmVj
ZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmlldy4KLX0KLQot
dm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgb2Zm
c2V0KQotewotICAgIHNjcm9sbFRvKHNjcm9sbFBvc2l0aW9uRnJvbU9mZnNldChvZmZzZXQpKTsK
LX0KLQotU2Nyb2xsaW5nTm9kZUlEIFJlbmRlckxheWVyOjpzY3JvbGxpbmdOb2RlSUQoKSBjb25z
dAotewotICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIGJhY2tpbmcoKS0+c2Nyb2xsaW5nTm9kZUlERm9yUm9sZShTY3JvbGxDb29yZGluYXRp
b25Sb2xlOjpTY3JvbGxpbmcpOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpoYW5kbGVXaGVlbEV2
ZW50Rm9yU2Nyb2xsaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0
aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+IGdlc3R1cmVTdGF0ZSkKLXsKLSAgICBpZiAo
IWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0jaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKLSAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5n
KCkgJiYgc2Nyb2xsaW5nTm9kZUlEKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmco
d2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCksIGdlc3R1cmVTdGF0ZSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVsRXZlbnRGb3JTY3Jv
bGxpbmcod2hlZWxFdmVudCwgZ2VzdHVyZVN0YXRlKTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXll
cjo6dmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVkZXNT
Y3JvbGxiYXJzIHNjcm9sbGJhckluY2x1c2lvbiwgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBzY3JvbGxiYXJTcGFjZTsKLSAgICBpZiAoc2hvd3NPdmVy
Zmxvd0NvbnRyb2xzKCkgJiYgc2Nyb2xsYmFySW5jbHVzaW9uID09IEluY2x1ZGVTY3JvbGxiYXJz
KQotICAgICAgICBzY3JvbGxiYXJTcGFjZSA9IHNjcm9sbGJhckludHJ1c2lvbigpOwotICAgIAot
ICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOwotICAgIHJldHVybiB7
IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgoKSAtIHNj
cm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWlnaHQoKSAt
IHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6
Om92ZXJoYW5nQW1vdW50KCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0g
ICAgaWYgKCFyZW5kZXJlcigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFi
bGVSZWdpb25zRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgSW50
U2l6ZSBzdHJldGNoOwotCi0gICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCks
IG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgotICAgIFNjcm9sbE9mZnNldCBz
Y3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24oKSk7
Ci0gICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKTsK
LSAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0
KHNjcm9sbE9mZnNldC55KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkg
JiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlSGVp
Z2h0KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAocmVh
Y2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgaWYgKHNjcm9s
bE9mZnNldC54KCkgPCAwKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNldC54
KCkpOwotICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZzZXQu
eCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCi0gICAgICAgIHN0
cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRoKCkg
LSB2aXNpYmxlV2lkdGgoKSkpOwotCi0gICAgcmV0dXJuIHN0cmV0Y2g7Ci0jZWxzZQotICAgIHJl
dHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNBY3RpdmUo
KSBjb25zdAotewotICAgIHJldHVybiBwYWdlKCkuZm9jdXNDb250cm9sbGVyKCkuaXNBY3RpdmUo
KTsKLX0KLQotSW50UmVjdCBSZW5kZXJMYXllcjo6c2Nyb2xsQ29ybmVyUmVjdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnNjcm9sbENvcm5lcjsKLX0KLQot
Ym9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QKLXsKLSAgICBB
U1NFUlQocmVuZGVyZXIoKS5pc0JveCgpKTsKLSAgICByZXR1cm4gIXNjcm9sbENvcm5lclJlY3Qo
KS5pc0VtcHR5KCk7Ci19Ci0KLUludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tU2Nyb2xs
YmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKLXsKLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxi
YXJSZWN0OwotICAgIHJlY3QubW92ZShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0KLSAg
ICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJl
clRvQ29udGFpbmluZ1ZpZXcoJnJlbmRlcmVyKCksIHJlY3QpOwotfQotCi1JbnRSZWN0IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci17Ci0gICAg
SW50UmVjdCByZWN0ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21D
b250YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFJlY3QpOwotICAgIHJl
Y3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwotICAgIHJldHVybiByZWN0Owot
fQotCi1JbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xs
YmFyUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9pbnQgPSBzY3JvbGxiYXJQb2ludDsK
LSAgICBwb2ludC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKLSAgICByZXR1cm4g
cmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFp
bmluZ1ZpZXcoJnJlbmRlcmVyKCksIHBvaW50KTsKLX0KLQotSW50UG9pbnQgUmVuZGVyTGF5ZXI6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAotewotICAgIEludFBv
aW50IHBvaW50ID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21Db250
YWluaW5nVmlld1RvUmVuZGVyZXIoJnJlbmRlcmVyKCksIHBhcmVudFBvaW50KTsKLSAgICBwb2lu
dC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Ci0gICAgcmV0dXJuIHBvaW50Owot
fQotCi1JbnRTaXplIFJlbmRlckxheWVyOjp2aXNpYmxlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKLQotICAgIHJldHVybiBJbnRTaXplKHJvdW5kVG9JbnQoYm94LT5jbGllbnRX
aWR0aCgpKSwgcm91bmRUb0ludChib3gtPmNsaWVudEhlaWdodCgpKSk7Ci19Ci0KLUludFNpemUg
UmVuZGVyTGF5ZXI6OmNvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFNpemUo
c2Nyb2xsV2lkdGgoKSwgc2Nyb2xsSGVpZ2h0KCkpOwotfQotCi1JbnRTaXplIFJlbmRlckxheWVy
OjpyZWFjaGFibGVUb3RhbENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjb250
ZW50c1NpemUgPSB0aGlzLT5jb250ZW50c1NpemUoKTsKLQotICAgIGlmICghaGFzU2Nyb2xsYWJs
ZUhvcml6b250YWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50c1NpemUuc2V0V2lkdGgoc3Rk
OjptaW4oY29udGVudHNTaXplLndpZHRoKCksIHZpc2libGVTaXplKCkud2lkdGgoKSkpOwotCi0g
ICAgaWYgKCFoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKQotICAgICAgICBjb250ZW50
c1NpemUuc2V0SGVpZ2h0KHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS5oZWlnaHQoKSwgdmlzaWJsZVNp
emUoKS5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllcjo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFuZ2VkKEF2YWlsYWJsZVNpemVDaGFu
Z2VSZWFzb24gcmVhc29uKQotewotICAgIFNjcm9sbGFibGVBcmVhOjphdmFpbGFibGVDb250ZW50
U2l6ZUNoYW5nZWQocmVhc29uKTsKLQotICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxlU2l6ZUNo
YW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKLSAgICAgICAgaWYgKGlzPFJlbmRlckJs
b2NrPihyZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5k
ZXJlcigpKS5zZXRTaG91bGRGb3JjZVJlbGF5b3V0Q2hpbGRyZW4odHJ1ZSk7Ci0gICAgICAgIHJl
bmRlcmVyKCkuc2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6
OnNob3VsZFN1c3BlbmRTY3JvbGxBbmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVu
ZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMo
KTsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIFJlbmRlckxheWVyOjpkaWRT
dGFydFNjcm9sbCgpCi17Ci0gICAgcGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmRpZFN0YXJ0T3Zl
cmZsb3dTY3JvbGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6ZGlkRW5kU2Nyb2xsKCkKLXsK
LSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlkRW5kT3ZlcmZsb3dTY3JvbGwoKTsKLX0K
LSAgICAKLXZvaWQgUmVuZGVyTGF5ZXI6OmRpZFVwZGF0ZVNjcm9sbCgpCi17Ci0gICAgLy8gU2Vu
ZCB0aGlzIG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Ug
a2VlcCBzZWxlY3Rpb24gdXBkYXRlZC4KLSAgICBwYWdlKCkuY2hyb21lKCkuY2xpZW50KCkuZGlk
TGF5b3V0KENocm9tZUNsaWVudDo6U2Nyb2xsKTsKLX0KLSNlbmRpZgotCi1JbnRQb2ludCBSZW5k
ZXJMYXllcjo6bGFzdEtub3duTW91c2VQb3NpdGlvbkluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1vdXNlUG9zaXRpb25J
blZpZXcoKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNIYW5kbGluZ1doZWVsRXZlbnQoKSBj
b25zdAotewotICAgIHJldHVybiByZW5kZXJlcigpLmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaXNI
YW5kbGluZ1doZWVsRXZlbnQoKTsKLX0KLQotUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJl
Y3RzIFJlbmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAotewotICAgIEFT
U0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKTsKLSAgICBhdXRvJiByZW5kZXJCb3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwotICAgIC8vIFNjcm9sbGJhcnMgc2l0IGlu
c2lkZSB0aGUgYm9yZGVyIGJveC4KLSAgICBhdXRvIG92ZXJmbG93Q29udHJvbHNQb3NpdGlvbmlu
Z1JlY3QgPSBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3gucGFkZGluZ0JveFJlY3RJbmNsdWRpbmdT
Y3JvbGxiYXIoKSk7Ci0KLSAgICBhdXRvIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgPSBtX2hC
YXIgPyBtX2hCYXItPmhlaWdodCgpIDogMDsKLSAgICBhdXRvIHZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGggPSBtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiAwOwotCi0gICAgYXV0byBpc05vbk92ZXJs
YXlTY3JvbGxiYXIgPSBbXShjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhcikgewotICAgICAgICBy
ZXR1cm4gc2Nyb2xsYmFyICYmICFzY3JvbGxiYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpOwotICAg
IH07Ci0KLSAgICBib29sIGhhdmVOb25PdmVybGF5SG9yaXpvbnRhbFNjcm9sbGJhciA9IGlzTm9u
T3ZlcmxheVNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwotICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlW
ZXJ0aWNhbFNjcm9sbGJhciA9IGlzTm9uT3ZlcmxheVNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwot
ICAgIGJvb2wgcGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHNob3VsZFBsYWNlQmxv
Y2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKTsKLSAgICBib29sIGhhdmVSZXNpemVyID0gcmVu
ZGVyZXIoKS5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKLSAgICBib29sIHNjcm9s
bGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgJiYg
aGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNpemVyICYmIChoYXZl
Tm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNj
cm9sbGJhcikpOwotCi0gICAgSW50U2l6ZSBjb3JuZXJTaXplOwotICAgIGlmIChzY3JvbGxiYXJz
QXZvaWRDb3JuZXIpIHsKLSAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xsYmFyIGlzIHByZXNl
bnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgotICAgICAgICBjb3JuZXJTaXplID0gSW50U2l6ZSB7
Ci0gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGljYWxTY3JvbGxiYXJX
aWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCi0gICAgICAgICAgICBob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBPdmVyZmxvd0NvbnRyb2xSZWN0
cyByZXN1bHQ7Ci0KLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGF1dG8gYmFyUmVjdCA9IG92
ZXJmbG93Q29udHJvbHNQb3NpdGlvbmluZ1JlY3Q7Ci0gICAgICAgIGJhclJlY3Quc2hpZnRZRWRn
ZVRvKGJhclJlY3QubWF4WSgpIC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCk7Ci0gICAgICAg
IGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKLSAgICAgICAgICAgIGlmIChwbGFjZVZlcnRp
Y2FsU2Nyb2xsYmFyT25UaGVMZWZ0KQotICAgICAgICAgICAgICAgIGJhclJlY3Quc2hpZnRYRWRn
ZVRvKGJhclJlY3QueCgpICsgY29ybmVyU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KGNvcm5lclNpemUud2lkdGgoKSwgMCk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuaG9yaXpvbnRhbFNjcm9sbGJhciA9IGJhclJl
Y3Q7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBhdXRvIGJhclJlY3QgPSBv
dmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0OwotICAgICAgICBpZiAocGxhY2VWZXJ0aWNh
bFNjcm9sbGJhck9uVGhlTGVmdCkKLSAgICAgICAgICAgIGJhclJlY3Quc2V0V2lkdGgodmVydGlj
YWxTY3JvbGxiYXJXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhclJlY3Quc2hp
ZnRYRWRnZVRvKGJhclJlY3QubWF4WCgpIC0gdmVydGljYWxTY3JvbGxiYXJXaWR0aCk7Ci0KLSAg
ICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKLSAgICAgICAgICAgIGJhclJlY3QuY29u
dHJhY3QoMCwgY29ybmVyU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgcmVzdWx0LnZlcnRpY2Fs
U2Nyb2xsYmFyID0gYmFyUmVjdDsKLSAgICB9Ci0KLSAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0o
SW50U2l6ZSBjb3JuZXJTaXplKSB7Ci0gICAgICAgIGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFy
T25UaGVMZWZ0KSB7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxv
d0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhNYXhZQ29ybmVyKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENvcm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIu
eSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwgY29ybmVyU2l6ZSB9OwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5t
YXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwgY29ybmVyU2l6ZSB9OwotICAgIH07Ci0KLSAg
ICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICByZXN1bHQuc2Nyb2xsQ29ybmVy
ID0gY29ybmVyUmVjdChjb3JuZXJTaXplKTsKLQotICAgIGlmIChoYXZlUmVzaXplcikgewotICAg
ICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKQotICAgICAgICAgICAgcmVzdWx0LnJlc2l6
ZXIgPSByZXN1bHQuc2Nyb2xsQ29ybmVyOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1
dG8gc2Nyb2xsYmFyVGhpY2tuZXNzID0gU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkuc2Nyb2xsYmFy
VGhpY2tuZXNzKCk7Ci0gICAgICAgICAgICByZXN1bHQucmVzaXplciA9IGNvcm5lclJlY3QoeyBz
Y3JvbGxiYXJUaGlja25lc3MsIHNjcm9sbGJhclRoaWNrbmVzcyB9KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUludFNpemUgUmVuZGVyTGF5ZXI6OnNjcm9s
bGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKLXsKLSAgICBhdXRv
IHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9
PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxT
Y3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0
KCkpCi0gICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5s
b2NhdGlvbigpKTsKLSAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXImIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoIXNob3dz
T3ZlcmZsb3dDb250cm9scygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoJnNjcm9sbGJh
ciA9PSBtX3ZCYXIuZ2V0KCkpIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSB7Ci0gICAgICAgICAgICBsYXllci0+c2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KHJlY3QpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJGb3JI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpIHsKLSAgICAgICAgICAgIGxheWVyLT5zZXROZWVkc0Rpc3Bs
YXlJblJlY3QocmVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhdXRvIHNjcm9sbFJlY3QgPSByZWN0OwotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0gICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0
ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgotICAgIGlmICgh
Ym94LT5wYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOwotCi0gICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KQotICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKLSAgICBlbHNlCi0gICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
ID0gc2Nyb2xsUmVjdDsKLSAgICByZW5kZXJCb3goKS0+ZmxpcEZvcldyaXRpbmdNb2RlKHJlcGFp
bnRSZWN0KTsKLSAgICByZW5kZXJlcigpLnJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOwot
fQotCi12b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7Ci0gICAgaWYgKG1f
cmVzaXplcikKLSAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOwotfQot
Ci1zdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQotewotICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUo
KTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUoKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKGhvcml6b250
YWxTY3JvbGxiYXIoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OnZlcnRpY2FsU2Nyb2xsYmFy
SGlkZGVuQnlTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5U3R5
bGUodmVydGljYWxTY3JvbGxiYXIoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXJGb3JTY3JvbGxiYXIoUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIp
Ci17Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJlci5lbGVtZW50KCkpIHsKLSAg
ICAgICAgaWYgKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSBlbGVtZW50LT5jb250YWluaW5nU2hh
ZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93Um9vdC0+bW9kZSgpID09IFNoYWRv
d1Jvb3RNb2RlOjpVc2VyQWdlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNoYWRvd1Jvb3Qt
Pmhvc3QoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAmcmVu
ZGVyZXI7Ci19Ci0KLVJlZjxTY3JvbGxiYXI+IFJlbmRlckxheWVyOjpjcmVhdGVTY3JvbGxiYXIo
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJh
cj4gd2lkZ2V0OwotICAgIEFTU0VSVChyZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKSk7
Ci0gICAgYXV0byYgYWN0dWFsUmVuZGVyZXIgPSAqcmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVy
ZXIoKSk7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IGlzPFJlbmRlckJveD4o
YWN0dWFsUmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckJveD4oYWN0dWFsUmVuZGVyZXIpLnN0
eWxlKCkuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcik7Ci0gICAgaWYgKGhhc0N1
c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNy
ZWF0ZUN1c3RvbVNjcm9sbGJhcigqdGhpcywgb3JpZW50YXRpb24sIGRvd25jYXN0PFJlbmRlckJv
eD4oYWN0dWFsUmVuZGVyZXIpLmVsZW1lbnQoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHdpZGdl
dCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRhdGlvbiwg
U2Nyb2xsYmFyQ29udHJvbFNpemU6OlJlZ3VsYXIpOwotICAgICAgICBkaWRBZGRTY3JvbGxiYXIo
d2lkZ2V0LmdldCgpLCBvcmllbnRhdGlvbik7Ci0gICAgICAgIGlmIChwYWdlKCkuaXNNb25pdG9y
aW5nV2hlZWxFdmVudHMoKSkKLSAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0V2hlZWxF
dmVudFRlc3RNb25pdG9yKHBhZ2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7Ci0gICAgfQot
ICAgIHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmFkZENoaWxkKCp3aWRnZXQpOwotICAg
IHJldHVybiB3aWRnZXQucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
ZGVzdHJveVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKLXsKLSAg
ICBSZWZQdHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhciA/IG1faEJhciA6IG1fdkJhcjsKLSAgICBpZiAoIXNjcm9sbGJhcikKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCi0g
ICAgICAgIHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7
Ci0KLSAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICBzY3JvbGxiYXIgPSBu
dWxscHRyOwotfQotCi1ib29sIFJlbmRlckxheWVyOjpzY3JvbGxzT3ZlcmZsb3coKSBjb25zdAot
ewotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSkuc2Nyb2xs
c092ZXJmbG93KCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXI6OnNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Njcm9sbGJhciA9PSBoYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNTY3Jv
bGxiYXIpIHsKLSAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxTY3Jv
bGxiYXIpOwotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAgICAgU2Nyb2xsRWxhc3Rp
Y2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIoKS5zZXR0aW5n
cygpLnJ1YmJlckJhbmRpbmdGb3JTdWJTY3JvbGxhYmxlUmVnaW9uc0VuYWJsZWQoKSA/IFNjcm9s
bEVsYXN0aWNpdHlBdXRvbWF0aWMgOiBTY3JvbGxFbGFzdGljaXR5Tm9uZTsKLSAgICAgICAgU2Ny
b2xsYWJsZUFyZWE6OnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0aWNpdHkpOwot
I2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihIb3Jpem9udGFs
U2Nyb2xsYmFyKTsKLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgICAgIFNjcm9sbGFi
bGVBcmVhOjpzZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9u
ZSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5nIG9uZSBi
YXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAgV2UgbmVl
ZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlmIChtX2hC
YXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJhcikKLSAg
ICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6c2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCi17Ci0gICAgaWYgKGhhc1Nj
cm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoaGFzU2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxFbGFzdGljaXR5IGVsYXN0aWNpdHkgPSBzY3JvbGxzT3ZlcmZsb3coKSAmJiByZW5kZXJl
cigpLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxl
ZCgpID8gU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOwot
ICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KGVsYXN0
aWNpdHkpOwotI2VuZGlmCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZGVzdHJveVNjcm9sbGJhcihW
ZXJ0aWNhbFNjcm9sbGJhcik7Ci0jaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotICAgICAgICBT
Y3JvbGxhYmxlQXJlYTo6c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNp
dHlOb25lKTsKLSNlbmRpZgotICAgIH0KLQotICAgICAvLyBEZXN0cm95aW5nIG9yIGNyZWF0aW5n
IG9uZSBiYXIgY2FuIGNhdXNlIG91ciBzY3JvbGxiYXIgY29ybmVyIHRvIGNvbWUgYW5kIGdvLiAg
V2UgbmVlZCB0byB1cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgotICAgIGlm
IChtX2hCYXIpCi0gICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgaWYgKG1fdkJh
cikKLSAgICAgICAgbV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKLX0KLQotU2Nyb2xsYWJsZUFyZWEq
IFJlbmRlckxheWVyOjplbmNsb3NpbmdTY3JvbGxhYmxlQXJlYSgpIGNvbnN0Ci17Ci0gICAgaWYg
KGF1dG8qIHNjcm9sbGFibGVMYXllciA9IGVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRl
U2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKSkKLSAgICAg
ICAgcmV0dXJuIHNjcm9sbGFibGVMYXllcjsKLQotICAgIHJldHVybiAmcmVuZGVyZXIoKS52aWV3
KCkuZnJhbWVWaWV3KCk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6OmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGUoKQotewotICAgIHJldHVybiByZW5kZXJlcigpLmlzU2Nyb2xsYWJsZU9yUnVi
YmVyYmFuZGFibGVCb3goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZU9y
UnViYmVyYmFuZGFibGVBbmNlc3RvcigpCi17Ci0gICAgZm9yIChhdXRvKiBuZXh0TGF5ZXIgPSBl
bmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXllcigqdGhpcywgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6
Olllcyk7IG5leHRMYXllcjsgbmV4dExheWVyID0gZW5jbG9zaW5nQ29udGFpbmluZ0Jsb2NrTGF5
ZXIoKm5leHRMYXllciwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6OlllcykpIHsKLSAgICAgICAgaWYg
KG5leHRMYXllci0+aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjp1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlbmRlcmVy
KCkudXNlRGFya0FwcGVhcmFuY2UoKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCi17Ci0gICAgLy8gRklYTUU6
IEV4dGVuZCBzdXBwb3J0IGJleW9uZCBIVE1MRWxlbWVudHMuCi0gICAgaWYgKCFpczxIVE1MRWxl
bWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSB8fCAhZW5jbG9zaW5nRWxlbWVudCgpLT5yZW5kZXJC
b3goKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdF
bGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMsICpib3gsIGJveC0+c3R5bGUoKSwgYm94LT5wYWRkaW5nQm94UmVjdCgpKTsK
LX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aXNTY3JvbGxTbmFwSW5Qcm9ncmVzcygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpIHsKLSAgICAgICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNu
YXBJblByb2dyZXNzKHNjcm9sbGluZ05vZGVJRCgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGlmIChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xs
QW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJ
blByb2dyZXNzKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNlbmRpZgotCi1ib29sIFJl
bmRlckxheWVyOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
RGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OmxvZ01vY2tTY3JvbGxBbmltYXRvck1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBjb25zdAotewotICAgIHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25z
b2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJl
bmRlckxheWVyOiAiICsgbWVzc2FnZSk7Ci19Ci0KLVN0cmluZyBSZW5kZXJMYXllcjo6ZGVidWdE
ZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1
aWxkZXIuYXBwZW5kKCJSZW5kZXJMYXllciAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pih0aGlzKSwgTG93ZXJjYXNlKSwgJyAnLCBzaXplKCkud2lkdGgoKSwgJ3gnLCBzaXpl
KCkuaGVpZ2h0KCkpOwotCi0gICAgaWYgKHRyYW5zZm9ybSgpKQotICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIGhhcyB0cmFuc2Zvcm0iX3MpOwotCi0gICAgaWYgKGhhc0ZpbHRlcigpKQotICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIGhhcyBmaWx0ZXIiX3MpOwotCi0gICAgaWYgKGhhc0JhY2tkcm9w
RmlsdGVyKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJf
cyk7Ci0KLSAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIg
aGFzIGJsZW5kIG1vZGUiX3MpOwotCi0gICAgaWYgKGlzb2xhdGVzQmxlbmRpbmcoKSkKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiBpc29sYXRlcyBibGVuZGluZyJfcyk7Ci0KLSAgICBpZiAoaXND
b21wb3NpdGVkKCkpIHsKLSAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdCdWlsZGVyL1Rl
eHRTdHJlYW0gaW50ZWdyYXRpb24uCi0gICAgICAgIFRleHRTdHJlYW0gc3RyZWFtOwotICAgICAg
ICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0
cmVhbS5yZWxlYXNlKCkpOwotICAgIH0KLQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci19Ci0KLWludCBSZW5kZXJMYXllcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Ny
b2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZCYXIK
LSAgICAgICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX3ZCYXIt
PmlzT3ZlcmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9s
bGJhclNpemUgfHwgIW1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3ZCYXItPndpZHRoKCk7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFy
U2l6ZVJlbGV2YW5jeSByZWxldmFuY3kpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hCYXIKLSAgICAg
ICAgfHwgIXNob3dzT3ZlcmZsb3dDb250cm9scygpCi0gICAgICAgIHx8IChtX2hCYXItPmlzT3Zl
cmxheVNjcm9sbGJhcigpICYmIChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNp
emUgfHwgIW1faEJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2hCYXItPmhlaWdodCgpOwotfQotCi1JbnRTaXpl
IFJlbmRlckxheWVyOjpvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBvaW50JiBsb2Nh
bFBvaW50KSBjb25zdAotewotICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKS5yZXNpemVyOwotICAgIGF1dG8gcmVzaXplQ29ybmVyID0gc2hvdWxkUGxhY2VCbG9j
a0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpID8gcmVzaXplclJlY3QubWluWE1heFlDb3JuZXIo
KSA6IHJlc2l6ZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCk7Ci0gICAgcmV0dXJuIGxvY2FsUG9pbnQg
LSByZXNpemVDb3JuZXI7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc092ZXJmbG93Q29udHJv
bHMoKSBjb25zdAotewotICAgIHJldHVybiBtX2hCYXIgfHwgbV92QmFyIHx8IG1fc2Nyb2xsQ29y
bmVyIHx8IHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXpl
JiBvZmZzZXRGcm9tUm9vdCkKLXsKLSAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFjYW5S
ZXNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyZW5kZXJCb3goKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOwot
Ci0gICAgaWYgKG1fdkJhcikgewotICAgICAgICByZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5tb3Zl
KG9mZnNldEZyb21Sb290KTsKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QocmVjdHMudmVy
dGljYWxTY3JvbGxiYXIpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAg
IHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7Ci0gICAgICAg
IG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIH0K
LQotICAgIGlmIChtX3Njcm9sbENvcm5lcikKLSAgICAgICAgbV9zY3JvbGxDb3JuZXItPnNldEZy
YW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOwotCi0gICAgaWYgKG1fcmVzaXplcikKLSAgICAg
ICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Ci19Ci0KLWludCBSZW5k
ZXJMYXllcjo6c2Nyb2xsV2lkdGgoKSBjb25zdAotewotICAgIEFTU0VSVChyZW5kZXJCb3goKSk7
Ci0gICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICBjb25zdF9jYXN0PFJl
bmRlckxheWVyKj4odGhpcyktPmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7Ci0gICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBzbmFwcGVkSW50U2l6ZSgpIGluc3RlYWQgd2l0aCBhYnNvbHV0
ZSBjb29yZGluYXRlcy4KLSAgICByZXR1cm4gbV9zY3JvbGxTaXplLndpZHRoKCk7Ci19Ci0KLWlu
dCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQocmVuZGVy
Qm94KCkpOwotICAgIGlmIChtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSkKLSAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJMYXllcio+KHRoaXMpLT5jb21wdXRlU2Nyb2xsRGltZW5zaW9ucygpOwotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2Ugc25hcHBlZEludFNpemUoKSBpbnN0ZWFkIHdpdGgg
YWJzb2x1dGUgY29vcmRpbmF0ZXMuCi0gICAgcmV0dXJuIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dUb3AoKSBjb25zdAotewotICAg
IFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1Jl
Y3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01v
ZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnkoKTsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAotewotICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94
LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3Zl
cmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKLXsKLSAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwotICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwotICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC54KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVu
ZGVyTGF5ZXI6Om92ZXJmbG93UmlnaHQoKSBjb25zdAotewotICAgIFJlbmRlckJveCogYm94ID0g
cmVuZGVyQm94KCk7Ci0gICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKSk7Ci0gICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsK
LSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVy
Qm94KCk7Ci0gICAgQVNTRVJUKGJveCk7Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9
IGZhbHNlOwotCi0gICAgbV9zY3JvbGxTaXplLnNldFdpZHRoKHJvdW5kVG9JbnQob3ZlcmZsb3dS
aWdodCgpIC0gb3ZlcmZsb3dMZWZ0KCkpKTsKLSAgICBtX3Njcm9sbFNpemUuc2V0SGVpZ2h0KHJv
dW5kVG9JbnQob3ZlcmZsb3dCb3R0b20oKSAtIG92ZXJmbG93VG9wKCkpKTsKLQotICAgIGludCBz
Y3JvbGxhYmxlTGVmdE92ZXJmbG93ID0gcm91bmRUb0ludChvdmVyZmxvd0xlZnQoKSAtIGJveC0+
Ym9yZGVyTGVmdCgpKTsKLSAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJh
ck9uTGVmdCgpKQotICAgICAgICBzY3JvbGxhYmxlTGVmdE92ZXJmbG93IC09IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoKTsKLSAgICBpbnQgc2Nyb2xsYWJsZVRvcE92ZXJmbG93ID0gcm91bmRUb0lu
dChvdmVyZmxvd1RvcCgpIC0gYm94LT5ib3JkZXJUb3AoKSk7Ci0gICAgc2V0U2Nyb2xsT3JpZ2lu
KEludFBvaW50KC1zY3JvbGxhYmxlTGVmdE92ZXJmbG93LCAtc2Nyb2xsYWJsZVRvcE92ZXJmbG93
KSk7Ci0gICAgCi0gICAgY29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y29tcHV0ZUhhc0NvbXBvc2l0ZWRTY3JvbGxhYmxlT3Zl
cmZsb3coKQotewotICAgIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdyA9IGNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSAmJiAoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxv
dygpIHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi1ib29sIFJlbmRl
ckxheWVyOjpoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaGFzSG9yaXpvbnRhbE92ZXJmbG93KCkgJiYgcmVuZGVyQm94KCktPnNjcm9sbHNPdmVy
Zmxvd1goKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3Zl
cmZsb3coKSBjb25zdAotewotICAgIHJldHVybiBoYXNWZXJ0aWNhbE92ZXJmbG93KCkgJiYgcmVu
ZGVyQm94KCktPnNjcm9sbHNPdmVyZmxvd1koKTsKLX0KLQotYm9vbCBSZW5kZXJMYXllcjo6aGFz
SG9yaXpvbnRhbE92ZXJmbG93KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5z
aW9uc0RpcnR5KTsKLQotICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChyZW5k
ZXJCb3goKS0+Y2xpZW50V2lkdGgoKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTGF5ZXI6Omhhc1ZlcnRp
Y2FsT3ZlcmZsb3coKSBjb25zdAotewotICAgIEFTU0VSVCghbV9zY3JvbGxEaW1lbnNpb25zRGly
dHkpOwotCi0gICAgcmV0dXJuIHNjcm9sbEhlaWdodCgpID4gcm91bmRUb0ludChyZW5kZXJCb3go
KS0+Y2xpZW50SGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgYm9vbCBzdHlsZVJlcXVpcmVzU2Nyb2xs
YmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gYXhpcykK
LXsKLSAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Nyb2xsYmFyT3JpZW50YXRpb246
Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1goKSA6IHN0eWxlLm92ZXJmbG93
WSgpOwotICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG8gPSBvdmVyZmxvdyA9PSBP
dmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Nyb2xs
YmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsK
LSAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhb3ZlcmZsb3dTY3Jv
bGxBY3RzTGlrZUF1dG87Ci19Ci0KLXN0YXRpYyBib29sIHN0eWxlRGVmaW5lc0F1dG9tYXRpY1Nj
cm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9sbGJhck9yaWVudGF0aW9uIGF4
aXMpCi17Ci0gICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09IFNjcm9sbGJhck9yaWVudGF0
aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZsb3dYKCkgOiBzdHlsZS5vdmVy
Zmxvd1koKTsKLSAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvID0gb3ZlcmZsb3cg
PT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRvU3R5bGUoUHNldWRvSWQ6OlNj
cm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNlc092ZXJsYXlTY3JvbGxiYXJz
KCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpBdXRvIHx8IG92ZXJmbG93U2Ny
b2xsQWN0c0xpa2VBdXRvOwotfQotCi12b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJz
QWZ0ZXJMYXlvdXQoKQotewotICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7Ci0gICAg
QVNTRVJUKGJveCk7Ci0KLSAgICAvLyBMaXN0IGJveCBwYXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJh
cnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKGJveC0+
c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGJvb2wgaGFzSG9yaXpvbnRhbE92ZXJmbG93ID0gdGhpcy0+aGFzSG9yaXpvbnRhbE92ZXJm
bG93KCk7Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbE92ZXJmbG93ID0gdGhpcy0+aGFzVmVydGljYWxP
dmVyZmxvdygpOwotCi0gICAgLy8gSWYgb3ZlcmZsb3cgcmVxdWlyZXMgYSBzY3JvbGxiYXIsIHRo
ZW4gd2UganVzdCBuZWVkIHRvIGVuYWJsZSBvciBkaXNhYmxlLgotICAgIGlmIChtX2hCYXIgJiYg
c3R5bGVSZXF1aXJlc1Njcm9sbGJhcihyZW5kZXJlcigpLnN0eWxlKCksIEhvcml6b250YWxTY3Jv
bGxiYXIpKQotICAgICAgICBtX2hCYXItPnNldEVuYWJsZWQoaGFzSG9yaXpvbnRhbE92ZXJmbG93
KTsKLSAgICBpZiAobV92QmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIoKS5z
dHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCi0gICAgICAgIG1fdkJhci0+c2V0RW5hYmxlZCho
YXNWZXJ0aWNhbE92ZXJmbG93KTsKLQotICAgIC8vIFNjcm9sbGJhcnMgd2l0aCBhdXRvIGJlaGF2
aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Nyb2xsYmFycyBnb3QgYWRkZWQgb3Ig
cmVtb3ZlZC4KLSAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCA9IGJveC0+
aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzSG9yaXpvbnRh
bFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxvdyk7Ci0gICAgYm9vbCBhdXRvVmVy
dGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRv
QmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIoKSAhPSBoYXNWZXJ0aWNhbE92ZXJm
bG93KTsKLQotICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9sbEJhckNoYW5nZWQgfHwgYXV0b1Zl
cnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgewotICAgICAgICBpZiAoYm94LT5oYXNIb3Jpem9udGFs
U2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQotICAgICAgICAgICAgc2V0SGFzSG9yaXpvbnRh
bFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwotICAgICAgICBpZiAoYm94LT5oYXNW
ZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkKLSAgICAgICAgICAgIHNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cpOwotCi0gICAgICAgIHVwZGF0ZVNl
bGZQYWludGluZ0xheWVyKCk7Ci0KLSAgICAgICAgcmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0KLSAg
ICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6QXV0
byB8fCByZW5kZXJlcigpLnN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OkF1dG8pIHsK
LSAgICAgICAgICAgIGlmICghbV9pbk92ZXJmbG93UmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAg
ICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIo
KS5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJCbG9jaz4ocmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQmxv
Y2smIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KHJlbmRlcmVyKCkpOwotICAgICAgICAg
ICAgICAgICAgICBibG9jay5zY3JvbGxiYXJzQ2hhbmdlZChhdXRvSG9yaXpvbnRhbFNjcm9sbEJh
ckNoYW5nZWQsIGF1dG9WZXJ0aWNhbFNjcm9sbEJhckNoYW5nZWQpOwotICAgICAgICAgICAgICAg
ICAgICBibG9jay5sYXlvdXRCbG9jayh0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBt
X2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IHJlbmRlcmVyKCkucGFyZW50
KCk7Ci0gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc0ZsZXhpYmxlQm94KCkgJiYgcmVu
ZGVyZXIoKS5pc0JveCgpKQotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVCb3g+
KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqcmVuZGVyQm94KCkpOwotICAg
IH0KLQotICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4K
LSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHJvdW5kVG9JbnQo
Ym94LT5jbGllbnRXaWR0aCgpKTsKLSAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpw
YWdlU3RlcChjbGllbnRXaWR0aCk7Ci0gICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1faEJhci0+c2V0UHJv
cG9ydGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxTaXplLndpZHRoKCkpOwotICAgIH0KLSAgICBp
ZiAobV92QmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSByb3VuZFRvSW50KGJveC0+
Y2xpZW50SGVpZ2h0KCkpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSBTY3JvbGxiYXI6OnBhZ2VT
dGVwKGNsaWVudEhlaWdodCk7Ci0gICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7Ci0gICAgICAgIG1fdkJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAg
dXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygp
IHx8IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOwotfQotCi0vLyBUaGlzIGlzIGNh
bGxlZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgotdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKLXsKLSAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwotICAgIGlmICghYm94KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IHRydWU7Ci0gICAgU2Nyb2xsT2Zmc2V0
IG9yaWdpbmFsU2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7Ci0KLSAgICBjb21wdXRlU2Ny
b2xsRGltZW5zaW9ucygpOwotICAgIHVwZGF0ZVNlbGZQYWludGluZ0xheWVyKCk7Ci0KLSNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIC8vIEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRz
IGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBwcm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0Ci0g
ICAgdXBkYXRlU25hcE9mZnNldHMoKTsKLSNlbmRpZgotCi0gICAgaWYgKCFib3gtPmlzSFRNTE1h
cnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpICYmICFpc1VzZXJTY3JvbGxJblBy
b2dyZXNzKCkpIHsKLSAgICAgICAgLy8gTGF5b3V0IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBp
bnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhpcyBjYXNlIHdlIG5lZWQKLSAgICAgICAgLy8g
dG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFjayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0g
dXAgdG8gdGhlIG1pbikuCi0gICAgICAgIFNjcm9sbE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0
ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zmc2V0KCkpOwotI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRq
dXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkg
cG9pbnRzLgotICAgICAgICAvLyBUaGlzIGNvZGUgd2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3
aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQgd291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRo
ZSByaWdodCBlZGdlCi0gICAgICAgIC8vIG9mIGEgdGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92
ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1v
cmUgZGV0YWlscy4KLSAgICAgICAgc2V0QWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRy
dWUpOwotI2VuZGlmCi0gICAgICAgIGlmIChjbGFtcGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9m
ZnNldCgpKQotICAgICAgICAgICAgc2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7
Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJl
dFdoZW5TY3JvbGxpbmcoZmFsc2UpOwotI2VuZGlmCi0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xs
YmFyc0FmdGVyTGF5b3V0KCk7Ci0KLSAgICBpZiAob3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Ny
b2xsT2Zmc2V0KCkpCi0gICAgICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQ
b2ludChzY3JvbGxPZmZzZXQoKSkpOwotCi0gICAgaWYgKGlzQ29tcG9zaXRlZCgpKSB7Ci0gICAg
ICAgIHNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwotICAgICAgICBzZXROZWVk
c0NvbXBvc2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChjYW5V
c2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkpCi0gICAgICAgIHNldE5lZWRzUG9zdExheW91dENvbXBv
c2l0aW5nVXBkYXRlKCk7Ci0KLSAgICB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKLX0KLQotYm9v
bCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dDb250cm9sc0ludGVyc2VjdFJlY3QoY29uc3QgSW50UmVj
dCYgbG9jYWxSZWN0KSBjb25zdAotewotICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xz
UmVjdHMoKTsKLQotICAgIGlmIChyZWN0cy5ob3Jpem9udGFsU2Nyb2xsYmFyLmludGVyc2VjdHMo
bG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAocmVjdHMudmVydGlj
YWxTY3JvbGxiYXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChyZWN0cy5zY3JvbGxDb3JuZXIuaW50ZXJzZWN0cyhsb2NhbFJlY3QpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHN0eWxlZEVsZW1lbnQtPnNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlbmRlcmVyLT5tYXJnaW5Ub3AoKSAv
IHpvb21GYWN0b3IsIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgICAgICAgICAgc3R5bGVkRWxl
bWVudC0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgcmVu
ZGVyZXItPm1hcmdpbkJvdHRvbSgpIC8gem9vbUZhY3RvciwgQ1NTVW5pdFR5cGU6OkNTU19QWCk7
CisgICAgICAgIH0KKyAgICAgICAgTGF5b3V0VW5pdCBiYXNlSGVpZ2h0ID0gcmVuZGVyZXItPmhl
aWdodCgpIC0gKGlzQm94U2l6aW5nQm9yZGVyID8gMF9sdSA6IHJlbmRlcmVyLT52ZXJ0aWNhbEJv
cmRlckFuZFBhZGRpbmdFeHRlbnQoKSk7CisgICAgICAgIGJhc2VIZWlnaHQgPSBiYXNlSGVpZ2h0
IC8gem9vbUZhY3RvcjsKKyAgICAgICAgc3R5bGVkRWxlbWVudC0+c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgcm91bmRUb0ludChiYXNlSGVpZ2h0ICsgZGlmZmVyZW5j
ZS5oZWlnaHQoKSksIENTU1VuaXRUeXBlOjpDU1NfUFgpOworICAgIH0KIAotICAgIGlmIChyZWN0
cy5yZXNpemVyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
RklYTUUgKFJhZGFyIDQxMTg1NjQpOiBXZSBzaG91bGQgYWxzbyBhdXRvc2Nyb2xsIHRoZSB3aW5k
b3cgYXMgbmVjZXNzYXJ5IHRvIGtlZXAgdGhlIHBvaW50IHVuZGVyIHRoZSBjdXJzb3IgaW4gdmll
dy4KIH0KIAotYm9vbCBSZW5kZXJMYXllcjo6c2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3QK
K0ludFNpemUgUmVuZGVyTGF5ZXI6OnZpc2libGVTaXplKCkgY29uc3QKIHsKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIC8vIE9uIGlPUywgdGhlIHNjcm9sbGJhcnMgYXJlIG1hZGUgaW4g
dGhlIFVJIHByb2Nlc3MuCi0gICAgcmV0dXJuICFjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCk7
Ci0jZW5kaWYKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOworICAgIGlmICghYm94
KQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIEludFNpemUocm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpLCByb3VuZFRvSW50KGJv
eC0+Y2xpZW50SGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxv
d0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBhaW50
T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNv
bnRyb2xzKQorUmVuZGVyTGF5ZXI6Ok92ZXJmbG93Q29udHJvbFJlY3RzIFJlbmRlckxheWVyOjpv
dmVyZmxvd0NvbnRyb2xzUmVjdHMoKSBjb25zdAogewotICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHdlIGhhdmUgbm8gb3ZlcmZsb3cuCi0gICAgaWYgKCFyZW5kZXJlcigpLmhhc092ZXJmbG93
Q2xpcCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAg
ICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5vdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKIAot
ICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBB
U1NFUlQoaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSk7CisgICAgYXV0byYgcmVuZGVyQm94ID0g
ZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKKyAgICAvLyBTY3JvbGxiYXJzIHNpdCBp
bnNpZGUgdGhlIGJvcmRlciBib3guCisgICAgYXV0byBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25p
bmdSZWN0ID0gc25hcHBlZEludFJlY3QocmVuZGVyQm94LnBhZGRpbmdCb3hSZWN0SW5jbHVkaW5n
U2Nyb2xsYmFyKCkpOwogCi0gICAgLy8gT3ZlcmxheSBzY3JvbGxiYXJzIHBhaW50IGluIGEgc2Vj
b25kIHBhc3MgdGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSBzbyB0aGF0IHRoZXkgd2lsbCBwYWludAot
ICAgIC8vIG9uIHRvcCBvZiBldmVyeXRoaW5nIGVsc2UuIElmIHRoaXMgaXMgdGhlIG5vcm1hbCBw
YWludGluZyBwYXNzLCBwYWludGluZ092ZXJsYXlDb250cm9scwotICAgIC8vIHdpbGwgYmUgZmFs
c2UsIGFuZCB3ZSBzaG91bGQganVzdCB0ZWxsIHRoZSByb290IGxheWVyIHRoYXQgdGhlcmUgYXJl
IG92ZXJsYXkgc2Nyb2xsYmFycwotICAgIC8vIHRoYXQgbmVlZCB0byBiZSBwYWludGVkLiBUaGF0
IHdpbGwgY2F1c2UgdGhlIHNlY29uZCBwYXNzIHRocm91Z2ggdGhlIGxheWVyIHRyZWUgdG8gcnVu
LAotICAgIC8vIGFuZCB3ZSdsbCBwYWludCB0aGUgc2Nyb2xsYmFycyB0aGVuLiBJbiB0aGUgbWVh
bnRpbWUsIGNhY2hlIHR4IGFuZCB0eSBzbyB0aGF0IHRoZSAKLSAgICAvLyBzZWNvbmQgcGFzcyBk
b2Vzbid0IG5lZWQgdG8gcmUtZW50ZXIgdGhlIFJlbmRlclRyZWUgdG8gZ2V0IGl0IHJpZ2h0Lgot
ICAgIGlmIChoYXNPdmVybGF5U2Nyb2xsYmFycygpICYmICFwYWludGluZ092ZXJsYXlDb250cm9s
cykgewotICAgICAgICBtX2NhY2hlZE92ZXJsYXlTY3JvbGxiYXJPZmZzZXQgPSBwYWludE9mZnNl
dDsKLQotICAgICAgICAvLyBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gZG8gdGhlIHNlY29uZCBwYXNz
IGlmIHRoZSBzY3JvbGxiYXJzIHBhaW50IGludG8gbGF5ZXJzLgotICAgICAgICBpZiAoKG1faEJh
ciAmJiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkgfHwgKG1fdkJhciAmJiBsYXllckZv
clZlcnRpY2FsU2Nyb2xsYmFyKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBJbnRS
ZWN0IGxvY2FsRGFtZ2VSZWN0ID0gZGFtYWdlUmVjdDsKLSAgICAgICAgbG9jYWxEYW1nZVJlY3Qu
bW92ZUJ5KC1wYWludE9mZnNldCk7Ci0gICAgICAgIGlmICghb3ZlcmZsb3dDb250cm9sc0ludGVy
c2VjdFJlY3QobG9jYWxEYW1nZVJlY3QpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGJvb2wg
cGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCA9IHJlbmRlckJveC5zaG91bGRQbGFjZUJs
b2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CisgICAgYm9vbCBoYXZlUmVzaXplciA9IHJl
bmRlcmVyKCkuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmU7CiAKLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIHBhaW50aW5nUm9vdCA9IGVuY2xvc2luZ0NvbXBvc2l0aW5nTGF5ZXIoKTsKLSAg
ICAgICAgaWYgKCFwYWludGluZ1Jvb3QpCi0gICAgICAgICAgICBwYWludGluZ1Jvb3QgPSByZW5k
ZXJlcigpLnZpZXcoKS5sYXllcigpOworICAgIE92ZXJmbG93Q29udHJvbFJlY3RzIHJlc3VsdDsK
KyAgICBhdXRvIGNvcm5lclJlY3QgPSBbJl0oSW50U2l6ZSBjb3JuZXJTaXplKSB7CisgICAgICAg
IGlmIChwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0KSB7CisgICAgICAgICAgICBhdXRv
IGJvdHRvbUxlZnRDb3JuZXIgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Lm1pblhN
YXhZQ29ybmVyKCk7CisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCB7IHsgYm90dG9tTGVmdENv
cm5lci54KCksIGJvdHRvbUxlZnRDb3JuZXIueSgpIC0gY29ybmVyU2l6ZS5oZWlnaHQoKSwgfSwg
Y29ybmVyU2l6ZSB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBJbnRSZWN0IHsgb3ZlcmZs
b3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVyU2l6ZSwg
Y29ybmVyU2l6ZSB9OworICAgIH07CiAKLSAgICAgICAgcGFpbnRpbmdSb290LT5zZXRDb250YWlu
c0RpcnR5T3ZlcmxheVNjcm9sbGJhcnModHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
aGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgYXV0byBzY3JvbGxiYXJUaGlja25lc3MgPSBTY3JvbGxi
YXJUaGVtZTo6dGhlbWUoKS5zY3JvbGxiYXJUaGlja25lc3MoKTsKKyAgICAgICAgcmVzdWx0LnJl
c2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlja25l
c3MgfSk7CiAgICAgfQogCi0gICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBw
YWludGluZyBjdXN0b20gQ1NTIHNjcm9sbGJhcnMgdHdpY2UuCi0gICAgaWYgKHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzICYmICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBJbnRQb2ludCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7Ci0gICAg
aWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzKQotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0
ID0gbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFyT2Zmc2V0OworICAgIHJldHVybiByZXN1bHQ7Cit9
CiAKLSAgICAvLyBNb3ZlIHRoZSBzY3JvbGxiYXIgd2lkZ2V0cyBpZiBuZWNlc3NhcnkuICBXZSBu
b3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcgbGF5b3V0LCBidXQgc29tZXRp
bWVzCi0gICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxheW91dCBvY2N1cnJpbmcgKG1v
c3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0aGF0Ci0gICAgLy8gY29udGFp
bnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCi0gICAgcG9zaXRpb25PdmVyZmxvd0NvbnRy
b2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CitTdHJpbmcgUmVuZGVyTGF5ZXI6
OmRlYnVnRGVzY3JpcHRpb24oKSBjb25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
KyAgICBidWlsZGVyLmFwcGVuZCgiUmVuZGVyTGF5ZXIgMHgiX3MsIGhleChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcyksIExvd2VyY2FzZSksICcgJywgc2l6ZSgpLndpZHRoKCksICd4
Jywgc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgIC8vIE5vdyB0aGF0IHdlJ3JlIHN1cmUgdGhlIHNj
cm9sbGJhcnMgYXJlIGluIHRoZSByaWdodCBwbGFjZSwgcGFpbnQgdGhlbS4KLSAgICBpZiAobV9o
QmFyICYmICFsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSkKLSAgICAgICAgbV9oQmFyLT5w
YWludChjb250ZXh0LCBkYW1hZ2VSZWN0KTsKLSAgICBpZiAobV92QmFyICYmICFsYXllckZvclZl
cnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIG1fdkJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdl
UmVjdCk7CisgICAgaWYgKHRyYW5zZm9ybSgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGhh
cyB0cmFuc2Zvcm0iX3MpOwogCi0gICAgaWYgKGxheWVyRm9yU2Nyb2xsQ29ybmVyKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICBpZiAoaGFzRmlsdGVyKCkpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgaGFzIGZpbHRlciJfcyk7CiAKLSAgICAvLyBXZSBmaWxsIG91ciBzY3JvbGwgY29ybmVyIHdp
dGggd2hpdGUgaWYgd2UgaGF2ZSBhIHNjcm9sbGJhciB0aGF0IGRvZXNuJ3QgcnVuIGFsbCB0aGUg
d2F5IHVwIHRvIHRoZQotICAgIC8vIGVkZ2Ugb2YgdGhlIGJveC4KLSAgICBwYWludFNjcm9sbENv
cm5lcihjb250ZXh0LCBhZGp1c3RlZFBhaW50T2Zmc2V0LCBkYW1hZ2VSZWN0KTsKLSAgICAKLSAg
ICAvLyBQYWludCBvdXIgcmVzaXplciBsYXN0LCBzaW5jZSBpdCBzaXRzIG9uIHRvcCBvZiB0aGUg
c2Nyb2xsIGNvcm5lci4KLSAgICBwYWludFJlc2l6ZXIoY29udGV4dCwgYWRqdXN0ZWRQYWludE9m
ZnNldCwgZGFtYWdlUmVjdCk7Ci19CisgICAgaWYgKGhhc0JhY2tkcm9wRmlsdGVyKCkpCisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgaGFzIGJhY2tkcm9wIGZpbHRlciJfcyk7CiAKLXZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQotewot
ICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKLSAgICBhYnNSZWN0Lm1v
dmVCeShwYWludE9mZnNldCk7Ci0gICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVj
dCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoaGFzQmxlbmRNb2RlKCkpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIgaGFzIGJsZW5kIG1vZGUiX3MpOwogCi0gICAgaWYgKGNvbnRleHQuaW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5
bGUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXNvbGF0ZXNCbGVuZGluZygp
KQorICAgICAgICBidWlsZGVyLmFwcGVuZCgiIGlzb2xhdGVzIGJsZW5kaW5nIl9zKTsKIAotICAg
IGlmIChtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lci0+cGFpbnRJbnRv
UmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgYWJzUmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgLy8gT2ggZm9yIGJldHRlciBTdHJpbmdC
dWlsZGVyL1RleHRTdHJlYW0gaW50ZWdyYXRpb24uCisgICAgICAgIFRleHRTdHJlYW0gc3RyZWFt
OworICAgICAgICBzdHJlYW0gPDwgIiAiIDw8ICpiYWNraW5nKCk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKHN0cmVhbS5yZWxlYXNlKCkpOwogICAgIH0KIAotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gcGFpbnQgYSBjb3JuZXIgaWYgd2UgaGF2ZSBvdmVybGF5IHNjcm9sbGJhcnMsIHNpbmNlIHdl
IG5lZWQKLSAgICAvLyB0byBzZWUgd2hhdCBpcyBiZWhpbmQgaXQuCi0gICAgaWYgKCFoYXNPdmVy
bGF5U2Nyb2xsYmFycygpKQotICAgICAgICBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS5wYWludFNj
cm9sbENvcm5lcihjb250ZXh0LCBhYnNSZWN0KTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0JiByZXNpemVyQ29ybmVyUmVj
dCkKK0ludFNpemUgUmVuZGVyTGF5ZXI6Om9mZnNldEZyb21SZXNpemVDb3JuZXIoY29uc3QgSW50
UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPEltYWdlPiByZXNpemVDb3Ju
ZXJJbWFnZTsKLSAgICBGbG9hdFNpemUgY29ybmVyUmVzaXplclNpemU7Ci0gICAgaWYgKHJlbmRl
cmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpID49IDIpIHsKLSAgICAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEltYWdlKj4gcmVzaXplQ29ybmVySW1hZ2VIaVJlcygmSW1hZ2U6
OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lckAyeCIpLmxlYWtSZWYo
KSk7Ci0gICAgICAgIHJlc2l6ZUNvcm5lckltYWdlID0gcmVzaXplQ29ybmVySW1hZ2VIaVJlczsK
LSAgICAgICAgY29ybmVyUmVzaXplclNpemUgPSByZXNpemVDb3JuZXJJbWFnZS0+c2l6ZSgpOwot
ICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZS5zY2FsZSgwLjVmKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUxvUmVz
KCZJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikubGVh
a1JlZigpKTsKLSAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUxv
UmVzOwotICAgICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXpl
KCk7Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJP
bkxlZnQoKSkgewotICAgICAgICBjb250ZXh0LnNhdmUoKTsKLSAgICAgICAgY29udGV4dC50cmFu
c2xhdGUocmVzaXplckNvcm5lclJlY3QueCgpICsgY29ybmVyUmVzaXplclNpemUud2lkdGgoKSwg
cmVzaXplckNvcm5lclJlY3QueSgpICsgcmVzaXplckNvcm5lclJlY3QuaGVpZ2h0KCkgLSBjb3Ju
ZXJSZXNpemVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KC0xLjAsIDEuMCkpOwotICAgICAgICBpZiAocmVzaXplQ29ybmVySW1hZ2UpCi0gICAgICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1hZ2UsIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGNvcm5lclJlc2l6ZXJTaXplKSk7Ci0gICAgICAgIGNvbnRleHQucmVzdG9yZSgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghcmVzaXplQ29ybmVySW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFJlY3QgaW1hZ2VSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhMYXlvdXRSZWN0KHJlc2l6ZXJDb3JuZXJSZWN0Lm1heFhNYXhZQ29ybmVyKCkg
LSBjb3JuZXJSZXNpemVyU2l6ZSwgY29ybmVyUmVzaXplclNpemUpLCByZW5kZXJlcigpLmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgY29udGV4dC5kcmF3SW1hZ2UoKnJlc2l6
ZUNvcm5lckltYWdlLCBpbWFnZVJlY3QpOworICAgIGF1dG8gcmVzaXplclJlY3QgPSBvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyOworICAgIGF1dG8gcmVzaXplQ29ybmVyID0gcmVuZGVy
ZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgPyByZXNpemVy
UmVjdC5taW5YTWF4WUNvcm5lcigpIDogcmVzaXplclJlY3QubWF4WE1heFlDb3JuZXIoKTsKKyAg
ICByZXR1cm4gbG9jYWxQb2ludCAtIHJlc2l6ZUNvcm5lcjsKIH0KIAotdm9pZCBSZW5kZXJMYXll
cjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoraW50IFJlbmRl
ckxheWVyOjpzY3JvbGxXaWR0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUo
KS5yZXNpemUoKSA9PSBSZXNpemU6Ok5vbmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIExheW91dFJlY3QgcmVzaXpl
ckFic1JlY3QgPSByZWN0cy5yZXNpemVyOwotICAgIHJlc2l6ZXJBYnNSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7Ci0gICAgaWYgKCFyZXNpemVyQWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFnZVJlY3Qp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29udGV4dC5pbnZhbGlkYXRpbmdDb250cm9s
VGludHMoKSkgewotICAgICAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBpZiAobV9yZXNpemVyKSB7Ci0gICAgICAgIG1fcmVzaXplci0+
cGFpbnRJbnRvUmVjdChjb250ZXh0LCBwYWludE9mZnNldCwgcmVzaXplckFic1JlY3QpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUmVzaXplckltYWdlKGNvbnRl
eHQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
cmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFdpZHRoKCk7CiAKLSAgICAvLyBEcmF3IGEg
ZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55
IHNjcm9sbGJhcnMgcHJlc2VudC4KLSAgICAvLyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJp
Z2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhpcyBmcmFtZS4KLSAgICBpZiAoIWhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBtX2hCYXIpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKLSAgICAgICAgY29udGV4dC5jbGlw
KHJlc2l6ZXJBYnNSZWN0KTsKLSAgICAgICAgTGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNp
emVyQWJzUmVjdDsKLSAgICAgICAgbGFyZ2VyQ29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJn
ZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxhcmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsK
LSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3
LCAyMTcgfSk7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwotICAg
ICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAg
ICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBlZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7Ci0gICAg
fQorICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNTRVJUKGJveCk7Cisg
ICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7Cisg
ICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICByZXR1cm4gcm91
bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WCgpIC0gb3ZlcmZsb3dSZWN0LngoKSk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2lu
dCkgY29uc3QKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKIHsKLSAgICBp
ZiAoIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxIZWlnaHQo
KTsKIAotICAgIHJldHVybiBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKS5yZXNpemVyLmNvbnRhaW5z
KGxvY2FsUG9pbnQpOworICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgQVNT
RVJUKGJveCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAg
ICByZXR1cm4gcm91bmRUb0ludChvdmVyZmxvd1JlY3QubWF4WSgpIC0gb3ZlcmZsb3dSZWN0Lnko
KSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogewotICAgIGlmICghbV9oQmFy
ICYmICFtX3ZCYXIgJiYgIWNhblJlc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisgICAgdXBkYXRlTGF5ZXJT
Y3JvbGxhYmxlQXJlYSgpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICBtX3Nj
cm9sbGFibGVBcmVhLT51cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKTsKK30KIAotICAgIElu
dFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7Ci0gICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5yZXNp
emUoKSAhPSBSZXNpemU6Ok5vbmUpIHsKLSAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFp
bnMobG9jYWxQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Citib29sIFJl
bmRlckxheWVyOjpjYW5Vc2VDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGhpdCB0ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBi
YWNrIHRocm91Z2ggdGhlIHJlc3VsdC4KLSAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxk
UGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkgewotICAgICAgICBpZiAocmVjdHMudmVydGljYWxT
Y3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRT
Y3JvbGxiYXIobV92QmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVy
ZmxvdygpIGNvbnN0Cit7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVy
biBtX3Njcm9sbGFibGVBcmVhLT5oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQogCi0gICAgaWYgKG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBh
cnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxT
Y3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRT
Y3JvbGxiYXIobV9oQmFyLmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQorYm9vbCBSZW5kZXJMYXllcjo6aGFzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25z
dAoreworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxh
YmxlQXJlYS0+aGFzT3ZlcmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAK
K2Jvb2wgUmVuZGVyTGF5ZXI6OnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEt
PnVzZXNDb21wb3NpdGVkU2Nyb2xsaW5nKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCitib29sIFJlbmRlckxheWVy
Ojppc1BvaW50SW5SZXNpemVDb250cm9sKEludFBvaW50IGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CisgICAgaWYgKCFjYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIG92ZXJmbG93Q29udHJvbHNSZWN0cygpLnJlc2l6ZXIuY29udGFpbnMo
bG9jYWxQb2ludCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgY29uc3QgTGF5b3V0U2l6
ZSYgc3VicGl4ZWxPZmZzZXQsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9y
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QsIE9wdGlvblNldDxQYWludExheWVyRmxh
Zz4gcGFpbnRGbGFncywgU2VjdXJpdHlPcmlnaW5QYWludFBvbGljeSBwYWludFBvbGljeSwgRXZl
bnRSZWdpb25Db250ZXh0KiBldmVudFJlZ2lvbkNvbnRleHQpCkBAIC00MjEzLDE3ICszMTIxLDYg
QEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LAogICAgICAgICB3aWRnZXQtPnNldE92ZXJsYXBUZXN0
UmVzdWx0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRPdmVybGF5U2Nyb2xs
YmFycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIGRhbWFnZVJl
Y3QsIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBwYWludEJlaGF2aW9yLCBSZW5kZXJPYmplY3Qq
IHN1YnRyZWVQYWludFJvb3QpCi17Ci0gICAgaWYgKCFtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Ny
b2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5ZXJQYWludGluZ0luZm8gcGFpbnRp
bmdJbmZvKHRoaXMsIGVuY2xvc2luZ0ludFJlY3QoZGFtYWdlUmVjdCksIHBhaW50QmVoYXZpb3Is
IExheW91dFNpemUoKSwgc3VidHJlZVBhaW50Um9vdCk7Ci0gICAgcGFpbnRMYXllcihjb250ZXh0
LCBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFnOjpQYWludGluZ092ZXJsYXlTY3JvbGxiYXJz
KTsKLQotICAgIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0K
IHZvaWQgUmVuZGVyTGF5ZXI6OmNsaXBUb1JlY3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJbmZvLCBPcHRpb25TZXQ8UGFpbnRCZWhh
dmlvcj4gcGFpbnRCZWhhdmlvciwgY29uc3QgQ2xpcFJlY3QmIGNsaXBSZWN0LCBCb3JkZXJSYWRp
dXNDbGlwcGluZ1J1bGUgcnVsZSkKIHsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHJl
bmRlcmVyKCkuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtNDc0OSw4ICszNjQ2
LDEwIEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpCiAgICAgICAgICAgICBwYWludExpc3QocG9z
aXRpdmVaT3JkZXJMYXllcnMoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBs
b2NhbFBhaW50RmxhZ3MpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUGFpbnRpbmdPdmVy
bGF5U2Nyb2xsYmFycyAmJiBoYXNTY3JvbGxiYXJzKCkpCi0gICAgICAgICAgICBwYWludE92ZXJm
bG93Q29udHJvbHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbyk7CisgICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CisgICAg
ICAgICAgICBpZiAoaXNQYWludGluZ092ZXJsYXlTY3JvbGxiYXJzICYmIG1fc2Nyb2xsYWJsZUFy
ZWEtPmhhc1Njcm9sbGJhcnMoKSkKKyAgICAgICAgICAgICAgICBwYWludE92ZXJmbG93Q29udHJv
bHNGb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50
aW5nSW5mbyk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoZmlsdGVyQ29udGV4dCkgewogICAg
ICAgICAgICAgLy8gV2hlbiB3ZSBjYWxsZWQgY29sbGVjdEZyYWdtZW50cygpIGxhc3QgdGltZSwg
cGFpbnREaXJ0eVJlY3Qgd2FzIHJlc2V0IHRvIHJlcHJlc2VudCB0aGUgZmlsdGVyIGJvdW5kcy4K
QEAgLTUyMjAsMTEgKzQxMTksMTMgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRDaGlsZENsaXBw
aW5nTWFza0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXIKIAogdm9pZCBS
ZW5kZXJMYXllcjo6cGFpbnRPdmVyZmxvd0NvbnRyb2xzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVy
RnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBMYXllclBhaW50aW5nSW5mbyYgbG9jYWxQYWludGluZ0luZm8pCiB7CisgICAgQVNTRVJUKG1f
c2Nyb2xsYWJsZUFyZWEpOworCiAgICAgZm9yIChjb25zdCBhdXRvJiBmcmFnbWVudCA6IGxheWVy
RnJhZ21lbnRzKSB7CiAgICAgICAgIGlmIChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBs
b2NhbFBhaW50aW5nSW5mbywgeyB9LCBmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdCk7Ci0gICAgICAg
IHBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQodG9MYXlvdXRQ
b2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94TG9jYXRpb24o
KSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCisgICAgICAgIG1fc2Nyb2xs
YWJsZUFyZWEtPnBhaW50T3ZlcmZsb3dDb250cm9scyhjb250ZXh0LCByb3VuZGVkSW50UG9pbnQo
dG9MYXlvdXRQb2ludChmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpIC0gcmVuZGVyQm94
TG9jYXRpb24oKSArIGxvY2FsUGFpbnRpbmdJbmZvLnN1YnBpeGVsT2Zmc2V0KSksCiAgICAgICAg
ICAgICBzbmFwcGVkSW50UmVjdChmcmFnbWVudC5iYWNrZ3JvdW5kUmVjdC5yZWN0KCkpLCB0cnVl
KTsKICAgICAgICAgcmVzdG9yZUNsaXAoY29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGZyYWdt
ZW50LmJhY2tncm91bmRSZWN0KTsKICAgICB9CkBAIC01MjYzLDcgKzQxNjQsNyBAQCBib29sIFJl
bmRlckxheWVyOjpoaXRUZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mCiAgICAgICAgICAgICAgICAgYWJzb2x1dGVMYXlvdXRWaWV3cG9ydFJl
Y3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogICAgICAgICAgICAgaGl0VGVzdEFyZWEuaW50ZXJzZWN0
KGFic29sdXRlTGF5b3V0Vmlld3BvcnRSZWN0KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBoaXRUZXN0QXJlYS5pbnRlcnNlY3QocmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkudmlz
aWJsZUNvbnRlbnRSZWN0KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKKyAgICAgICAg
ICAgIGhpdFRlc3RBcmVhLmludGVyc2VjdChyZW5kZXJlcigpLnZpZXcoKS5mcmFtZVZpZXcoKS52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpKTsKICAgICB9CiAKICAgICBSZW5kZXJMYXllciogaW5zaWRlTGF5ZXIgPSBoaXRUZXN0
TGF5ZXIodGhpcywgbnVsbHB0ciwgcmVxdWVzdCwgcmVzdWx0LCBoaXRUZXN0QXJlYSwgaGl0VGVz
dExvY2F0aW9uLCBmYWxzZSk7CkBAIC01NDk0LDcgKzQzOTUsNyBAQCBSZW5kZXJMYXllciogUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSZW5kZXJMYXllciogcm9vdExheWVyLCBSZW5kZXJMYXll
ciogY29udAogICAgICAgICBvZmZzZXRGcm9tQW5jZXN0b3Iocm9vdExheWVyKSk7CiAKICAgICBM
YXlvdXRQb2ludCBsb2NhbFBvaW50OwotICAgIGlmIChjYW5SZXNpemUoKSAmJiBoaXRUZXN0UmVz
aXplckluRnJhZ21lbnRzKGxheWVyRnJhZ21lbnRzLCBoaXRUZXN0TG9jYXRpb24sIGxvY2FsUG9p
bnQpKSB7CisgICAgaWYgKGNhblJlc2l6ZSgpICYmIG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3Jv
bGxhYmxlQXJlYS0+aGl0VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhsYXllckZyYWdtZW50cywgaGl0
VGVzdExvY2F0aW9uLCBsb2NhbFBvaW50KSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhbFBvaW50KTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgfQpAQCAtNTU2OSwzNSArNDQ3MCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250
ZW50c0ZvckZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYgbGF5ZXJGcmFnbWVuCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0UmVzaXplckluRnJh
Z21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBoaXRUZXN0TG9jYXRpb24sIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQp
IGNvbnN0Ci17Ci0gICAgaWYgKGxheWVyRnJhZ21lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBib3JkZXJCb3hSZWN0ID0gc25hcHBlZEludFJlY3QoZG93
bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkpOwotICAgIGF1dG8g
cmVjdHMgPSBvdmVyZmxvd0NvbnRyb2xzUmVjdHMoKTsKLQotICAgIGF1dG8gY29ybmVyUmVjdElu
RnJhZ21lbnQgPSBbJl0oY29uc3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJl
Y3QmIHJlc2l6ZXJSZWN0KSB7Ci0gICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9u
U2Nyb2xsYmFyT25MZWZ0KCkpIHsKLSAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRv
bUxlZnQgPSBib3JkZXJCb3hSZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5Y
TWF4WUNvcm5lcigpOwotICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5k
cy5taW5YTWF4WUNvcm5lcigpIC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwg
cmVzaXplclJlY3QuaGVpZ2h0KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07Ci0gICAgICAgIH0K
LSAgICAgICAgSW50U2l6ZSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1h
eFhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOwotICAgICAgICBy
ZXR1cm4gSW50UmVjdCB7IGZyYWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRG
cm9tQm90dG9tUmlnaHQgLSByZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9
OwotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKLSAgICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBs
YXllckZyYWdtZW50cy5hdChpKTsKLSAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQg
PSBjb3JuZXJSZWN0SW5GcmFnbWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5k
cyksIHJlY3RzLnJlc2l6ZXIpOwotICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3Qu
aW50ZXJzZWN0cyhoaXRUZXN0TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250
YWlucyhoaXRUZXN0TG9jYXRpb24ucm91bmRlZFBvaW50KCkpKSB7Ci0gICAgICAgICAgICBwb2lu
dEluRnJhZ21lbnQgPSB0b0xheW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJh
Z21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmVuZGVyTGF5ZXIq
IFJlbmRlckxheWVyOjpoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxh
eWVyKiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwKICAgICBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRUZXN0TG9jYXRp
b24sIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdHJhbnNmb3JtU3RhdGUsIGRvdWJs
ZSogek9mZnNldCkKIHsKQEAgLTYwNTksNyArNDkzMSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnJl
cGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRS
ZWN0IHJlY3QgPSBtX2Jsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kczsKLSAgICByZWN0Lm1vdmVCeSgt
c2Nyb2xsUG9zaXRpb24oKSk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJl
Y3QubW92ZUJ5KC1tX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQb3NpdGlvbigpKTsKICAgICBpZiAo
cmVuZGVyZXIoKS5oYXNPdmVyZmxvd0NsaXAoKSAmJiAhdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmco
KSkKICAgICAgICAgcmVjdC5pbnRlcnNlY3QoZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigp
KS5vdmVyZmxvd0NsaXBSZWN0KExheW91dFBvaW50KCksIG51bGxwdHIpKTsgLy8gRklYTUU6IFJl
Z2lvbnMgbm90IGFjY291bnRlZCBmb3IuCiAgICAgaWYgKHJlbmRlcmVyKCkuaGFzQ2xpcCgpKQpA
QCAtNjM1NywyMSArNTIzMCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc0NvbXBvc2l0ZWRNYXNr
KCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNraW5nICYmIG1fYmFja2luZy0+aGFzTWFza0xheWVy
KCk7CiB9CiAKLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvckhvcml6b250YWxT
Y3JvbGxiYXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKLX0KLQotR3JhcGhpY3NMYXll
ciogUmVuZGVyTGF5ZXI6OmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdAotewotICAg
IHJldHVybiBtX2JhY2tpbmcgPyBtX2JhY2tpbmctPmxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIo
KSA6IG51bGxwdHI7Ci19Ci0KLUdyYXBoaWNzTGF5ZXIqIFJlbmRlckxheWVyOjpsYXllckZvclNj
cm9sbENvcm5lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmFja2luZyA/IG1fYmFja2luZy0+
bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSA6IG51bGxwdHI7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXI6
OnBhaW50c1dpdGhUcmFuc2Zvcm0oT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50QmVoYXZp
b3IpIGNvbnN0CiB7CiAgICAgYm9vbCBwYWludHNUb1dpbmRvdyA9ICFpc0NvbXBvc2l0ZWQoKSB8
fCBiYWNraW5nKCktPnBhaW50c0ludG9XaW5kb3coKTsKQEAgLTY0MDIsMTEgKzUyNjAsNiBAQCBi
b29sIFJlbmRlckxheWVyOjpzaG91bGRBcHBseUNsaXBQYXRoKE9wdGlvblNldDxQYWludEJlaGF2
aW9yPiBwYWludEJlaGF2aW9yLCBPcAogICAgIHJldHVybiBwYWludEZsYWdzLmNvbnRhaW5zKFBh
aW50TGF5ZXJGbGFnOjpQYWludGluZ0NvbXBvc2l0aW5nQ2xpcFBhdGhQaGFzZSk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGluZ01heVJldmVhbEJhY2tncm91bmQoKSBjb25zdAotewot
ICAgIHJldHVybiBzY3JvbGxzT3ZlcmZsb3coKSB8fCB1c2VzQ29tcG9zaXRlZFNjcm9sbGluZygp
OwotfQotCiBib29sIFJlbmRlckxheWVyOjpiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFxdWVJblJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgbG9jYWxSZWN0KSBjb25zdAogewogICAgIGlmICghaXNTZWxm
UGFpbnRpbmdMYXllcigpICYmICFoYXNTZWxmUGFpbnRpbmdMYXllckRlc2NlbmRhbnQoKSkKQEAg
LTY2NDcsNyArNTUwMCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omhhc1Zpc2libGVCb3hEZWNvcmF0
aW9ucygpIGNvbnN0CiAgICAgaWYgKCFoYXNWaXNpYmxlQ29udGVudCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gaGFzVmlzaWJsZUJveERlY29yYXRpb25zT3JCYWNrZ3Jv
dW5kKCkgfHwgaGFzT3ZlcmZsb3dDb250cm9scygpOworICAgIHJldHVybiBoYXNWaXNpYmxlQm94
RGVjb3JhdGlvbnNPckJhY2tncm91bmQoKSB8fCAobV9zY3JvbGxhYmxlQXJlYSAmJiBtX3Njcm9s
bGFibGVBcmVhLT5oYXNPdmVyZmxvd0NvbnRyb2xzKCkpOwogfQogCiBib29sIFJlbmRlckxheWVy
Ojppc1Zpc3VhbGx5Tm9uRW1wdHkoUGFpbnRlZENvbnRlbnRSZXF1ZXN0KiByZXF1ZXN0KSBjb25z
dApAQCAtNjY1Nyw3ICs1NTEwLDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aXNWaXN1YWxseU5vbkVt
cHR5KFBhaW50ZWRDb250ZW50UmVxdWVzdCogcmVxdWVzdCkgY29uc3QKICAgICBpZiAoIWhhc1Zp
c2libGVDb250ZW50KCkgfHwgIXJlbmRlcmVyKCkuc3R5bGUoKS5vcGFjaXR5KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVyUmVwbGFjZWQoKSB8
fCBoYXNPdmVyZmxvd0NvbnRyb2xzKCkpIHsKKyAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRlclJl
cGxhY2VkKCkgfHwgKG1fc2Nyb2xsYWJsZUFyZWEgJiYgbV9zY3JvbGxhYmxlQXJlYS0+aGFzT3Zl
cmZsb3dDb250cm9scygpKSkgewogICAgICAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIApAQCAtNjY4MiwzOCArNTUzNSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6Omlz
VmlzdWFsbHlOb25FbXB0eShQYWludGVkQ29udGVudFJlcXVlc3QqIHJlcXVlc3QpIGNvbnN0CiAg
ICAgcmV0dXJuIGhhc05vbkVtcHR5Q2hpbGRSZW5kZXJlcnMoKnJlcXVlc3QpOwogfQogCi12b2lk
IFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgLy8gT3ZlcmZsb3cgYXJlIGEgYm94IGNvbmNlcHQu
Ci0gICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKLSAgICBpZiAoIWJveCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJz
IGJ5IHRoZW1zZWx2ZXMgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAgIGlmIChib3gtPnN0
eWxlKCkuYXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBPdmVyZmxvdyBvdmVyZmxvd1ggPSBib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCk7Ci0gICAgT3Zl
cmZsb3cgb3ZlcmZsb3dZID0gYm94LT5zdHlsZSgpLm92ZXJmbG93WSgpOwotCi0gICAgLy8gVG8g
YXZvaWQgZG9pbmcgYSByZWxheW91dCBpbiB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJMYXlvdXQsIHdl
IHRyeSB0byBrZWVwIGFueSBhdXRvbWF0aWMgc2Nyb2xsYmFyIHRoYXQgd2FzIGFscmVhZHkgcHJl
c2VudC4KLSAgICBib29sIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciA9IGJveC0+aGFzT3ZlcmZs
b3dDbGlwKCkgJiYgKChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0
b21hdGljU2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpIHx8IHN0
eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jpem9udGFsU2Nyb2xsYmFyKSk7
Ci0gICAgYm9vbCBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAo
KSAmJiAoKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgJiYgc3R5bGVEZWZpbmVzQXV0b21hdGljU2Ny
b2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKSB8fCBzdHlsZVJlcXVpcmVz
U2Nyb2xsYmFyKGJveC0+c3R5bGUoKSwgVmVydGljYWxTY3JvbGxiYXIpKTsKLSAgICBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgc2V0SGFz
VmVydGljYWxTY3JvbGxiYXIobmVlZHNWZXJ0aWNhbFNjcm9sbGJhcik7Ci0KLSAgICAvLyBXaXRo
IG5vbi1vdmVybGF5IG92ZXJmbG93OnNjcm9sbCwgc2Nyb2xsYmFycyBhcmUgYWx3YXlzIHZpc2li
bGUgYnV0IG1heSBiZSBkaXNhYmxlZC4KLSAgICAvLyBXaGVuIHN3aXRjaGluZyB0byBhbm90aGVy
IHZhbHVlLCB3ZSBuZWVkIHRvIHJlLWVuYWJsZSB0aGVtIChzZWUgYnVnIDExOTg1KS4KLSAgICBp
ZiAobV9oQmFyICYmIG5lZWRzSG9yaXpvbnRhbFNjcm9sbGJhciAmJiBvbGRTdHlsZSAmJiBvbGRT
dHlsZS0+b3ZlcmZsb3dYKCkgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiBvdmVyZmxvd1ggIT0gT3Zl
cmZsb3c6OlNjcm9sbCkKLSAgICAgICAgbV9oQmFyLT5zZXRFbmFibGVkKHRydWUpOwotCi0gICAg
aWYgKG1fdkJhciAmJiBuZWVkc1ZlcnRpY2FsU2Nyb2xsYmFyICYmIG9sZFN0eWxlICYmIG9sZFN0
eWxlLT5vdmVyZmxvd1koKSA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmIG92ZXJmbG93WSAhPSBPdmVy
Zmxvdzo6U2Nyb2xsKQotICAgICAgICBtX3ZCYXItPnNldEVuYWJsZWQodHJ1ZSk7Ci0KLSAgICBp
ZiAoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQotICAgICAgICB1cGRhdGVTY3JvbGxhYmxlQXJl
YVNldChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Nyb2xsYWJsZVZl
cnRpY2FsT3ZlcmZsb3coKSk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAg
IHNldElzTm9ybWFsRmxvd09ubHkoc2hvdWxkQmVOb3JtYWxGbG93T25seSgpKTsKQEAgLTY3MzQs
NiArNTU1NSw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAjZW5kaWYKICAgICB9CiAKKyAg
ICB1cGRhdGVMYXllclNjcm9sbGFibGVBcmVhKCk7CisKICAgICAvLyBGSVhNRTogUmVuZGVyTGF5
ZXIgYWxyZWFkeSBoYW5kbGVzIHZpc2liaWxpdHkgY2hhbmdlcyB0aHJvdWdoIG91ciB2aXNpYmls
aXR5IGRpcnR5IGJpdHMuIFRoaXMgbG9naWMgY291bGQKICAgICAvLyBsaWtlbHkgYmUgZm9sZGVk
IGFsb25nIHdpdGggdGhlIHJlc3QuCiAgICAgaWYgKG9sZFN0eWxlKSB7CkBAIC02NzQ1LDE4ICs1
NTY4LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgICAgIH0KIAogICAgICAgICAv
LyBWaXNpYmlsaXR5IGlzIGlucHV0IHRvIGNhblVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKS4KLSAg
ICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2VkKQotICAgICAgICAgICAgY29tcHV0ZUhhc0NvbXBv
c2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKKyAgICAgICAgaWYgKHZpc2liaWxpdHlDaGFuZ2Vk
ICYmIG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jb21w
dXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOwogICAgIH0KIAotICAgIGlmIChy
ZW5kZXJlcigpLmlzSFRNTE1hcnF1ZWUoKSAmJiByZW5kZXJlcigpLnN0eWxlKCkubWFycXVlZUJl
aGF2aW9yKCkgIT0gTWFycXVlZUJlaGF2aW9yOjpOb25lICYmIHJlbmRlcmVyKCkuaXNCb3goKSkg
ewotICAgICAgICBpZiAoIW1fbWFycXVlZSkKLSAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VV
bmlxdWU8UmVuZGVyTWFycXVlZT4odGhpcyk7Ci0gICAgICAgIG1fbWFycXVlZS0+dXBkYXRlTWFy
cXVlZVN0eWxlKCk7Ci0gICAgfSBlbHNlIGlmIChtX21hcnF1ZWUpCi0gICAgICAgIG1fbWFycXVl
ZSA9IG51bGxwdHI7Ci0KLSAgICB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShvbGRT
dHlsZSk7CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgbV9zY3JvbGxhYmxl
QXJlYS0+Y3JlYXRlT3JEZXN0cm95TWFycXVlZSgpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVh
LT51cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShvbGRTdHlsZSk7CisgICAgfQogICAg
IC8vIE92ZXJsYXkgc2Nyb2xsYmFycyBjYW4gbWFrZSB0aGlzIGxheWVyIHNlbGYtcGFpbnRpbmcg
c28gd2UgbmVlZAogICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgYml0IG9uY2Ugc2Nyb2xsYmFycyBo
YXZlIGJlZW4gdXBkYXRlZC4KICAgICB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwpAQCAtNjc3
MSwxMyArNTU5MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnN0eWxlQ2hhbmdlZChTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlCiAgICAgfQogICAgIAogICAg
IC8vIEZJWE1FOiBOZWVkIHRvIGRldGVjdCBhIHN3YXAgZnJvbSBjdXN0b20gdG8gbmF0aXZlIHNj
cm9sbGJhcnMgKGFuZCB2aWNlIHZlcnNhKS4KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hC
YXItPnN0eWxlQ2hhbmdlZCgpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c3R5
bGVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKLSAgICB1
cGRhdGVSZXNpemVyU3R5bGUoKTsKKyAgICBpZiAobV9zY3JvbGxhYmxlQXJlYSkKKyAgICAgICAg
bV9zY3JvbGxhYmxlQXJlYS0+dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRlZFN0eWxlKCk7CiAKICAg
ICB1cGRhdGVEZXNjZW5kYW50RGVwZW5kZW50RmxhZ3MoKTsKICAgICB1cGRhdGVUcmFuc2Zvcm0o
KTsKQEAgLTY3OTgsOTggKzU2MTIsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpzdHlsZUNoYW5nZWQo
U3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZQogI2VuZGlm
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGJvb2wgaGFz
T3ZlcmZsb3cpCi17Ci0gICAgRnJhbWVWaWV3JiBmcmFtZVZpZXcgPSByZW5kZXJlcigpLnZpZXco
KS5mcmFtZVZpZXcoKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlVG9IaXRUZXN0ID0gcmVuZGVyZXIo
KS52aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0gICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCog
b3duZXIgPSBmcmFtZVZpZXcuZnJhbWUoKS5vd25lckVsZW1lbnQoKSkKLSAgICAgICAgaXNWaXNp
YmxlVG9IaXRUZXN0ICY9IG93bmVyLT5yZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52
aXNpYmxlVG9IaXRUZXN0aW5nKCk7Ci0KLSAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJm
bG93ICYmIGlzVmlzaWJsZVRvSGl0VGVzdDsKLSAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFs
c2U7Ci0gICAgCi0gICAgQVNTRVJUKG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhID09IGZyYW1l
Vmlldy5jb250YWluc1Njcm9sbGFibGVBcmVhKHRoaXMpKTsKLSAgICAKLSAgICBpZiAoaXNTY3Jv
bGxhYmxlKSB7Ci0gICAgICAgIGlmICghbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEpIHsKLSAg
ICAgICAgICAgIGFkZGVkT3JSZW1vdmVkID0gZnJhbWVWaWV3LmFkZFNjcm9sbGFibGVBcmVhKHRo
aXMpOwotICAgICAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX3JlZ2lzdGVyZWRTY3JvbGxhYmxlQXJlYSkgewotICAg
ICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1lVmlldy5yZW1vdmVTY3JvbGxhYmxlQXJlYSh0aGlz
KTsKLSAgICAgICAgbV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPSBmYWxzZTsKLSAgICB9Ci0K
LSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKLSAgICBpZiAoYWRkZWRPclJlbW92ZWQpIHsK
LSAgICAgICAgaWYgKGlzU2Nyb2xsYWJsZSAmJiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygp
KQotICAgICAgICAgICAgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0aGUgdG91Y2gg
bGlzdGVuZXIgZm9yIHVuYWNjZWxlcmF0ZWQgb3ZlcmZsb3cgc2Nyb2xsaW5nLCBzbyBpZiB3ZSBi
ZWNhbWUKLSAgICAgICAgICAgIC8vIGFjY2VsZXJhdGVkLCByZW1vdmUgb3Vyc2VsdmVzIGFzIGEg
dG91Y2ggZXZlbnQgbGlzdGVuZXIuCi0gICAgICAgICAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgVU5V
U0VEX1ZBUklBQkxFKGFkZGVkT3JSZW1vdmVkKTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxDb3JuZXJTdHlsZSgpCi17Ci0gICAgUmVuZGVyRWxlbWVudCogYWN0
dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJhcihyZW5kZXJlcigpKTsKLSAgICBhdXRv
IGNvcm5lciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBhY3R1YWxSZW5kZXJlci0+
Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXIgfSwgJmFj
dHVhbFJlbmRlcmVyLT5zdHlsZSgpKSA6IG51bGxwdHI7Ci0KLSAgICBpZiAoIWNvcm5lcikgewot
ICAgICAgICBjbGVhclNjcm9sbENvcm5lcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKCFtX3Njcm9sbENvcm5lcikgewotICAgICAgICBtX3Njcm9sbENvcm5lciA9IGNyZWF0
ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVyKCkuZG9jdW1lbnQoKSwgV1RG
TW92ZSgqY29ybmVyKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBh
IGNoaWxkIG9mIGl0cyBwYXJlbnQhCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRQYXJlbnQo
JnJlbmRlcmVyKCkpOwotICAgICAgICBtX3Njcm9sbENvcm5lci0+aW5pdGlhbGl6ZVN0eWxlKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc2Nyb2xsQ29ybmVyLT5zZXRTdHlsZShXVEZNb3ZlKCpj
b3JuZXIpKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJTY3JvbGxDb3JuZXIoKQotewot
ICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Njcm9sbENv
cm5lci0+c2V0UGFyZW50KG51bGxwdHIpOwotICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsK
LX0KLQotdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlUmVzaXplclN0eWxlKCkKLXsKLSAgICBSZW5k
ZXJFbGVtZW50KiBhY3R1YWxSZW5kZXJlciA9IHJlbmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVy
KCkpOwotICAgIGF1dG8gcmVzaXplciA9IHJlbmRlcmVyKCkuaGFzT3ZlcmZsb3dDbGlwKCkgPyBh
Y3R1YWxSZW5kZXJlci0+Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSh7IFBzZXVkb0lkOjpSZXNpemVy
IH0sICZhY3R1YWxSZW5kZXJlci0+c3R5bGUoKSkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZXNp
emVyKSB7Ci0gICAgICAgIGNsZWFyUmVzaXplcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFtX3Jlc2l6ZXIpIHsKLSAgICAgICAgbV9yZXNpemVyID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVyZXIoKS5kb2N1bWVudCgpLCBXVEZNb3ZlKCpy
ZXNpemVyKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBBIHJlbmRlcmVyIHNob3VsZCBiZSBhIGNoaWxk
IG9mIGl0cyBwYXJlbnQhCi0gICAgICAgIG1fcmVzaXplci0+c2V0UGFyZW50KCZyZW5kZXJlcigp
KTsKLSAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpyZXNpemVyKSk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXI6OmNsZWFyUmVzaXplcigpCi17Ci0gICAgaWYgKCFtX3Jlc2l6ZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX3Jlc2l6ZXItPnNldFBhcmVudChudWxscHRyKTsKLSAgICBtX3Jl
c2l6ZXIgPSBudWxscHRyOwotfQotCiBSZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OnJlZmxlY3Rp
b25MYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVmbGVjdGlvbiA/IG1fcmVmbGVjdGlv
bi0+bGF5ZXIoKSA6IG51bGxwdHI7CkBAIC02OTcxLDYgKzU2OTMsMjYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2xlYXJMYXllckZpbHRlcnMoKQogICAgIG1fZmlsdGVycyA9IG51bGxwdHI7CiB9CiAK
K1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVyOjplbnN1cmVMYXllclNjcm9s
bGFibGVBcmVhKCkKK3sKKyAgICBib29sIGhhZFNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFy
ZWEoKTsKKyAgICBpZiAoIW1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFy
ZWEgPSBtYWtlVW5pcXVlPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+KCp0aGlzKTsKKworICAg
IGlmICghaGFkU2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPnN0b3Jl
U2Nyb2xsUG9zaXRpb24oKTsKKyAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS5nZXQoKTsKK30K
Kwordm9pZCBSZW5kZXJMYXllcjo6Y2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCkKK3sKKyAgICBp
ZiAobV9zY3JvbGxhYmxlQXJlYSkgeworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jbGVhclNj
cm9sbENvcm5lcigpOworICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5jbGVhclJlc2l6ZXIoKTsK
KyAgICAgICAgbV9zY3JvbGxhYmxlQXJlYSA9IG51bGxwdHI7CisgICAgfQorfQorCiB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVGaWx0ZXJzQWZ0ZXJTdHlsZUNoYW5nZSgpCiB7CiAgICAgaWYgKCFo
YXNGaWx0ZXIoKSkgewpAQCAtNjk4Nyw2ICs1NzI5LDE2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVw
ZGF0ZUZpbHRlcnNBZnRlclN0eWxlQ2hhbmdlKCkKICAgICAgICAgbV9maWx0ZXJzLT5yZW1vdmVS
ZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCk7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyU2Nyb2xsYWJsZUFyZWEoKQoreworICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigp
KSB8fCAhZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKS5yZXF1aXJlc0xheWVyV2l0aFNj
cm9sbGFibGVBcmVhKCkpIHsKKyAgICAgICAgY2xlYXJMYXllclNjcm9sbGFibGVBcmVhKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnN1cmVMYXllclNjcm9sbGFibGVBcmVhKCk7
Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQog
ewogICAgIC8vIFJlbmRlckxheWVyRmlsdGVycyBpcyBvbmx5IHVzZWQgdG8gcmVuZGVyIHRoZSBm
aWx0ZXJzIGluIHNvZnR3YXJlIG1vZGUsCkBAIC03MDIxLDcgKzU3NzMsNyBAQCBzdGF0aWMgUmVu
ZGVyTGF5ZXIqIHBhcmVudExheWVyQ3Jvc3NGcmFtZShjb25zdCBSZW5kZXJMYXllciYgbGF5ZXIp
CiAgICAgaWYgKGF1dG8qIHBhcmVudCA9IGxheWVyLnBhcmVudCgpKQogICAgICAgICByZXR1cm4g
cGFyZW50OwogCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ZyYW1lUmVuZGVyTGF5ZXIobGF5ZXIpOwor
ICAgIHJldHVybiBsYXllci5lbmNsb3NpbmdGcmFtZVJlbmRlckxheWVyKCk7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXI6OmlzVHJhbnNwYXJlbnRSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QK
QEAgLTcwNDMsNiArNTc5NSwxMSBAQCB2b2lkIFJlbmRlckxheWVyOjpzaW11bGF0ZUZyZXF1ZW50
UGFpbnQoKQogICAgIFNpbmdsZVBhaW50RnJlcXVlbmN5VHJhY2tpbmcgeyBtX3BhaW50RnJlcXVl
bmN5VHJhY2tlciwgcGFnZSgpLmxhc3RSZW5kZXJpbmdVcGRhdGVUaW1lc3RhbXAoKSB9OwogfQog
CitSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBSZW5kZXJMYXllcjo6c2Nyb2xsYWJsZUFyZWEo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVhLmdldCgpOworfQorCiAjaWYg
IUxPR19ESVNBQkxFRAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIFJlbmRlckxheWVyOjpFdmVudFJlZ2lvbkludmFsaWRhdGlvblJlYXNvbiByZWFzb24pCiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDM2YTA2YTRiZmIyMzU5
NTM4NGRhYzgxY2U2MDMzMzY2NTUwNDgzZGEuLjc2MjVmNDE3MTE2ZjBkZjI5OTQ5YzliNTMyMWNm
NTlkYzExNzAyNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgSWdh
bGlhIFMuTC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0IChDKSAxOTk4IE5ldHNjYXBl
IENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNs
dWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJQdHIuaCIKICNpbmNsdWRlICJTY3Jv
bGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8bWVt
b3J5PgogI2luY2x1ZGUgPHd0Zi9NYXJrYWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIFJlbmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVy
TGF5ZXJCYWNraW5nOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwogY2xhc3MgUmVuZGVy
TGF5ZXJGaWx0ZXJzOworY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFJl
bmRlck1hcnF1ZWU7CiBjbGFzcyBSZW5kZXJSZXBsaWNhOwogY2xhc3MgUmVuZGVyU2Nyb2xsYmFy
UGFydDsKQEAgLTE0MywxNyArMTQ0LDY5IEBAIHN0cnVjdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0
aW9ucyB7CiB1c2luZyBTY3JvbGxpbmdTY29wZSA9IHVpbnQ2NF90OwogCiBERUNMQVJFX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihSZW5kZXJMYXllcik7Ci1jbGFzcyBSZW5kZXJMYXll
ciBmaW5hbCA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJMYXllciA6IHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJMYXllcj4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKFJlbmRlckxheWVyKTsKIHB1YmxpYzoKICAgICBm
cmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5ZXJG
aWx0ZXJzOwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiAgICAgZnJpZW5k
IGNsYXNzIFJlbmRlckxheWVyQ29tcG9zaXRvcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTsKIAogICAgIGV4cGxpY2l0IFJlbmRlckxheWVyKFJlbmRlckxheWVy
TW9kZWxPYmplY3QmKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJMYXllcigpOwogCisgICAgV0VCQ09S
RV9FWFBPUlQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEoKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKiBlbnN1cmVM
YXllclNjcm9sbGFibGVBcmVhKCk7CisKKyAgICAvLyBTdGFydCBvZiB0ZW1wb3JhcnkgZ2x1ZSBj
b2RlIHRvIGhlbHAgbGFuZGluZyB3ZWJraXQub3JnL2IvNjAzMDUgKHNwbGl0IFJlbmRlckxheWVy
IGludG8gUmVuZGVyTGF5ZXIvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSkKKyAgICBTY3JvbGxU
eXBlIGN1cnJlbnRTY3JvbGxUeXBlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Nyb2xs
QW5pbWF0b3ImIHNjcm9sbEFuaW1hdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgU2Ny
b2xsT2Zmc2V0IHNjcm9sbE9mZnNldCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2Nyb2xsVG9PZmZzZXQoY29uc3QgU2Nyb2xsT2Zmc2V0JiwgY29uc3QgU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zJiA9IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9uczo6Y3JlYXRlUHJvZ3Jh
bW1hdGljKCkpOworICAgIHZvaWQgc2Nyb2xsVG9YUG9zaXRpb24oaW50IHgsIGNvbnN0IFNjcm9s
bFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworICAgIHZvaWQgc2Nyb2xsVG9ZUG9zaXRpb24oaW50
IHksIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworICAgIHZvaWQgc2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnMmKTsKKyAgICB2b2lkIHNjcm9sbEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6
ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Nyb2xsZWRBcmVhID0gbnVsbHB0cik7CisgICAg
dm9pZCBzZXRSZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oYm9vbCByZXF1aXJl
c1JlY29uY2lsaWF0aW9uID0gdHJ1ZSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29s
KTsKKyNlbmRpZgorICAgIHZvaWQgc2V0U2Nyb2xsU2hvdWxkQ2xlYXJMYXRjaGVkU3RhdGUoYm9v
bCk7CisgICAgYm9vbCBzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkg
Y29uc3Q7CisgICAgYm9vbCBjb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdDsK
KyAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKTsKKyAgICBS
ZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVMYXllclBvc2l0
aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwoKTsKKyAgICBib29sIGhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgdm9p
ZCBwYWludE92ZXJmbG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBib29sIHBhaW50aW5nT3ZlcmxheUNvbnRyb2xz
ID0gZmFsc2UpOworICAgIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKKyAgICB2b2lkIHBh
aW50UmVzaXplcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IExh
eW91dFJlY3QmIGRhbWFnZVJlY3QpOworICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIp
OworICAgIEludFNpemUgcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdDsKKyAgICBi
b29sIGhvcml6b250YWxTY3JvbGxiYXJIaWRkZW5CeVN0eWxlKCkgY29uc3Q7CisgICAgYm9vbCB2
ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFBvc3RM
YXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3JvbGxQb3NpdGlvbj4pOworICAgIHZvaWQg
cGFuU2Nyb2xsRnJvbVBvaW50KGNvbnN0IEludFBvaW50Jik7CisgICAgU2Nyb2xsUG9zaXRpb24g
c2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvckhvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdDsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRp
Y2FsU2Nyb2xsYmFyKCkgY29uc3Q7CisgICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3Q7CisgICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0OworICAg
IGJvb2wgc2Nyb2xsaW5nTWF5UmV2ZWFsQmFja2dyb3VuZCgpIGNvbnN0OworICAgIGJvb2wgaGFz
U2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0OworICAgIGJvb2wgaGFzU2Nyb2xs
YWJsZVZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGJhcnMoKSBj
b25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgfHwgdmVydGljYWxTY3JvbGxiYXIo
KTsgfQorICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIGhv
cml6b250YWxTY3JvbGxiYXIoKTsgfQorICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiB2ZXJ0aWNhbFNjcm9sbGJhcigpOyB9CisgICAgaW50IHZlcnRpY2FsU2Ny
b2xsYmFyV2lkdGgoT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5
U2Nyb2xsYmFyU2l6ZSkgY29uc3Q7CisgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
T3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFuY3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6
ZSkgY29uc3Q7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGlu
dCB4KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkp
LCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBl
ZCgpKTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0
KFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxQb3NpdGlvbkNoYW5n
ZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQorICAgIHZvaWQgc2V0
Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoYm9vbCk7CisgICAgLy8gRW5kIG9mIHRl
bXBvcmFyeSBnbHVlIGNvZGUKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgLy8gQ2Fs
bGVkIGJlZm9yZSB0aGUgcmVuZGVyZXIncyB3aWRnZXQgKGlmIGFueSkgaGFzIGJlZW4gbnVsbGVk
IG91dC4KICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpOwpAQCAtMjIzLDYgKzI3Niw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldExheWVyTGlzdE11dGF0aW9uQWxsb3dlZChib29sIGZsYWcpIHsg
bV9sYXllckxpc3RNdXRhdGlvbkFsbG93ZWQgPSBmbGFnOyB9CiAjZW5kaWYKIAorcHJvdGVjdGVk
OgorICAgIHZvaWQgZGVzdHJveSgpOworCiBwcml2YXRlOgogICAgIC8vIFRoZXNlIGZsYWdzIHBy
b3BhZ2F0ZSBpbiBwYWludCBvcmRlciAoei1vcmRlciB0cmVlKS4KICAgICBlbnVtIGNsYXNzIENv
bXBvc2l0aW5nIHsKQEAgLTQxMSw4ICs0NjcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxl
Q2hhbmdlZChTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAK
LSAgICBSZW5kZXJNYXJxdWVlKiBtYXJxdWVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXJxdWVlLmdl
dCgpOyB9Ci0KICAgICBib29sIGlzU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2lzU2VsZlBhaW50aW5nTGF5ZXI7IH0KIAogICAgIGJvb2wgY2Fubm90QmxpdFRvV2luZG93KCkg
Y29uc3Q7CkBAIC00MzMsMTA2ICs0ODcsMjkgQEAgcHVibGljOgogCiAgICAgTGF5b3V0UmVjdCBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gTGF5b3V0UmVjdChsb2NhdGlvbigpLCBzaXplKCkpOyB9CiAK
LSAgICBJbnRTaXplIHZpc2libGVTaXplKCkgY29uc3QgZmluYWw7Ci0gICAgSW50U2l6ZSBjb250
ZW50c1NpemUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVu
dHNTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSB2aXNpYmxlU2l6ZSgpIGNvbnN0Owog
CiAgICAgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7CiAgICAgaW50IHNjcm9sbEhlaWdodCgpIGNv
bnN0OwogCi0gICAgdm9pZCBwYW5TY3JvbGxGcm9tUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKLQot
ICAgIC8vIFNjcm9sbGluZyBtZXRob2RzIGZvciBsYXllcnMgdGhhdCBjYW4gc2Nyb2xsIHRoZWly
IG92ZXJmbG93LgotICAgIHZvaWQgc2Nyb2xsQnlSZWN1cnNpdmVseShjb25zdCBJbnRTaXplJiBk
ZWx0YSwgU2Nyb2xsYWJsZUFyZWEqKiBzY3JvbGxlZEFyZWEgPSBudWxscHRyKTsKLQotICAgIGJv
b2wgcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgU2Ny
b2xsVHlwZSA9IFNjcm9sbFR5cGU6OlVzZXIsIFNjcm9sbENsYW1waW5nID0gU2Nyb2xsQ2xhbXBp
bmc6OkNsYW1wZWQpIGZpbmFsOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09m
ZnNldChjb25zdCBTY3JvbGxPZmZzZXQmLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlv
bnMmID0gU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWMoKSk7
Ci0KLSAgICB2b2lkIHNjcm9sbFRvWFBvc2l0aW9uKGludCB4LCBjb25zdCBTY3JvbGxQb3NpdGlv
bkNoYW5nZU9wdGlvbnMmKTsKLSAgICB2b2lkIHNjcm9sbFRvWVBvc2l0aW9uKGludCB5LCBjb25z
dCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRp
b25zJik7Ci0KLSAgICAvLyBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IG1hcnF1ZWUuCi0gICAgdm9p
ZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHgs
IHNjcm9sbE9mZnNldCgpLnkoKSksIFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9uczo6Y3JlYXRl
UHJvZ3JhbW1hdGljVW5jbGFtcGVkKCkpOyB9Ci0gICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50
IHkpIHsgc2Nyb2xsVG9PZmZzZXQoU2Nyb2xsT2Zmc2V0KHNjcm9sbE9mZnNldCgpLngoKSwgeSks
IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9uczo6Y3JlYXRlUHJvZ3JhbW1hdGljVW5jbGFtcGVk
KCkpOyB9Ci0KLSAgICB2b2lkIHNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4pOwotICAgIHZvaWQgYXBwbHlQb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb25J
Zk5lZWRlZCgpOwotCiAgICAgLy8gUmV0dXJucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbGF5ZXIg
dGhhdCBpcyBzY3JvbGxhYmxlLgogICAgIC8vIEZJWE1FOiBUaGlzIGNhbiByZXR1cm4gdGhlIFJl
bmRlclZpZXcncyBsYXllciB3aGVuIGNhbGxlcnMgcHJvYmFibHkgd2FudCB0aGUgRnJhbWVWaWV3
IGFzIGEgU2Nyb2xsYWJsZUFyZWEuCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1Njcm9sbGFi
bGVMYXllcihJbmNsdWRlU2VsZk9yTm90LCBDcm9zc0ZyYW1lQm91bmRhcmllcykgY29uc3Q7CiAK
LSAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXplQ2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdl
UmVhc29uKSBmaW5hbDsKLQogICAgIC8vICJhYnNvbHV0ZVJlY3QiIGlzIGluIHNjYWxlZCBkb2N1
bWVudCBjb29yZGluYXRlcy4KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgTGF5
b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0
VG9WaXNpYmxlT3B0aW9ucyYpOwotCi0gICAgYm9vbCBzY3JvbGxzT3ZlcmZsb3coKSBjb25zdDsK
LSAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBi
b29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNT
Y3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9oQmFyIHx8IG1fdkJhcjsgfQotICAgIHZvaWQg
c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGJvb2wpOwotCi0gICAgUmVmPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNj
cm9sbGJhck9yaWVudGF0aW9uKTsKLSAgICB2b2lkIGRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFy
T3JpZW50YXRpb24pOwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpOyB9Ci0gICAgYm9vbCBoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KLQotICAgIGJv
b2wgaG9yaXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKLSAgICBi
b29sIHZlcnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOwotCi0gICAg
Ly8gU2Nyb2xsYWJsZUFyZWEgb3ZlcnJpZGVzCi0gICAgU2Nyb2xsUG9zaXRpb24gc2Nyb2xsUG9z
aXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9Ci0KLSAgICBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hC
YXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYWJsZUFyZWEqIGVuY2xvc2lu
Z1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZl
bnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgT3B0aW9uYWw8V2hlZWxT
Y3JvbGxHZXN0dXJlU3RhdGU+KSBmaW5hbDsKLSAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVy
YmFuZGFibGUoKSBmaW5hbDsKLSAgICBib29sIGhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxl
QW5jZXN0b3IoKSBmaW5hbDsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgZmlu
YWw7Ci0jaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkIHVwZGF0ZVNuYXBPZmZz
ZXRzKCkgZmluYWw7Ci0jZW5kaWYKLQotICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxQb3NpdGlvblJl
Y29uY2lsaWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVj
b25jaWxpYXRpb247IH0KLSAgICB2b2lkIHNldFJlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNp
bGlhdGlvbihib29sIHJlcXVpcmVzUmVjb25jaWxpYXRpb24gPSB0cnVlKSB7IG1fcmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uID0gcmVxdWlyZXNSZWNvbmNpbGlhdGlvbjsgfQot
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JikgZmlu
YWw7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7Ci0gICAg
dm9pZCBkaWRFbmRTY3JvbGwoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZp
bmFsOwotI2VuZGlmCi0KICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291bGQg
ZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUgaXMg
YWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KICAgICBib29sIGNhblVzZUNvbXBvc2l0ZWRT
Y3JvbGxpbmcoKSBjb25zdDsKICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBhY3R1
YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8tZGF0
ZSkuCi0gICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisgICAgYm9vbCBoYXND
b21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3Q7CiAKLSAgICBpbnQgdmVydGljYWxT
Y3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJs
YXlTY3JvbGxiYXJTaXplKSBjb25zdDsKLSAgICBpbnQgaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdo
dChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlTY3JvbGxiYXJT
aXplKSBjb25zdDsKKyAgICBib29sIGhhc092ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3Q7CiAKLSAg
ICBib29sIGhhc092ZXJmbG93Q29udHJvbHMoKSBjb25zdDsKICAgICBib29sIGlzUG9pbnRJblJl
c2l6ZUNvbnRyb2woSW50UG9pbnQgbG9jYWxQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9p
bnQpOwogICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYg
bG9jYWxQb2ludCkgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3Qs
IGJvb2wgcGFpbnRpbmdPdmVybGF5Q29udHJvbHMgPSBmYWxzZSk7Ci0gICAgdm9pZCBwYWludFNj
cm9sbENvcm5lcihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpOwotICAgIHZvaWQgcGFpbnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCk7Ci0KICAg
ICB2b2lkIHVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpOwogCi0gICAgYm9vbCBzY3JvbGwo
U2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEp
OwogICAgIHZvaWQgYXV0b3Njcm9sbChjb25zdCBJbnRQb2ludCYpOwogCiAgICAgYm9vbCBjYW5S
ZXNpemUoKSBjb25zdDsKQEAgLTU1NSw5ICs1MzIsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRh
dGVMYXllclBvc2l0aW9uc0FmdGVyU3R5bGVDaGFuZ2UoKTsKICAgICB2b2lkIHVwZGF0ZUxheWVy
UG9zaXRpb25zQWZ0ZXJMYXlvdXQoYm9vbCBpc1JlbGF5b3V0aW5nU3VidHJlZSwgYm9vbCBkaWRG
dWxsUmVwYWludCk7CiAKLSAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCgpOwotICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsKCk7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRMYXllckluRW5jbG9zaW5nUGFnaW5hdGlv
bkNoYWluKCkgY29uc3Q7CiAgICAgZW51bSBQYWdpbmF0aW9uSW5jbHVzaW9uTW9kZSB7IEV4Y2x1
ZGVDb21wb3NpdGVkUGFnaW5hdGVkTGF5ZXJzLCBJbmNsdWRlQ29tcG9zaXRlZFBhZ2luYXRlZExh
eWVycyB9OwogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdQYWdpbmF0aW9uTGF5ZXIoUGFnaW5h
dGlvbkluY2x1c2lvbk1vZGUgbW9kZSkgY29uc3QKQEAgLTYzNyw2ICs2MTEsOCBAQCBwdWJsaWM6
CiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0FuY2VzdG9yRm9yUG9zaXRpb24oUG9zaXRpb25U
eXBlKSBjb25zdDsKICAgICAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXJJbkNvbnRh
aW5pbmdCbG9ja09yZGVyKCkgY29uc3Q7CisgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ0NvbnRh
aW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVzKSBjb25zdDsKKyAgICBSZW5kZXJM
YXllciogZW5jbG9zaW5nRnJhbWVSZW5kZXJMYXllcigpIGNvbnN0OwogCiAgICAgLy8gVGhlIGxh
eWVyIHJlbGF0aXZlIHRvIHdoaWNoIGNsaXBwaW5nIHJlY3RzIGZvciB0aGlzIGxheWVyIGFyZSBj
b21wdXRlZC4KICAgICBSZW5kZXJMYXllciogY2xpcHBpbmdSb290Rm9yUGFpbnRpbmcoKSBjb25z
dDsKQEAgLTY5OCw3ICs2NzQsNiBAQCBwdWJsaWM6CiAgICAgICAgIFJlbmRlck9iamVjdCogc3Vi
dHJlZVBhaW50Um9vdCA9IG51bGxwdHIsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4gPSB7IH0s
IFNlY3VyaXR5T3JpZ2luUGFpbnRQb2xpY3kgPSBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5OjpB
bnlPcmlnaW4sIEV2ZW50UmVnaW9uQ29udGV4dCogPSBudWxscHRyKTsKICAgICBib29sIGhpdFRl
c3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jik7CiAgICAgYm9vbCBoaXRU
ZXN0KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwgSGl0VGVz
dFJlc3VsdCYpOwotICAgIHZvaWQgcGFpbnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0LCBPcHRpb25TZXQ8UGFpbnRCZWhhdmlv
cj4sIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCA9IG51bGxwdHIpOwogCiAgICAgc3Ry
dWN0IENsaXBSZWN0c0NvbnRleHQgewogICAgICAgICBDbGlwUmVjdHNDb250ZXh0KGNvbnN0IFJl
bmRlckxheWVyKiBpblJvb3RMYXllciwgQ2xpcFJlY3RzVHlwZSBpbkNsaXBSZWN0c1R5cGUsIE92
ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IGluT3ZlcmxheVNjcm9sbGJhclNpemVSZWxldmFu
Y3kgPSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSwgU2hvdWxkUmVzcGVjdE92ZXJmbG93Q2xp
cCBpblJlc3BlY3RPdmVyZmxvd0NsaXAgPSBSZXNwZWN0T3ZlcmZsb3dDbGlwKQpAQCAtNzg0LDEx
ICs3NTksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdGF0aWNJbmxpbmVQb3NpdGlvbihMYXlv
dXRVbml0IHBvc2l0aW9uKSB7IG1fc3RhdGljSW5saW5lUG9zaXRpb24gPSBwb3NpdGlvbjsgfQog
ICAgIHZvaWQgc2V0U3RhdGljQmxvY2tQb3NpdGlvbihMYXlvdXRVbml0IHBvc2l0aW9uKSB7IG1f
c3RhdGljQmxvY2tQb3NpdGlvbiA9IHBvc2l0aW9uOyB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KLSAgICB2b2lkIHNldEFk
anVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyhib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNj
cm9sbGluZykgeyBtX2FkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZyA9IGFkanVzdEZvcklP
U0NhcmV0V2hlblNjcm9sbGluZzsgfQotI2VuZGlmCi0KICAgICBib29sIGhhc1RyYW5zZm9ybSgp
IGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCkuaGFzVHJhbnNmb3JtKCk7IH0KICAgICAvLyBOb3Rl
IHRoYXQgdGhpcyB0cmFuc2Zvcm0gaGFzIHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGJha2VkIGluLgog
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zZm9ybS5nZXQoKTsgfQpAQCAtODU4LDE2ICs4MjgsMTEgQEAgcHVibGljOgogICAgIFJlbmRl
ckxheWVyQmFja2luZyogZW5zdXJlQmFja2luZygpOwogICAgIHZvaWQgY2xlYXJCYWNraW5nKGJv
b2wgbGF5ZXJCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlKTsKIAotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyRm9ySG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IGZpbmFsOwotICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyRm9yVmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsKLSAgICBHcmFwaGlj
c0xheWVyKiBsYXllckZvclNjcm9sbENvcm5lcigpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCB1
c2VzQ29tcG9zaXRlZFNjcm9sbGluZygpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgdXNlc0FzeW5j
U2Nyb2xsaW5nKCkgY29uc3QgZmluYWw7Ci0KICAgICBib29sIGhhc0NvbXBvc2l0ZWRTY3JvbGxp
bmdBbmNlc3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcG9zaXRlZFNjcm9sbGluZ0FuY2Vz
dG9yOyB9CiAgICAgdm9pZCBzZXRIYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IoYm9vbCBo
YXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3IpIHsgbV9oYXNDb21wb3NpdGVkU2Nyb2xsaW5n
QW5jZXN0b3IgPSBoYXNDb21wb3NpdGVkU2Nyb2xsaW5nQW5jZXN0b3I7IH0KIAorICAgIGJvb2wg
dXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdDsKKwogICAgIC8vIExheWVycyB3aXRoIHRo
ZSBzYW1lIFNjcm9sbGluZ1Njb3BlIGFyZSBzY3JvbGxlZCBieSBzb21lIGNvbW1vbiBhbmNlc3Rv
ciBzY3JvbGxlci4gVXNlZCBmb3IgYXN5bmMgc2Nyb2xsaW5nLgogICAgIE9wdGlvbmFsPFNjcm9s
bGluZ1Njb3BlPiBib3hTY3JvbGxpbmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm94U2Nyb2xs
aW5nU2NvcGU7IH0KICAgICBPcHRpb25hbDxTY3JvbGxpbmdTY29wZT4gY29udGVudHNTY3JvbGxp
bmdTY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTY3JvbGxpbmdTY29wZTsgfQpAQCAt
ODg1LDExICs4NTAsNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIHF1ZXJ5IHJlY3QgaXMgZ2l2ZW4g
aW4gbG9jYWwgY29vcmRpbmF0ZXMuCiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPcGFx
dWVJblJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCi0gICAgYm9vbCBzY3JvbGxpbmdN
YXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0KLSAgICBib29sIGNvbnRhaW5zRGlydHlPdmVy
bGF5U2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3Jv
bGxiYXJzOyB9Ci0gICAgdm9pZCBzZXRDb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMoYm9v
bCBkaXJ0eVNjcm9sbGJhcnMpIHsgbV9jb250YWluc0RpcnR5T3ZlcmxheVNjcm9sbGJhcnMgPSBk
aXJ0eVNjcm9sbGJhcnM7IH0KLQogICAgIGJvb2wgcGFpbnRzV2l0aEZpbHRlcnMoKSBjb25zdDsK
ICAgICBib29sIHJlcXVpcmVzRnVsbExheWVySW1hZ2VGb3JGaWx0ZXJzKCkgY29uc3Q7CiAKQEAg
LTkxOCw4ICs4NzgsNiBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJMYXllciogZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3dBbmNlc3RvcigpIGNvbnN0OwogCi0gICAgYm9vbCBzaG91bGRQbGFjZUJsb2Nr
RGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gcmVuZGVyZXIo
KS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7IH0KLQogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2ltdWxhdGVGcmVxdWVudFBhaW50KCk7CiAgICAgYm9vbCBwYWlu
dGluZ0ZyZXF1ZW50bHkoKSBjb25zdCB7IHJldHVybiBtX3BhaW50RnJlcXVlbmN5VHJhY2tlci5w
YWludGluZ0ZyZXF1ZW50bHkoKTsgfQogCkBAIC05MzAsNyArODg4LDcgQEAgcHVibGljOgogICAg
IGVudW0gY2xhc3MgRXZlbnRSZWdpb25JbnZhbGlkYXRpb25SZWFzb24geyBQYWludCwgU2V0dGlu
Z0RpZENoYW5nZSwgU3R5bGUsIE5vbkNvbXBvc2l0ZWRGcmFtZSB9OwogICAgIGJvb2wgaW52YWxp
ZGF0ZUV2ZW50UmVnaW9uKEV2ZW50UmVnaW9uSW52YWxpZGF0aW9uUmVhc29uKTsKIAotICAgIFN0
cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisgICAgU3RyaW5nIGRlYnVnRGVz
Y3JpcHRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKIApAQCAtMTAxMCw5ICs5NjgsNiBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCB1cGRhdGVTZWxmUGFpbnRpbmdMYXllcigpOwogCi0gICAgdm9pZCB1
cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7Ci0KICAgICBlbnVt
IFVwZGF0ZUxheWVyUG9zaXRpb25zRmxhZyB7CiAgICAgICAgIENoZWNrRm9yUmVwYWludCAgICAg
ICAgICAgICAgICAgICAgID0gMSA8PCAwLAogICAgICAgICBOZWVkc0Z1bGxSZXBhaW50SW5CYWNr
aW5nICAgICAgICAgICA9IDEgPDwgMSwKQEAgLTEwMzgsOCArOTkzLDYgQEAgcHJpdmF0ZToKICAg
ICB9OwogICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlclNjcm9sbChSZW5kZXJHZW9t
ZXRyeU1hcCosIE9wdGlvblNldDxVcGRhdGVMYXllclBvc2l0aW9uc0FmdGVyU2Nyb2xsRmxhZz4g
PSB7IH0pOwogCi0gICAgU2Nyb2xsT2Zmc2V0IGNsYW1wU2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9s
bE9mZnNldCYpIGNvbnN0OwotCiAgICAgUmVuZGVyTGF5ZXIqIGVuY2xvc2luZ1BhZ2luYXRpb25M
YXllckluU3VidHJlZShjb25zdCBSZW5kZXJMYXllciogcm9vdExheWVyLCBQYWdpbmF0aW9uSW5j
bHVzaW9uTW9kZSkgY29uc3Q7CiAKICAgICBMYXlvdXRQb2ludCByZW5kZXJCb3hMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkgPyBkb3duY2FzdDxSZW5k
ZXJCb3g+KHJlbmRlcmVyKCkpLmxvY2F0aW9uKCkgOiBMYXlvdXRQb2ludCgpOyB9CkBAIC0xMDUz
LDYgKzEwMDYsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7CiAg
ICAgdm9pZCBjbGVhckxheWVyRmlsdGVycygpOwogCisgICAgdm9pZCB1cGRhdGVMYXllclNjcm9s
bGFibGVBcmVhKCk7CisgICAgdm9pZCBjbGVhckxheWVyU2Nyb2xsYWJsZUFyZWEoKTsKKwogICAg
IFJlbmRlckxheWVyRmlsdGVycyogZmlsdGVyc0ZvclBhaW50aW5nKEdyYXBoaWNzQ29udGV4dCYs
IE9wdGlvblNldDxQYWludExheWVyRmxhZz4pIGNvbnN0OwogICAgIEdyYXBoaWNzQ29udGV4dCog
c2V0dXBGaWx0ZXJzKEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBMYXllclBh
aW50aW5nSW5mbyYsIE9wdGlvblNldDxQYWludExheWVyRmxhZz4sIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290KTsKICAgICB2b2lkIGFwcGx5RmlsdGVycyhHcmFwaGljc0NvbnRleHQm
IG9yaWdpbmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBPcHRpb25TZXQ8UGFp
bnRCZWhhdmlvcj4sIGNvbnN0IExheWVyRnJhZ21lbnRzJik7CkBAIC0xMDk5LDY0ICsxMDU1LDEz
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVz
dFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZHMs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIEhpdFRlc3RGaWx0ZXIpIGNvbnN0OwogICAgIGJvb2wg
aGl0VGVzdENvbnRlbnRzRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiwg
SGl0VGVzdEZpbHRlciwgYm9vbCYgaW5zaWRlQ2xpcFJlY3QpIGNvbnN0OwotICAgIGJvb2wgaGl0
VGVzdFJlc2l6ZXJJbkZyYWdtZW50cyhjb25zdCBMYXllckZyYWdtZW50cyYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYsIExheW91dFBvaW50JiBwb2ludEluRnJhZ21lbnQpIGNvbnN0OwogICAgIFJl
bmRlckxheWVyKiBoaXRUZXN0VHJhbnNmb3JtZWRMYXllckluRnJhZ21lbnRzKFJlbmRlckxheWVy
KiByb290TGF5ZXIsIFJlbmRlckxheWVyKiBjb250YWluZXJMYXllciwgY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwKICAgICAgICAgY29uc3QgTGF5b3V0UmVjdCYgaGl0VGVz
dFJlY3QsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYsIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1T
dGF0ZSogPSBudWxscHRyLCBkb3VibGUqIHpPZmZzZXQgPSBudWxscHRyKTsKIAogICAgIGJvb2wg
bGlzdEJhY2tncm91bmRJc0tub3duVG9CZU9wYXF1ZUluUmVjdChjb25zdCBMYXllckxpc3QmLCBj
b25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNp
b25zKCk7Ci0gICAgdm9pZCBjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygp
OwotCi0gICAgYm9vbCBoYXNIb3Jpem9udGFsT3ZlcmZsb3coKSBjb25zdDsKLSAgICBib29sIGhh
c1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25zdDsKLQotICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRy
b2xzKCkgY29uc3Q7Ci0KICAgICBib29sIHNob3VsZEJlU2VsZlBhaW50aW5nTGF5ZXIoKSBjb25z
dDsKIAotICAgIC8vIFNjcm9sbGFibGVBcmVhIGludGVyZmFjZQotICAgIGJvb2wgaXNSZW5kZXJM
YXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxDb3JuZXJSZWN0KGNvbnN0IEludFJlY3QmKSBmaW5hbDsKLSAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBpc1Njcm9sbENvcm5lclZpc2li
bGUoKSBjb25zdCBmaW5hbDsKLSAgICBJbnRSZWN0IHNjcm9sbENvcm5lclJlY3QoKSBjb25zdCBm
aW5hbDsKLSAgICBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0JikgY29uc3QgZmluYWw7Ci0gICAgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Nj
cm9sbGJhcihjb25zdCBTY3JvbGxiYXImLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0IGZpbmFsOwot
ICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYpIGZpbmFsOwotICAg
IFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQoKSBjb25zdCBmaW5hbDsKLQotICAgIElu
dFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0SW50ZXJuYWwoVmlzaWJsZUNvbnRlbnRSZWN0SW5jbHVk
ZXNTY3JvbGxiYXJzLCBWaXNpYmxlQ29udGVudFJlY3RCZWhhdmlvcikgY29uc3QgZmluYWw7Ci0g
ICAgSW50U2l6ZSBvdmVyaGFuZ0Ftb3VudCgpIGNvbnN0IGZpbmFsOwotICAgIEludFBvaW50IGxh
c3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdCBmaW5hbDsKLSAgICBib29sIGlzSGFu
ZGxpbmdXaGVlbEV2ZW50KCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBzaG91bGRTdXNwZW5kU2Ny
b2xsQW5pbWF0aW9ucygpIGNvbnN0IGZpbmFsOwotICAgIEludFJlY3Qgc2Nyb2xsYWJsZUFyZWFC
b3VuZGluZ0JveChib29sKiBpc0luc2lkZUZpeGVkID0gbnVsbHB0cikgY29uc3QgZmluYWw7Ci0g
ICAgYm9vbCBpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBp
c1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBmb3JjZVVwZGF0
ZVNjcm9sbGJhcnNPbk1haW5UaHJlYWRGb3JQZXJmb3JtYW5jZVRlc3RpbmcoKSBjb25zdCBmaW5h
bDsKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIGJvb2wgaXNTY3JvbGxTbmFwSW5Q
cm9ncmVzcygpIGNvbnN0IGZpbmFsOwotI2VuZGlmCi0gICAgYm9vbCB1c2VzTW9ja1Njcm9sbEFu
aW1hdG9yKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNz
YWdlKGNvbnN0IFN0cmluZyYpIGNvbnN0IGZpbmFsOwotCi0jaWYgRU5BQkxFKElPU19UT1VDSF9F
VkVOVFMpCi0gICAgdm9pZCByZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5n
KCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmco
KTsKLSNlbmRpZgotCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
dGhlIG92ZXJyaWRkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCi0gICAg
dm9pZCBzY3JvbGxUbyhjb25zdCBTY3JvbGxQb3NpdGlvbiYpOwotICAgIHZvaWQgdXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOwotCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZz
ZXQoY29uc3QgU2Nyb2xsYmFyJikgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB1cGRhdGVTY3JvbGxh
YmxlQXJlYVNldChib29sIGhhc092ZXJmbG93KTsKLSAgICAKICAgICBib29sIGFsbG93c0N1cnJl
bnRTY3JvbGwoKSBjb25zdDsKIAogICAgIHZvaWQgZGlydHlBbmNlc3RvckNoYWluVmlzaWJsZURl
c2NlbmRhbnRTdGF0dXMoKTsKQEAgLTExOTYsMTQgKzExMDEsNiBAQCBwcml2YXRlOgogICAgIC8v
IENvbnZlcnQgYSBwb2ludCBpbiBhYnNvbHV0ZSBjb29yZHMgaW50byBsYXllciBjb29yZHMsIHRh
a2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudAogICAgIExheW91dFBvaW50IGFic29sdXRlVG9D
b250ZW50cyhjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgdm9pZCBwb3NpdGlvbk92
ZXJmbG93Q29udHJvbHMoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgdXBkYXRlU2Nyb2xsQ29y
bmVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyU2Nyb2xsQ29ybmVyKCk7Ci0gICAgdm9pZCB1cGRh
dGVSZXNpemVyU3R5bGUoKTsKLSAgICB2b2lkIGNsZWFyUmVzaXplcigpOwotCi0gICAgdm9pZCBk
cmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UmVj
dCYgcmVzaXplckNvcm5lclJlY3QpOwotCiAgICAgdm9pZCB1cGRhdGVQYWdpbmF0aW9uKCk7CiAK
ICAgICB2b2lkIHNldEhhc0NvbXBvc2l0aW5nRGVzY2VuZGFudChib29sIGIpICB7IG1faGFzQ29t
cG9zaXRpbmdEZXNjZW5kYW50ID0gYjsgfQpAQCAtMTIxMiwxMSArMTEwOSw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRJbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uKEluZGlyZWN0Q29tcG9zaXRp
bmdSZWFzb24gcmVhc29uKSB7IG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNvbiA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyZWFzb24pOyB9CiAgICAgYm9vbCBtdXN0Q29tcG9zaXRlRm9ySW5kaXJl
Y3RSZWFzb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdENvbXBvc2l0aW5nUmVhc29uOyB9
CiAKLSAgICBMYXlvdXRVbml0IG92ZXJmbG93VG9wKCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBv
dmVyZmxvd0JvdHRvbSgpIGNvbnN0OwotICAgIExheW91dFVuaXQgb3ZlcmZsb3dMZWZ0KCkgY29u
c3Q7Ci0gICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0KCkgY29uc3Q7Ci0KICAgICBzdHJ1Y3Qg
T3ZlcmZsb3dDb250cm9sUmVjdHMgewogICAgICAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXI7CiAgICAgICAgIEludFJlY3QgdmVydGljYWxTY3JvbGxiYXI7CkBAIC0xMjI5LDggKzExMjEs
NiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgT3ZlcmZsb3dDb250cm9sUmVjdHMgb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCkgY29uc3Q7CiAKLSAgICBib29sIG92ZXJmbG93Q29udHJvbHNJbnRlcnNl
Y3RSZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3Q7Ci0KICAgICBPcHRpb25TZXQ8
Q29tcG9zaXRpbmc+IG1fY29tcG9zaXRpbmdEaXJ0eUJpdHM7CiAKICAgICBjb25zdCBib29sIG1f
aXNSZW5kZXJWaWV3TGF5ZXIgOiAxOwpAQCAtMTI0Nyw3ICsxMTM3LDYgQEAgcHJpdmF0ZToKICAg
ICAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBsYXllciBpcyBjdXJyZW50bHkgcmVzaXpp
bmcsIHNvIGV2ZW50cyBjYW4gY2F1c2UgcmVzaXppbmcgdG8gc3RhcnQgYW5kIHN0b3AuCiAgICAg
Ym9vbCBtX2luUmVzaXplTW9kZSA6IDE7CiAKLSAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9uc0Rp
cnR5IDogMTsKICAgICBib29sIG1faXNTZWxmUGFpbnRpbmdMYXllciA6IDE7CiAKICAgICAvLyBJ
ZiBoYXZlIG5vIHNlbGYtcGFpbnRpbmcgZGVzY2VuZGFudHMsIHdlIGRvbid0IGhhdmUgdG8gd2Fs
ayBvdXIgY2hpbGRyZW4gZHVyaW5nIHBhaW50aW5nLiBUaGlzIGNhbiBsZWFkIHRvCkBAIC0xMjU5
LDE0ICsxMTQ4LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBlbmRlZCB1cCBwYWludGluZyB0aGlzIGxheWVyIG9yIGFueSBkZXNjZW5kYW50cyAo
YW5kIHRoZXJlZm9yZSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBibGVuZCkuCiAgICAgYm9vbCBtX3BhaW50aW5nSW5zaWRlUmVmbGVjdGlvbiA6IDE7ICAvLyBB
IHN0YXRlIGJpdCB0cmFja2luZyBpZiB3ZSBhcmUgcGFpbnRpbmcgaW5zaWRlIGEgcmVwbGljYS4K
LSAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKICAgICB1bnNpZ25lZCBtX3JlcGFp
bnRTdGF0dXMgOiAyOyAvLyBSZXBhaW50U3RhdHVzCiAKICAgICBib29sIG1fdmlzaWJsZUNvbnRl
bnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hhc1Zpc2libGVDb250ZW50IDogMTsKICAg
ICBib29sIG1fdmlzaWJsZURlc2NlbmRhbnRTdGF0dXNEaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2hh
c1Zpc2libGVEZXNjZW5kYW50IDogMTsKLSAgICBib29sIG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVB
cmVhIDogMTsKICAgICBib29sIG1faXNGaXhlZEludGVyc2VjdGluZ1ZpZXdwb3J0IDogMTsKICAg
ICBib29sIG1fYmVoYXZlc0FzRml4ZWQgOiAxOwogCkBAIC0xMjc3LDcgKzExNjQsNiBAQCBwcml2
YXRlOgogCiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWROb25Db250YWluZWREZXNjZW5kYW50cyA6
IDE7CiAgICAgYm9vbCBtX2hhc0NvbXBvc2l0ZWRTY3JvbGxpbmdBbmNlc3RvciA6IDE7IC8vIElu
IHRoZSBsYXllci1vcmRlciB0cmVlLgotICAgIGJvb2wgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJs
ZU92ZXJmbG93IDogMTsKIAogICAgIGJvb2wgbV9oYXNUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsK
ICAgICBib29sIG1faGFzM0RUcmFuc2Zvcm1lZEFuY2VzdG9yIDogMTsKQEAgLTEyODcsMTcgKzEx
NzMsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kaXJlY3RDb21wb3NpdGluZ1JlYXNv
biA6IDQ7IC8vIEluZGlyZWN0Q29tcG9zaXRpbmdSZWFzb24KICAgICB1bnNpZ25lZCBtX3ZpZXdw
b3J0Q29uc3RyYWluZWROb3RDb21wb3NpdGVkUmVhc29uIDogMjsgLy8gVmlld3BvcnRDb25zdHJh
aW5lZE5vdENvbXBvc2l0ZWRSZWFzb24KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaWYg
RU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgYm9vbCBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZyA6IDE7Ci0jZW5kaWYKLSAgICBib29sIG1fYWRqdXN0Rm9y
SU9TQ2FyZXRXaGVuU2Nyb2xsaW5nIDogMTsKLSNlbmRpZgotCi0gICAgYm9vbCBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbiA6IDE7Ci0gICAgYm9vbCBtX2NvbnRhaW5zRGly
dHlPdmVybGF5U2Nyb2xsYmFycyA6IDE7Ci0gICAgYm9vbCBtX3VwZGF0aW5nTWFycXVlZVBvc2l0
aW9uIDogMTsKLQogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2xheWVyTGlzdE11dGF0
aW9uQWxsb3dlZCA6IDE7CiAjZW5kaWYKQEAgLTEzMzgsMjUgKzEyMTMsMTEgQEAgcHJpdmF0ZToK
ICAgICAvLyBUaGUgbGF5ZXIncyB3aWR0aC9oZWlnaHQKICAgICBJbnRTaXplIG1fbGF5ZXJTaXpl
OwogCi0gICAgU2Nyb2xsUG9zaXRpb24gbV9zY3JvbGxQb3NpdGlvbjsKLSAgICBPcHRpb25hbDxT
Y3JvbGxQb3NpdGlvbj4gbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICAvLyBUaGUg
d2lkdGgvaGVpZ2h0IG9mIG91ciBzY3JvbGxlZCBhcmVhLgotICAgIEludFNpemUgbV9zY3JvbGxT
aXplOwotCi0gICAgLy8gRm9yIGxheWVycyB3aXRoIG92ZXJmbG93LCB3ZSBoYXZlIGEgcGFpciBv
ZiBzY3JvbGxiYXJzLgotICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1faEJhcjsKLSAgICBSZWZQdHI8
U2Nyb2xsYmFyPiBtX3ZCYXI7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2xpcFJlY3RzQ2FjaGU+
IG1fY2xpcFJlY3RzQ2FjaGU7Ci0gICAgCi0gICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Ny
b2xsYmFyT2Zmc2V0OwogCiAgICAgTWFya2FibGU8U2Nyb2xsaW5nU2NvcGUsIEludGVncmFsTWFy
a2FibGVUcmFpdHM8U2Nyb2xsaW5nU2NvcGUsIDA+PiBtX2JveFNjcm9sbGluZ1Njb3BlOwogICAg
IE1hcmthYmxlPFNjcm9sbGluZ1Njb3BlLCBJbnRlZ3JhbE1hcmthYmxlVHJhaXRzPFNjcm9sbGlu
Z1Njb3BlLCAwPj4gbV9jb250ZW50c1Njcm9sbGluZ1Njb3BlOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNlZCBmb3IgPG1hcnF1ZWU+LgotICAg
IAogICAgIC8vIENhY2hlZCBub3JtYWwgZmxvdyB2YWx1ZXMgZm9yIGFic29sdXRlIHBvc2l0aW9u
ZWQgZWxlbWVudHMgd2l0aCBzdGF0aWMgbGVmdC90b3AgdmFsdWVzLgogICAgIExheW91dFVuaXQg
bV9zdGF0aWNJbmxpbmVQb3NpdGlvbjsKICAgICBMYXlvdXRVbml0IG1fc3RhdGljQmxvY2tQb3Np
dGlvbjsKQEAgLTEzNjYsMTAgKzEyMjcsNiBAQCBwcml2YXRlOgogICAgIC8vIE1heSB1bHRpbWF0
ZWx5IGJlIGV4dGVuZGVkIHRvIG1hbnkgcmVwbGljYXMgKHdpdGggdGhlaXIgb3duIHBhaW50IG9y
ZGVyKS4KICAgICBSZW5kZXJQdHI8UmVuZGVyUmVwbGljYT4gbV9yZWZsZWN0aW9uOwogCi0gICAg
Ly8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29ybmVyIGFuZCByZXNpemVy
LgotICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Njcm9sbENvcm5lcjsKLSAg
ICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVyOwotCiAgICAgLy8gUG9p
bnRlciB0byB0aGUgZW5jbG9zaW5nIFJlbmRlckxheWVyIHRoYXQgY2F1c2VkIHVzIHRvIGJlIHBh
Z2luYXRlZC4gSXQgaXMgMCBpZiB3ZSBhcmUgbm90IHBhZ2luYXRlZC4KICAgICBXZWFrUHRyPFJl
bmRlckxheWVyPiBtX2VuY2xvc2luZ1BhZ2luYXRpb25MYXllcjsKIApAQCAtMTM3Nyw2ICsxMjM0
LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJMYXllckZpbHRlcnM+
IG1fZmlsdGVyczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyTGF5ZXJCYWNraW5nPiBtX2Jh
Y2tpbmc7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE+IG1f
c2Nyb2xsYWJsZUFyZWE7CiAgICAgCiAgICAgUGFpbnRGcmVxdWVuY3lUcmFja2VyIG1fcGFpbnRG
cmVxdWVuY3lUcmFja2VyOwogfTsKQEAgLTE0NDksNiArMTMwNywzIEBAIHZvaWQgc2hvd1BhaW50
T3JkZXJUcmVlKGNvbnN0IFdlYkNvcmU6OlJlbmRlckxheWVyKik7CiB2b2lkIHNob3dMYXllclRy
ZWUoY29uc3QgV2ViQ29yZTo6UmVuZGVyT2JqZWN0Kik7CiAjZW5kaWYKIAotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZW5kZXJMYXllcikKLSAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEmIGFyZWEpIHsgcmV0dXJuIGFyZWEu
aXNSZW5kZXJMYXllcigpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDExZDk0
YTExZThjZmVkMjY3Yzg1NTEyODI2MmJmZTcyMGQzZjBjMDcuLjEwYjc2MjJkNDEwMTA3YWVlZTMy
ODdkNzJkYjI3YTE1YTNjZDUyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MywxMyArNTMsMTQgQEAKICNpbmNsdWRlICJQZXJm
b3JtYW5jZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2lu
Y2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJGcmFnbWVudGVkRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKICNpbmNs
dWRlICJSZW5kZXJJRnJhbWUuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgotI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJl
bmRlck1lZGlhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlkZW8uaCIKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCkBAIC0yMDY1LDEwICsyMDY2LDEyIEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVPdmVyZmxvd0NvbnRyb2xzTGF5ZXJzKGJvb2wgbmVlZHNIb3Jpem9udGFsU2Nyb2xsCiAg
ICAgbGF5ZXJzQ2hhbmdlZCB8PSBjcmVhdGVPckRlc3Ryb3lMYXllcihtX2xheWVyRm9yU2Nyb2xs
Q29ybmVyLCBuZWVkc1Njcm9sbENvcm5lckxheWVyLCB0cnVlLCAic2Nyb2xsIGNvcm5lciIpOwog
CiAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9vd25pbmdMYXllci5wYWdl
KCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkgewotICAgICAgICBpZiAoaG9yaXpvbnRhbFNjcm9s
bGJhckxheWVyQ2hhbmdlZCkKLSAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5zY3Jv
bGxhYmxlQXJlYVNjcm9sbGJhckxheWVyRGlkQ2hhbmdlKG1fb3duaW5nTGF5ZXIsIEhvcml6b250
YWxTY3JvbGxiYXIpOwotICAgICAgICBpZiAodmVydGljYWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
Ci0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxi
YXJMYXllckRpZENoYW5nZShtX293bmluZ0xheWVyLCBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAg
ICAgIGlmIChhdXRvKiBzY3JvbGxhYmxlQXJlYSA9IG1fb3duaW5nTGF5ZXIuc2Nyb2xsYWJsZUFy
ZWEoKSkgeworICAgICAgICAgICAgaWYgKGhvcml6b250YWxTY3JvbGxiYXJMYXllckNoYW5nZWQp
CisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnNjcm9sbGFibGVBcmVhU2Ny
b2xsYmFyTGF5ZXJEaWRDaGFuZ2UoKnNjcm9sbGFibGVBcmVhLCBIb3Jpem9udGFsU2Nyb2xsYmFy
KTsKKyAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFNjcm9sbGJhckxheWVyQ2hhbmdlZCkKKyAgICAg
ICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2Nyb2xsYWJsZUFyZWFTY3JvbGxiYXJM
YXllckRpZENoYW5nZSgqc2Nyb2xsYWJsZUFyZWEsIFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHJldHVybiBsYXllcnNDaGFuZ2VkOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCBmZjEyMzBl
ZGU4YTg2YTg4OGYyMzIzMTNmYzNmODU3MWNiYzYzMGM0Li4zODRjNDE1ZGE0Mzk3ODhmZGFjYzc1
YWNkMDY5NGFmNWQxMTQ5MGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtNTUsNiArNTUsNyBAQAogI2luY2x1ZGUgIlJl
bmRlcklGcmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGF5ZXJCYWNraW5nLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgog
I2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJWaWRlby5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ2NjIsOCArNDY2MywxMSBAQCBTY3JvbGxpbmdOb2Rl
SUQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVTY3JvbGxpbmdOb2RlRm9yVmlld3BvcnRD
b25zdHJhaW5lZAogTGF5b3V0UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhcmVudFJlbGF0
aXZlU2Nyb2xsYWJsZVJlY3QoY29uc3QgUmVuZGVyTGF5ZXImIGxheWVyLCBjb25zdCBSZW5kZXJM
YXllciogYW5jZXN0b3JMYXllcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogYW5jZXN0b3JMYXll
ciBuZWVkcyB0byBiZSBhbHdheXMgbm9uLW51bGwsIHNvIHNob3VsZCBiZWNvbWUgYSByZWZlcmVu
Y2UuCi0gICAgaWYgKCFhbmNlc3RvckxheWVyKQotICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7
IH0sIExheW91dFNpemUobGF5ZXIudmlzaWJsZVNpemUoKSkpOworICAgIGlmICghYW5jZXN0b3JM
YXllcikgeworICAgICAgICBpZiAoIWxheWVyLnNjcm9sbGFibGVBcmVhKCkpCisgICAgICAgICAg
ICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCh7IH0sIExh
eW91dFNpemUobGF5ZXIuc2Nyb2xsYWJsZUFyZWEoKS0+dmlzaWJsZVNpemUoKSkpOworICAgIH0K
IAogICAgIExheW91dFJlY3Qgc2Nyb2xsYWJsZVJlY3Q7CiAgICAgaWYgKGlzPFJlbmRlckJveD4o
bGF5ZXIucmVuZGVyZXIoKSkpCkBAIC00NzI1LDggKzQ3MjksMTAgQEAgU2Nyb2xsaW5nTm9kZUlE
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlU2Nyb2xsaW5nTm9kZUZvclNjcm9sbGluZ1Jv
bGUoUmVuZGUKICAgICAgICAgaWYgKGNoYW5nZXMgJiBTY3JvbGxpbmdOb2RlQ2hhbmdlRmxhZ3M6
OkxheWVyKQogICAgICAgICAgICAgdXBkYXRlU2Nyb2xsaW5nTm9kZUxheWVycyhuZXdOb2RlSUQs
IGxheWVyLCAqc2Nyb2xsaW5nQ29vcmRpbmF0b3IpOwogCi0gICAgICAgIGlmIChjaGFuZ2VzICYg
U2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRyZWVTdGF0ZS5wYXJl
bnROb2RlSUQpCi0gICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+c2V0U2Nyb2xsaW5n
Tm9kZVNjcm9sbGFibGVBcmVhR2VvbWV0cnkobmV3Tm9kZUlELCBsYXllcik7CisgICAgICAgIGlm
IChjaGFuZ2VzICYgU2Nyb2xsaW5nTm9kZUNoYW5nZUZsYWdzOjpMYXllckdlb21ldHJ5ICYmIHRy
ZWVTdGF0ZS5wYXJlbnROb2RlSUQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBzY3JvbGxhYmxl
TGF5ZXIgPSBsYXllci5zY3JvbGxhYmxlQXJlYSgpKQorICAgICAgICAgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5zZXRTY3JvbGxpbmdOb2RlU2Nyb2xsYWJsZUFyZWFHZW9tZXRyeShuZXdO
b2RlSUQsICpzY3JvbGxhYmxlTGF5ZXIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJu
IG5ld05vZGVJRDsKQEAgLTQ5MDEsNyArNDkwNyw3IEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJM
YXllckNvbXBvc2l0b3I6OnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsaW5nTm9kZUlEKFNjcm9sbGlu
CiAgICAgaWYgKG5vZGVJRCA9PSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2Nyb2xsaW5nTm9k
ZUlEKCkpCiAgICAgICAgIHJldHVybiAmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwogCi0gICAg
cmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCkuZ2V0KCk7CisgICAg
cmV0dXJuIG1fc2Nyb2xsaW5nTm9kZVRvTGF5ZXJNYXAuZ2V0KG5vZGVJRCktPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp3aWxsUmVtb3ZlU2Nyb2xs
aW5nTGF5ZXJXaXRoQmFja2luZyhSZW5kZXJMYXllciYgbGF5ZXIsIFJlbmRlckxheWVyQmFja2lu
ZyYgYmFja2luZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcAppbmRleCAwNTJhOWM3NWU2MzU1NmEzZWVhYmJmZGYxYzIyMWJlM2Mx
M2I0Y2FjLi5jN2ZjNjZjNzAxM2I3ZThkZTZhYTA2YzQzMTNiZDI5YTgxODUxYWUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3Bw
CkBAIC0xNzYsOCArMTc2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURp
ZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgbmV3U3R5bGUgPSBzdHlsZSgpOwogICAgIGlmIChvbGRTdHlsZSAmJiBzY3Jv
bGxTbmFwQ29udGFpbmVyUmVxdWlyZXNVcGRhdGVGb3JTdHlsZVVwZGF0ZSgqb2xkU3R5bGUsIG5l
d1N0eWxlKSkgewogICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbGF5ZXIo
KSkgewotICAgICAgICAgICAgcmVuZGVyTGF5ZXItPnVwZGF0ZVNuYXBPZmZzZXRzKCk7Ci0gICAg
ICAgICAgICByZW5kZXJMYXllci0+dXBkYXRlU2Nyb2xsU25hcFN0YXRlKCk7CisgICAgICAgICAg
ICBhdXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSByZW5kZXJMYXllci0+ZW5zdXJlTGF5ZXJTY3JvbGxh
YmxlQXJlYSgpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTbmFwT2Zmc2V0
cygpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFwU3RhdGUo
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0JvZHkoKSB8fCBpc0RvY3VtZW50RWxlbWVudFJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIEZyYW1lVmlldyYgZnJhbWVWaWV3ID0gdmlldygpLmZyYW1l
VmlldygpOwogICAgICAgICAgICAgZnJhbWVWaWV3LnVwZGF0ZVNuYXBPZmZzZXRzKCk7CkBAIC0x
OTUsOCArMTk2LDkgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdHlsZURpZENoYW5n
ZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgaWYgKHNjcm9s
bFNuYXBCb3ggJiYgc2Nyb2xsU25hcEJveC0+bGF5ZXIoKSkgewogICAgICAgICAgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHN0eWxlID0gc2Nyb2xsU25hcEJveC0+c3R5bGUoKTsKICAgICAgICAgICAg
IGlmIChzdHlsZS5zY3JvbGxTbmFwVHlwZSgpLnN0cmljdG5lc3MgIT0gU2Nyb2xsU25hcFN0cmlj
dG5lc3M6Ok5vbmUpIHsKLSAgICAgICAgICAgICAgICBzY3JvbGxTbmFwQm94LT5sYXllcigpLT51
cGRhdGVTbmFwT2Zmc2V0cygpOwotICAgICAgICAgICAgICAgIHNjcm9sbFNuYXBCb3gtPmxheWVy
KCktPnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8qIHNjcm9s
bGFibGVMYXllciA9IHNjcm9sbFNuYXBCb3gtPmxheWVyKCktPmVuc3VyZUxheWVyU2Nyb2xsYWJs
ZUFyZWEoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlTGF5ZXItPnVwZGF0ZVNuYXBPZmZz
ZXRzKCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT51cGRhdGVTY3JvbGxTbmFw
U3RhdGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsU25hcEJveC0+aXNCb2R5KCkgfHwg
c2Nyb2xsU25hcEJveC0+aXNEb2N1bWVudEVsZW1lbnRSZW5kZXJlcigpKQogICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxTbmFwQm94LT52aWV3KCkuZnJhbWVWaWV3KCkudXBkYXRlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JTY3JvbGxTbmFwUHJvcGVydGllcygpOwogICAgICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEu
Y3BwCmluZGV4IDg5OTllMDAzN2ExNTI3ZWJjZGMzNWZhMTc1ODY4YmNkMjdhZWM3YWYuLjJjNmYz
YmUwODNmYWQ4OTRiZTZlNDdlNzJlZDcxZTE4NGI5YTA3NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5jcHAKQEAgLTQ5
LDEyICs0OSw2MSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJiBsYXllcikKLSAg
ICA6IG1fbGF5ZXIobGF5ZXIpCisgICAgOiBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSh0cnVlKQor
ICAgICwgbV9pbk92ZXJmbG93UmVsYXlvdXQoZmFsc2UpCisgICAgLCBtX3JlZ2lzdGVyZWRTY3Jv
bGxhYmxlQXJlYShmYWxzZSkKKyAgICAsIG1faGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxv
dyhmYWxzZSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShJT1NfVE9VQ0hf
RVZFTlRTKQorICAgICwgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5n
KGZhbHNlKQorI2VuZGlmCisgICAgLCBtX3JlcXVpcmVzU2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlh
dGlvbihmYWxzZSkKKyAgICAsIG1fY29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKGZhbHNl
KQorICAgICwgbV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbihmYWxzZSkKKyAgICAsIG1fbGF5ZXIo
bGF5ZXIpCiB7CiB9CiAKIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6On5SZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhKCkKIHsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBBU1NFUlQobV9yZWdpc3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gcmVuZGVyZXIudmll
dygpLmZyYW1lVmlldygpLmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEodGhpcykpOworCisgICAgaWYg
KG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhKQorICAgICAgICByZW5kZXJlci52aWV3KCkuZnJh
bWVWaWV3KCkucmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisKKyNpZiBFTkFCTEUoSU9TX1RP
VUNIX0VWRU5UUykKKyAgICB1bnJlZ2lzdGVyQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxp
bmcoKTsKKyNlbmRpZgorICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVu
dCgpKQorICAgICAgICBlbGVtZW50LT5zZXRTYXZlZExheWVyU2Nyb2xsUG9zaXRpb24obV9zY3Jv
bGxQb3NpdGlvbik7CisKKyAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIp
OworICAgIGRlc3Ryb3lTY3JvbGxiYXIoVmVydGljYWxTY3JvbGxiYXIpOworCisgICAgaWYgKGF1
dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcmVuZGVyZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkpCisgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT53aWxsRGVzdHJveVNjcm9s
bGFibGVBcmVhKCp0aGlzKTsKKworICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgY2xlYXJS
ZXNpemVyKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c3RvcmVTY3Jv
bGxQb3NpdGlvbigpCit7CisgICAgYXV0byogZWxlbWVudCA9IG1fbGF5ZXIucmVuZGVyZXIoKS5l
bGVtZW50KCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9sYXllci5yZW5kZXJCb3goKSkgeworICAgICAgICAvLyBXZSBzYXZlIGFuZCByZXN0b3JlIG9u
bHkgdGhlIHNjcm9sbE9mZnNldCBhcyB0aGUgb3RoZXIgc2Nyb2xsIHZhbHVlcyBhcmUgcmVjYWxj
dWxhdGVkLgorICAgICAgICBtX3Njcm9sbFBvc2l0aW9uID0gZWxlbWVudC0+c2F2ZWRMYXllclNj
cm9sbFBvc2l0aW9uKCk7CisgICAgICAgIGlmICghbV9zY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkK
KyAgICAgICAgICAgIHNjcm9sbEFuaW1hdG9yKCkuc2V0Q3VycmVudFBvc2l0aW9uKG1fc2Nyb2xs
UG9zaXRpb24pOworICAgIH0KKworICAgIGVsZW1lbnQtPnNldFNhdmVkTGF5ZXJTY3JvbGxQb3Np
dGlvbihJbnRQb2ludCgpKTsKIH0KIAogYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpz
aG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QKQEAgLTYyLDQg
KzExMSwxNzExIEBAIGJvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2hvdWxkUGxhY2VC
bG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXIu
cmVuZGVyZXIoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCk7CiB9
CiAKKyNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHRvdWNo
RXZlbnQpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBhY2NlbGVyYXRlZCBzY3JvbGxpbmcsIGxldCB0
aGUgc2Nyb2xsaW5nIGJlIGhhbmRsZWQgb3V0c2lkZSBvZiBXZWJLaXQuCisgICAgaWYgKGhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIFNjcm9sbGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlZ2lzdGVyQXNUb3VjaEV2ZW50
TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8IG1fcmVnaXN0ZXJlZEFz
VG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBy
ZW5kZXJlci5kb2N1bWVudCgpLmFkZFRvdWNoRXZlbnRIYW5kbGVyKCpyZW5kZXJlci5lbGVtZW50
KCkpOworICAgIG1fcmVnaXN0ZXJlZEFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nID0g
dHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1bnJlZ2lzdGVyQXNU
b3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGFibGVBcmVhQm91
bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
ci5yZW5kZXJlcigpLmFic29sdXRlQm91bmRpbmdCb3hSZWN0KC8qIHVzZVRyYW5zZm9ybXMgKi8g
dHJ1ZSwgaXNJbnNpZGVGaXhlZCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFzY3JvbGxzT3Zl
cmZsb3coKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGF1dG8gc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSBtX2xheWVyLnBhZ2UoKS5zY3JvbGxpbmdDb29yZGluYXRvcigpKSB7Cisg
ICAgICAgIGlmIChzY3JvbGxpbmdDb29yZGluYXRvci0+aXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcyhz
Y3JvbGxpbmdOb2RlSUQoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoYXV0byBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAg
ICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1VzZXJTY3JvbGxJblByb2dyZXNzKCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0Cit7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5E
SU5HKQorICAgIGlmICghc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhdXRvIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9sYXllci5wYWdlKCkuc2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkgeworICAgICAgICBpZiAoc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmlzUnViYmVyQmFuZEluUHJvZ3Jlc3Moc2Nyb2xsaW5nTm9kZUlEKCkpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGF1dG8gc2Nyb2xsQW5pbWF0b3IgPSBleGlz
dGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+aXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOworI2VuZGlmCisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Zm9yY2VVcGRhdGVTY3JvbGxiYXJzT25N
YWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9s
YXllci5yZW5kZXJlcigpLnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VUZXN0aW5nRW5h
YmxlZCgpOworfQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1h
ZGUgbGF5ZXJzLgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQXN5bmNTY3Jv
bGxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyLmNvbXBvc2l0b3IoKS51c2VDb29y
ZGluYXRlZFNjcm9sbGluZ0ZvckxheWVyKG1fbGF5ZXIpOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNldFBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbihPcHRpb25hbDxTY3Jv
bGxQb3NpdGlvbj4gcG9zaXRpb24pCit7CisgICAgbV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24g
PSBwb3NpdGlvbjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjphcHBseVBv
c3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fcG9zdExheW91
dFNjcm9sbFBvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxUb09mZnNldChz
Y3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obV9wb3N0TGF5b3V0U2Nyb2xsUG9zaXRpb24udmFsdWUo
KSkpOworICAgIG1fcG9zdExheW91dFNjcm9sbFBvc2l0aW9uID0gV1RGOjpudWxsb3B0OworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvWFBvc2l0aW9uKGludCB4
LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgU2Ny
b2xsUG9zaXRpb24gcG9zaXRpb24oeCwgbV9zY3JvbGxQb3NpdGlvbi55KCkpOworICAgIHNldFNj
cm9sbFBvc2l0aW9uKHBvc2l0aW9uLCBvcHRpb25zKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRp
b25DaGFuZ2VPcHRpb25zJiBvcHRpb25zKQoreworICAgIFNjcm9sbFBvc2l0aW9uIHBvc2l0aW9u
KG1fc2Nyb2xsUG9zaXRpb24ueCgpLCB5KTsKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihwb3NpdGlv
biwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6c2V0U2Ny
b2xsUG9zaXRpb24oY29uc3QgU2Nyb2xsUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTY3JvbGxQ
b3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgc2Nyb2xsVG9PZmZzZXQoc2Ny
b2xsT2Zmc2V0RnJvbVBvc2l0aW9uKHBvc2l0aW9uKSwgb3B0aW9ucyk7Cit9CisKK1Njcm9sbE9m
ZnNldCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjbGFtcFNjcm9sbE9mZnNldChjb25zdCBT
Y3JvbGxPZmZzZXQmIHNjcm9sbE9mZnNldCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zm
c2V0LmNvbnN0cmFpbmVkQmV0d2VlbihJbnRQb2ludCgpLCBtYXhpbXVtU2Nyb2xsT2Zmc2V0KCkp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShjb25zdCBTY3JvbGxQb3NpdGlvbiYgcG9zaXRpb24sIFNjcm9sbFR5cGUgc2Ny
b2xsVHlwZSwgU2Nyb2xsQ2xhbXBpbmcgY2xhbXBpbmcpCit7CisjaWYgRU5BQkxFKEFTWU5DX1ND
Uk9MTElORykKKyAgICBMT0dfV0lUSF9TVFJFQU0oU2Nyb2xsaW5nLCBzdHJlYW0gPDwgbV9sYXll
ciA8PCAiIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSAiIDw8IHBvc2l0aW9uKTsKKworICAg
IGlmIChhdXRvKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkpCisgICAgICAgIHJldHVybiBzY3JvbGxpbmdDb29yZGluYXRvci0+cmVx
dWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKCp0aGlzLCBwb3NpdGlvbiwgc2Nyb2xsVHlwZSwgY2xh
bXBpbmcpOworI2VuZGlmCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0KGNvbnN0IFNjcm9sbE9mZnNldCYgc2Nyb2xs
T2Zmc2V0LCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgaWYgKGN1cnJlbnRTY3JvbGxCZWhhdmlvclN0YXR1cygpID09IFNjcm9sbEJlaGF2aW9yU3Rh
dHVzOjpJbk5vbk5hdGl2ZUFuaW1hdGlvbikKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3IoKS5jYW5j
ZWxBbmltYXRpb25zKCk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBlZFNjcm9sbE9mZnNldCA9
IG9wdGlvbnMuY2xhbXBpbmcgPT0gU2Nyb2xsQ2xhbXBpbmc6OkNsYW1wZWQgPyBjbGFtcFNjcm9s
bE9mZnNldChzY3JvbGxPZmZzZXQpIDogc2Nyb2xsT2Zmc2V0OworICAgIGlmIChjbGFtcGVkU2Ny
b2xsT2Zmc2V0ID09IHRoaXMtPnNjcm9sbE9mZnNldCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIHByZXZpb3VzU2Nyb2xsVHlwZSA9IGN1cnJlbnRTY3JvbGxUeXBlKCk7CisgICAgc2V0
Q3VycmVudFNjcm9sbFR5cGUob3B0aW9ucy50eXBlKTsKKworICAgIFNjcm9sbE9mZnNldCBzbmFw
cGVkT2Zmc2V0ID0gY2VpbGVkSW50UG9pbnQoc2Nyb2xsQW5pbWF0b3IoKS5hZGp1c3RTY3JvbGxP
ZmZzZXRGb3JTbmFwcGluZ0lmTmVlZGVkKGNsYW1wZWRTY3JvbGxPZmZzZXQsIG9wdGlvbnMuc25h
cFBvaW50U2VsZWN0aW9uTWV0aG9kKSk7CisgICAgaWYgKG9wdGlvbnMuYW5pbWF0ZWQgPT0gQW5p
bWF0ZWRTY3JvbGw6OlllcykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBz
bmFwcGVkUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQoc25hcHBlZE9mZnNldCk7
CisgICAgICAgIGlmICghcmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKHNuYXBwZWRQb3NpdGlv
biwgb3B0aW9ucy50eXBlLCBvcHRpb25zLmNsYW1waW5nKSkKKyAgICAgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzbmFwcGVkT2Zmc2V0LCBvcHRpb25zLmNsYW1waW5nKTsK
KyAgICAgICAgc2V0U2Nyb2xsQmVoYXZpb3JTdGF0dXMoU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5v
dEluQW5pbWF0aW9uKTsKKyAgICB9CisKKyAgICBzZXRDdXJyZW50U2Nyb2xsVHlwZShwcmV2aW91
c1Njcm9sbFR5cGUpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bFRvKGNvbnN0IFNjcm9sbFBvc2l0aW9uJiBwb3NpdGlvbikKK3sKKyAgICBSZW5kZXJCb3gqIGJv
eCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAgIHJldHVybjsK
KworICAgIExPR19XSVRIX1NUUkVBTShTY3JvbGxpbmcsIHN0cmVhbSA8PCAiUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG8gIiA8PCBwb3NpdGlvbiA8PCAiIGZyb20gIiA8PCBtX3Nj
cm9sbFBvc2l0aW9uIDw8ICIgKGlzIHVzZXIgc2Nyb2xsICIgPDwgKGN1cnJlbnRTY3JvbGxUeXBl
KCkgPT0gU2Nyb2xsVHlwZTo6VXNlcikgPDwgIikiKTsKKworICAgIFNjcm9sbFBvc2l0aW9uIG5l
d1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSkgewor
ICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlm
IHRoZXkgbmVlZCB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgorICAgICAgICBp
ZiAobV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAgICAgICBjb21wdXRlU2Nyb2xsRGlt
ZW5zaW9ucygpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmIChhZGp1c3RG
b3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mg
bm90IGNsZWFyIHdoYXQgdGhpcyBjb2RlIGlzIHRyeWluZyB0byBkby4gQmVoYXZpb3Igc2VlbXMg
cmVhc29uYWJsZSB3aXRoIGl0IHJlbW92ZWQuCisgICAgICAgICAgICBpbnQgbWF4T2Zmc2V0ID0g
c2Nyb2xsV2lkdGgoKSAtIHJvdW5kVG9JbnQoYm94LT5jbGllbnRXaWR0aCgpKTsKKyAgICAgICAg
ICAgIFNjcm9sbE9mZnNldCBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24obmV3
UG9zaXRpb24pOworICAgICAgICAgICAgaW50IHNjcm9sbFhPZmZzZXQgPSBuZXdPZmZzZXQueCgp
OworICAgICAgICAgICAgaWYgKHNjcm9sbFhPZmZzZXQgPiBtYXhPZmZzZXQgLSBjYXJldFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgc2Nyb2xsWE9mZnNldCArPSBjYXJldFdpZHRoOworICAgICAg
ICAgICAgICAgIGlmIChzY3JvbGxYT2Zmc2V0IDw9IGNhcmV0V2lkdGgpCisgICAgICAgICAgICAg
ICAgICAgIHNjcm9sbFhPZmZzZXQgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxY
T2Zmc2V0IDwgbV9zY3JvbGxQb3NpdGlvbi54KCkgLSBjYXJldFdpZHRoKQorICAgICAgICAgICAg
ICAgIHNjcm9sbFhPZmZzZXQgLT0gY2FyZXRXaWR0aDsKKworICAgICAgICAgICAgbmV3T2Zmc2V0
LnNldFgoc2Nyb2xsWE9mZnNldCk7CisgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHNjcm9sbFBv
c2l0aW9uRnJvbU9mZnNldChuZXdPZmZzZXQpOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisK
KyAgICBpZiAobV9zY3JvbGxQb3NpdGlvbiA9PSBuZXdQb3NpdGlvbiAmJiBjdXJyZW50U2Nyb2xs
QmVoYXZpb3JTdGF0dXMoKSA9PSBTY3JvbGxCZWhhdmlvclN0YXR1czo6Tm90SW5BbmltYXRpb24p
IHsKKyAgICAgICAgLy8gRklYTUU6IE5vdGhpbmcgZ3VhcmFudGVlcyB3ZSBnZXQgYSBzY3JvbGxU
bygpIHdpdGggYW4gdW5jaGFuZ2VkIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgYSB1c2VyIGdlc3R1
cmUuCisgICAgICAgIC8vIFRoZSBTY3JvbGxpbmdDb29yZGluYXRvciBwcm9iYWJseSBuZWVkcyB0
byBtZXNzYWdlIHRoZSBtYWluIHRocmVhZCB3aGVuIGEgZ2VzdHVyZSBlbmRzLgorICAgICAgICBp
ZiAocmVxdWlyZXNTY3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKCkpIHsKKyAgICAgICAgICAg
IG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CisgICAgICAgICAg
ICB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Nyb2xsKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsK
KworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlclZp
ZXcmIHZpZXcgPSByZW5kZXJlci52aWV3KCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHBvc2l0aW9u
cyBvZiBvdXIgY2hpbGQgbGF5ZXJzIChpZiBuZWVkZWQgYXMgb25seSBmaXhlZCBsYXllcnMgc2hv
dWxkIGJlIGltcGFjdGVkIGJ5IGEgc2Nyb2xsKS4KKyAgICAvLyBXZSBkb24ndCB1cGRhdGUgY29t
cG9zaXRpbmcgbGF5ZXJzLCBiZWNhdXNlIHdlIG5lZWQgdG8gZG8gYSBkZWVwIHVwZGF0ZSBmcm9t
IHRoZSBjb21wb3NpdGluZyBhbmNlc3Rvci4KKyAgICBpZiAoIXZpZXcuZnJhbWVWaWV3KCkubGF5
b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkpIHsKKyAgICAgICAgLy8gSWYgd2Un
cmUgaW4gdGhlIG1pZGRsZSBvZiBsYXlvdXQsIHdlJ2xsIGp1c3QgdXBkYXRlIGxheWVycyBvbmNl
IGxheW91dCBoYXMgZmluaXNoZWQuCisgICAgICAgIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJP
dmVyZmxvd1Njcm9sbCgpOworCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuc2NoZWR1bGVVcGRh
dGVXaWRnZXRQb3NpdGlvbnMoKTsKKworICAgICAgICBpZiAoIW1fdXBkYXRpbmdNYXJxdWVlUG9z
aXRpb24pIHsKKyAgICAgICAgICAgIC8vIEF2b2lkIHVwZGF0aW5nIGNvbXBvc2l0aW5nIGxheWVy
cyBpZiwgaGlnaGVyIG9uIHRoZSBzdGFjaywgd2UncmUgYWxyZWFkeSB1cGRhdGluZyBsYXllcgor
ICAgICAgICAgICAgLy8gcG9zaXRpb25zLiBVcGRhdGluZyBsYXllciBwb3NpdGlvbnMgcmVxdWly
ZXMgYSBmdWxsIHdhbGsgb2YgdXAtdG8tZGF0ZSBSZW5kZXJMYXllcnMsIGFuZAorICAgICAgICAg
ICAgLy8gaW4gdGhpcyBjYXNlIHdlJ3JlIHN0aWxsIHVwZGF0aW5nIHRoZWlyIHBvc2l0aW9uczsg
d2UnbGwgdXBkYXRlIGNvbXBvc2l0aW5nIGxheWVycyBsYXRlcgorICAgICAgICAgICAgLy8gd2hl
biB0aGF0IGNvbXBsZXRlcy4KKyAgICAgICAgICAgIGlmICh1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpKSB7CisgICAgICAgICAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0
cnlVcGRhdGUoKTsKKworICAgICAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBjYW4gYWZm
ZWN0IHRoZSBsb2NhdGlvbiBvZiBhIGNvbXBvc2l0ZWQgZGVzY2VuZGFudCAod2hpY2ggbWF5IGJl
IGEgc2libGluZyBpbiB6LW9yZGVyKSwKKyAgICAgICAgICAgICAgICAvLyBzbyB0cmlnZ2VyIGEg
ZGVzY2VuZGFudCB3YWxrIGZyb20gdGhlIHN0YWNraW5nIGNvbnRleHQuCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHBhaW50UGFyZW50ID0gbV9sYXllci5zdGFja2luZ0NvbnRleHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgcGFpbnRQYXJlbnQtPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJh
Y2tpbmdBbmRIaWVyYXJjaHlUcmF2ZXJzYWwoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdXBkYXRlQ29tcG9zaXRpbmdMYXllcnNBZnRlclNjcm9sbCgpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVXBkYXRlIHJlZ2lvbnMsIHNjcm9sbGluZyBtYXkgY2hhbmdlIHRoZSBjbGlwIG9m
IGEgcGFydGljdWxhciByZWdpb24uCisgICAgICAgIHJlbmRlcmVyLmRvY3VtZW50KCkuaW52YWxp
ZGF0ZVJlbmRlcmluZ0RlcGVuZGVudFJlZ2lvbnMoKTsKKyAgICAgICAgRGVidWdQYWdlT3Zlcmxh
eXM6OmRpZExheW91dChyZW5kZXJlci5mcmFtZSgpKTsKKyAgICB9CisKKyAgICBGcmFtZSYgZnJh
bWUgPSByZW5kZXJlci5mcmFtZSgpOworICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIgPSByZW5kZXJlci5jb250YWluZXJGb3JSZXBhaW50KCk7CisgICAgLy8gVGhl
IGNhcmV0IHJlY3QgbmVlZHMgdG8gYmUgaW52YWxpZGF0ZWQgYWZ0ZXIgc2Nyb2xsaW5nCisgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKKworICAgIExheW91
dFJlY3QgcmVjdEZvclJlcGFpbnQgPSByZW5kZXJlci5oYXNSZXBhaW50TGF5b3V0UmVjdHMoKSA/
IHJlbmRlcmVyLnJlcGFpbnRMYXlvdXRSZWN0cygpLm1fcmVwYWludFJlY3QgOiByZW5kZXJlci5j
bGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyKTsKKworICAgIEZs
b2F0UXVhZCBxdWFkRm9yRmFrZU1vdXNlTW92ZUV2ZW50ID0gRmxvYXRRdWFkKHJlY3RGb3JSZXBh
aW50KTsKKyAgICBpZiAocmVwYWludENvbnRhaW5lcikKKyAgICAgICAgcXVhZEZvckZha2VNb3Vz
ZU1vdmVFdmVudCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZEZv
ckZha2VNb3VzZU1vdmVFdmVudCk7CisgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkuZGlzcGF0Y2hG
YWtlTW91c2VNb3ZlRXZlbnRTb29uSW5RdWFkKHF1YWRGb3JGYWtlTW91c2VNb3ZlRXZlbnQpOwor
CisgICAgYm9vbCByZXF1aXJlc1JlcGFpbnQgPSB0cnVlOworICAgIGlmICh1c2VzQ29tcG9zaXRl
ZFNjcm9sbGluZygpKSB7CisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21l
dHJ5VXBkYXRlKCk7CisgICAgICAgIG1fbGF5ZXIuc2V0RGVzY2VuZGFudHNOZWVkVXBkYXRlQmFj
a2luZ0FuZEhpZXJhcmNoeVRyYXZlcnNhbCgpOworICAgICAgICByZXF1aXJlc1JlcGFpbnQgPSBt
X2xheWVyLmJhY2tpbmcoKS0+bmVlZHNSZXBhaW50T25Db21wb3NpdGVkU2Nyb2xsKCk7CisgICAg
fQorCisgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBvZiBvdXIgb2JqZWN0Lgor
ICAgIGlmIChyZXF1aXJlc1JlcGFpbnQpCisgICAgICAgIHJlbmRlcmVyLnJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CisKKyAgICAvLyBTY2hl
ZHVsZSB0aGUgc2Nyb2xsIGFuZCBzY3JvbGwtcmVsYXRlZCBET00gZXZlbnRzLgorICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gcmVuZGVyZXIuZWxlbWVudCgpKQorICAgICAgICBlbGVtZW50LT5k
b2N1bWVudCgpLmFkZFBlbmRpbmdTY3JvbGxFdmVudFRhcmdldCgqZWxlbWVudCk7CisKKyAgICBp
ZiAoc2Nyb2xsc092ZXJmbG93KCkpCisgICAgICAgIHZpZXcuZnJhbWVWaWV3KCkuZGlkQ2hhbmdl
U2Nyb2xsT2Zmc2V0KCk7CisKKyAgICB2aWV3LmZyYW1lVmlldygpLnZpZXdwb3J0Q29udGVudHND
aGFuZ2VkKCk7CisgICAgZnJhbWUuZWRpdG9yKCkucmVuZGVyTGF5ZXJEaWRTY3JvbGwobV9sYXll
cik7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQ29tcG9zaXRp
bmdMYXllcnNBZnRlclNjcm9sbCgpCit7CisgICAgaWYgKG1fbGF5ZXIuY29tcG9zaXRvcigpLmhh
c0NvbnRlbnRDb21wb3NpdGluZ0xheWVycygpKSB7CisgICAgICAgIC8vIE91ciBzdGFja2luZyBj
b250YWluZXIgaXMgZ3VhcmFudGVlZCB0byBjb250YWluIGFsbCBvZiBvdXIgZGVzY2VuZGFudHMg
dGhhdCBtYXkgbmVlZAorICAgICAgICAvLyByZXBvc2l0aW9uaW5nLCBzbyB1cGRhdGUgY29tcG9z
aXRpbmcgbGF5ZXJzIGZyb20gdGhlcmUuCisgICAgICAgIGlmIChSZW5kZXJMYXllciogY29tcG9z
aXRpbmdBbmNlc3RvciA9IG1fbGF5ZXIuc3RhY2tpbmdDb250ZXh0KCktPmVuY2xvc2luZ0NvbXBv
c2l0aW5nTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKHVzZXNDb21wb3NpdGVkU2Nyb2xsaW5n
KCkpCisgICAgICAgICAgICAgICAgbV9sYXllci5jb21wb3NpdG9yKCkudXBkYXRlQ29tcG9zaXRp
bmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlOjpPbkNvbXBvc2l0ZWRTY3JvbGwsIGNvbXBv
c2l0aW5nQW5jZXN0b3IpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHdvdWxkIGJlIG5pY2UgdG8gb25seSBkaXJ0eSBsYXllcnMgd2hvc2UgcG9zaXRpb25z
IHdlcmUgYWZmZWN0ZWQgYnkgc2Nyb2xsaW5nLgorICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5n
QW5jZXN0b3ItPnNldERlc2NlbmRhbnRzTmVlZFVwZGF0ZUJhY2tpbmdBbmRIaWVyYXJjaHlUcmF2
ZXJzYWwoKTsKKyAgICAgICAgICAgICAgICBtX2xheWVyLmNvbXBvc2l0b3IoKS51cGRhdGVDb21w
b3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGU6Ok9uU2Nyb2xsLCBjb21wb3NpdGlu
Z0FuY2VzdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworaW50IFJl
bmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFdpZHRoKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9sYXllci5yZW5kZXJCb3goKSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHNuYXBwZWRJbnRTaXplKCkgaW5zdGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAg
IHJldHVybiBtX3Njcm9sbFdpZHRoOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJl
YTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9sYXllci5yZW5kZXJCb3go
KSk7CisgICAgaWYgKG1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KQorICAgICAgICBjb25zdF9jYXN0
PFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEqPih0aGlzKS0+Y29tcHV0ZVNjcm9sbERpbWVuc2lv
bnMoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHNuYXBwZWRJbnRTaXplKCkgaW5z
dGVhZCB3aXRoIGFic29sdXRlIGNvb3JkaW5hdGVzLgorICAgIHJldHVybiBtX3Njcm9sbEhlaWdo
dDsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVNYXJxdWVlUG9z
aXRpb24oKQoreworICAgIGlmICghbV9tYXJxdWVlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogd291bGQgbGlrZSB0byB1c2UgU2V0Rm9yU2NvcGU8PiBidXQgaXQgZG9lc24ndCB3
b3JrIHdpdGggYml0ZmllbGRzLgorICAgIGJvb2wgb2xkVXBkYXRpbmdNYXJxdWVlUG9zaXRpb24g
PSBtX3VwZGF0aW5nTWFycXVlZVBvc2l0aW9uOworICAgIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gPSB0cnVlOworICAgIG1fbWFycXVlZS0+dXBkYXRlTWFycXVlZVBvc2l0aW9uKCk7CisgICAg
bV91cGRhdGluZ01hcnF1ZWVQb3NpdGlvbiA9IG9sZFVwZGF0aW5nTWFycXVlZVBvc2l0aW9uOwor
fQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZU9yRGVzdHJveU1hcnF1
ZWUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlm
IChyZW5kZXJlci5pc0hUTUxNYXJxdWVlKCkgJiYgcmVuZGVyZXIuc3R5bGUoKS5tYXJxdWVlQmVo
YXZpb3IoKSAhPSBNYXJxdWVlQmVoYXZpb3I6Ok5vbmUgJiYgcmVuZGVyZXIuaXNCb3goKSkgewor
ICAgICAgICBpZiAoIW1fbWFycXVlZSkKKyAgICAgICAgICAgIG1fbWFycXVlZSA9IG1ha2VVbmlx
dWU8UmVuZGVyTWFycXVlZT4oJm1fbGF5ZXIpOworICAgICAgICBtX21hcnF1ZWUtPnVwZGF0ZU1h
cnF1ZWVTdHlsZSgpOworICAgIH0gZWxzZSBpZiAobV9tYXJxdWVlKQorICAgICAgICBtX21hcnF1
ZWUgPSBudWxscHRyOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bHNPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIpLnNjcm9s
bHNPdmVyZmxvdygpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNhblVz
ZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9s
YXllci5yZW5kZXJlcigpOworICAgIGJvb2wgaXNWaXNpYmxlID0gcmVuZGVyZXIuc3R5bGUoKS52
aXNpYmlsaXR5KCkgPT0gVmlzaWJpbGl0eTo6VmlzaWJsZTsKKyAgICBpZiAocmVuZGVyZXIuc2V0
dGluZ3MoKS5hc3luY092ZXJmbG93U2Nyb2xsaW5nRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
aXNWaXNpYmxlICYmIHNjcm9sbHNPdmVyZmxvdygpICYmICFtX2xheWVyLmlzSW5zaWRlU1ZHRm9y
ZWlnbk9iamVjdCgpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgRU5BQkxFKE9WRVJG
TE9XX1NDUk9MTElOR19UT1VDSCkKKyAgICByZXR1cm4gaXNWaXNpYmxlICYmIHNjcm9sbHNPdmVy
ZmxvdygpICYmIChyZW5kZXJlci5zdHlsZSgpLnVzZVRvdWNoT3ZlcmZsb3dTY3JvbGxpbmcoKSB8
fCByZW5kZXJlci5zZXR0aW5ncygpLmFsd2F5c1VzZUFjY2VsZXJhdGVkT3ZlcmZsb3dTY3JvbGwo
KSk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OnNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZzZXQmIG9m
ZnNldCkKK3sKKyAgICBzY3JvbGxUbyhzY3JvbGxQb3NpdGlvbkZyb21PZmZzZXQob2Zmc2V0KSk7
Cit9CisKK1Njcm9sbGluZ05vZGVJRCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpzY3JvbGxp
bmdOb2RlSUQoKSBjb25zdAoreworICAgIGlmICghbV9sYXllci5pc0NvbXBvc2l0ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCktPnNjcm9sbGlu
Z05vZGVJREZvclJvbGUoU2Nyb2xsQ29vcmRpbmF0aW9uUm9sZTo6U2Nyb2xsaW5nKTsKK30KKwor
Ym9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpoYW5kbGVXaGVlbEV2ZW50Rm9yU2Nyb2xs
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgT3B0aW9uYWw8V2hlZWxT
Y3JvbGxHZXN0dXJlU3RhdGU+IGdlc3R1cmVTdGF0ZSkKK3sKKyAgICBpZiAoIWlzU2Nyb2xsYWJs
ZU9yUnViYmVyYmFuZGFibGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxF
KEFTWU5DX1NDUk9MTElORykKKyAgICBpZiAodXNlc0FzeW5jU2Nyb2xsaW5nKCkgJiYgc2Nyb2xs
aW5nTm9kZUlEKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
bV9sYXllci5wYWdlKCkuc2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBzY3JvbGxpbmdDb29yZGluYXRvci0+aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGluZyh3aGVl
bEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSwgZ2VzdHVyZVN0YXRlKTsKKyAgICB9CisjZW5kaWYK
KworICAgIHJldHVybiBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudEZvclNjcm9sbGlu
Zyh3aGVlbEV2ZW50LCBnZXN0dXJlU3RhdGUpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVDb250ZW50UmVj
dEluY2x1ZGVzU2Nyb2xsYmFycyBzY3JvbGxiYXJJbmNsdXNpb24sIFZpc2libGVDb250ZW50UmVj
dEJlaGF2aW9yKSBjb25zdAoreworICAgIEludFNpemUgc2Nyb2xsYmFyU3BhY2U7CisgICAgaWYg
KHNob3dzT3ZlcmZsb3dDb250cm9scygpICYmIHNjcm9sbGJhckluY2x1c2lvbiA9PSBJbmNsdWRl
U2Nyb2xsYmFycykKKyAgICAgICAgc2Nyb2xsYmFyU3BhY2UgPSBzY3JvbGxiYXJJbnRydXNpb24o
KTsKKworICAgIGF1dG8gdmlzaWJsZVNpemUgPSB0aGlzLT52aXNpYmxlU2l6ZSgpOworICAgIHJl
dHVybiB7IHNjcm9sbFBvc2l0aW9uKCksIHsgc3RkOjptYXgoMCwgdmlzaWJsZVNpemUud2lkdGgo
KSAtIHNjcm9sbGJhclNwYWNlLndpZHRoKCkpLCBzdGQ6Om1heCgwLCB2aXNpYmxlU2l6ZS5oZWln
aHQoKSAtIHNjcm9sbGJhclNwYWNlLmhlaWdodCgpKSB9IH07Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmhhbmdBbW91bnQoKSBjb25zdAoreworI2lmIEVOQUJM
RShSVUJCRVJfQkFORElORykKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVyQmFuZGluZ0ZvclN1YlNjcm9s
bGFibGVSZWdpb25zRW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAg
SW50U2l6ZSBzdHJldGNoOworCisgICAgLy8gRklYTUU6IHVzZSBtYXhpbXVtU2Nyb2xsT2Zmc2V0
KCksIG9yIGp1c3QgbW92ZSB0aGlzIHRvIFNjcm9sbGFibGVBcmVhLgorICAgIFNjcm9sbE9mZnNl
dCBzY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXRGcm9tUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24o
KSk7CisgICAgYXV0byByZWFjaGFibGVTaXplID0gcmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUo
KTsKKyAgICBpZiAoc2Nyb2xsT2Zmc2V0LnkoKSA8IDApCisgICAgICAgIHN0cmV0Y2guc2V0SGVp
Z2h0KHNjcm9sbE9mZnNldC55KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUuaGVpZ2h0
KCkgJiYgc2Nyb2xsT2Zmc2V0LnkoKSA+IHJlYWNoYWJsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxl
SGVpZ2h0KCkpCisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbE9mZnNldC55KCkgLSAo
cmVhY2hhYmxlU2l6ZS5oZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSkpOworCisgICAgaWYgKHNj
cm9sbE9mZnNldC54KCkgPCAwKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbE9mZnNl
dC54KCkpOworICAgIGVsc2UgaWYgKHJlYWNoYWJsZVNpemUud2lkdGgoKSAmJiBzY3JvbGxPZmZz
ZXQueCgpID4gcmVhY2hhYmxlU2l6ZS53aWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpCisgICAgICAg
IHN0cmV0Y2guc2V0V2lkdGgoc2Nyb2xsT2Zmc2V0LngoKSAtIChyZWFjaGFibGVTaXplLndpZHRo
KCkgLSB2aXNpYmxlV2lkdGgoKSkpOworCisgICAgcmV0dXJuIHN0cmV0Y2g7CisjZWxzZQorICAg
IHJldHVybiBJbnRTaXplKCk7CisjZW5kaWYKK30KKworSW50UmVjdCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpzY3JvbGxDb3JuZXJSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3ZlcmZs
b3dDb250cm9sc1JlY3RzKCkuc2Nyb2xsQ29ybmVyOworfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmlzU2Nyb2xsQ29ybmVyVmlzaWJsZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fbGF5ZXIucmVuZGVyZXIoKS5pc0JveCgpKTsKKyAgICByZXR1cm4gIXNjcm9sbENvcm5lclJl
Y3QoKS5pc0VtcHR5KCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciYgc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiBzY3JvbGxiYXJSZWN0KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJlY3QgcmVjdCA9IHNjcm9s
bGJhclJlY3Q7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKKyAg
ICByZXR1cm4gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tUmVuZGVyZXJU
b0NvbnRhaW5pbmdWaWV3KCZyZW5kZXJlciwgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5
ZXJTY3JvbGxhYmxlQXJlYTo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25z
dAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFJl
Y3QgcmVjdCA9IHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9SZW5kZXJlcigmcmVuZGVyZXIsIHBhcmVudFJlY3QpOworICAgIHJlY3QubW92ZSgt
c2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQ
b2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBz
Y3JvbGxiYXJQb2ludCkgY29uc3QKK3sKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVu
ZGVyZXIoKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50OworICAgIHBvaW50
Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZW5kZXJlci52
aWV3KCkuZnJhbWVWaWV3KCkuY29udmVydEZyb21SZW5kZXJlclRvQ29udGFpbmluZ1ZpZXcoJnJl
bmRlcmVyLCBwb2ludCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXImIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGF1dG8m
IHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEludFBvaW50IHBvaW50ID0gcmVu
ZGVyZXIudmlldygpLmZyYW1lVmlldygpLmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1JlbmRl
cmVyKCZyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhck9m
ZnNldChzY3JvbGxiYXIpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFNpemUgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6dmlzaWJsZVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xheWVyLnZpc2libGVTaXplKCk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50U2l6ZShzY3JvbGxX
aWR0aCgpLCBzY3JvbGxIZWlnaHQoKSk7Cit9CisKK0ludFNpemUgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6cmVhY2hhYmxlVG90YWxDb250ZW50c1NpemUoKSBjb25zdAoreworICAgIEludFNp
emUgY29udGVudHNTaXplID0gdGhpcy0+Y29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1Nj
cm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3coKSkKKyAgICAgICAgY29udGVudHNTaXplLnNldFdp
ZHRoKHN0ZDo6bWluKGNvbnRlbnRzU2l6ZS53aWR0aCgpLCB2aXNpYmxlU2l6ZSgpLndpZHRoKCkp
KTsKKworICAgIGlmICghaGFzU2Nyb2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSkKKyAgICAgICAg
Y29udGVudHNTaXplLnNldEhlaWdodChzdGQ6Om1pbihjb250ZW50c1NpemUuaGVpZ2h0KCksIHZp
c2libGVTaXplKCkuaGVpZ2h0KCkpKTsKKworICAgIHJldHVybiBjb250ZW50c1NpemU7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6YXZhaWxhYmxlQ29udGVudFNpemVDaGFu
Z2VkKEF2YWlsYWJsZVNpemVDaGFuZ2VSZWFzb24gcmVhc29uKQoreworICAgIFNjcm9sbGFibGVB
cmVhOjphdmFpbGFibGVDb250ZW50U2l6ZUNoYW5nZWQocmVhc29uKTsKKworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZWFzb24gPT0gQXZhaWxhYmxl
U2l6ZUNoYW5nZVJlYXNvbjo6U2Nyb2xsYmFyc0NoYW5nZWQpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlckJsb2NrPihyZW5kZXJlcikpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
cmVuZGVyZXIpLnNldFNob3VsZEZvcmNlUmVsYXlvdXRDaGlsZHJlbih0cnVlKTsKKyAgICAgICAg
cmVuZGVyZXIuc2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdAorewor
ICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIHJldHVybiByZW5k
ZXJlci52aWV3KCkuZnJhbWVWaWV3KCkuc2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKTsK
K30KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRpZFN0YXJ0U2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5j
bGllbnQoKS5kaWRTdGFydE92ZXJmbG93U2Nyb2xsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6ZGlkRW5kU2Nyb2xsKCkKK3sKKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJv
bWUoKS5jbGllbnQoKS5kaWRFbmRPdmVyZmxvd1Njcm9sbCgpOworfQorCit2b2lkIFJlbmRlckxh
eWVyU2Nyb2xsYWJsZUFyZWE6OmRpZFVwZGF0ZVNjcm9sbCgpCit7CisgICAgLy8gU2VuZCB0aGlz
IG5vdGlmaWNhdGlvbiB3aGVuIHdlIHNjcm9sbCwgc2luY2UgdGhpcyBpcyBob3cgd2Uga2VlcCBz
ZWxlY3Rpb24gdXBkYXRlZC4KKyAgICBtX2xheWVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5k
aWRMYXlvdXQoQ2hyb21lQ2xpZW50OjpTY3JvbGwpOworfQorI2VuZGlmCisKK1JlbmRlckxheWVy
OjpPdmVyZmxvd0NvbnRyb2xSZWN0cyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpvdmVyZmxv
d0NvbnRyb2xzUmVjdHMoKSBjb25zdAoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5y
ZW5kZXJlcigpOworICAgIEFTU0VSVChpczxSZW5kZXJCb3g+KHJlbmRlcmVyKSk7CisgICAgYXV0
byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcik7CisgICAgLy8gU2Ny
b2xsYmFycyBzaXQgaW5zaWRlIHRoZSBib3JkZXIgYm94LgorICAgIGF1dG8gb3ZlcmZsb3dDb250
cm9sc1Bvc2l0aW9uaW5nUmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveC5wYWRkaW5nQm94
UmVjdEluY2x1ZGluZ1Njcm9sbGJhcigpKTsKKworICAgIGF1dG8gaG9yaXpvbnRhbFNjcm9sbGJh
ckhlaWdodCA9IG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiAwOworICAgIGF1dG8gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA9IG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IDA7CisKKyAgICBh
dXRvIGlzTm9uT3ZlcmxheVNjcm9sbGJhciA9IFtdKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFy
KSB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci0+aXNPdmVybGF5U2Ny
b2xsYmFyKCk7CisgICAgfTsKKworICAgIGJvb2wgaGF2ZU5vbk92ZXJsYXlIb3Jpem9udGFsU2Ny
b2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CisgICAgYm9vbCBo
YXZlTm9uT3ZlcmxheVZlcnRpY2FsU2Nyb2xsYmFyID0gaXNOb25PdmVybGF5U2Nyb2xsYmFyKG1f
dkJhci5nZXQoKSk7CisgICAgYm9vbCBwbGFjZVZlcnRpY2FsU2Nyb2xsYmFyT25UaGVMZWZ0ID0g
c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpOworICAgIGJvb2wgaGF2
ZVJlc2l6ZXIgPSByZW5kZXJlci5zdHlsZSgpLnJlc2l6ZSgpICE9IFJlc2l6ZTo6Tm9uZTsKKyAg
ICBib29sIHNjcm9sbGJhcnNBdm9pZENvcm5lciA9IChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxT
Y3JvbGxiYXIgJiYgaGF2ZU5vbk92ZXJsYXlWZXJ0aWNhbFNjcm9sbGJhcikgfHwgKGhhdmVSZXNp
emVyICYmIChoYXZlTm9uT3ZlcmxheUhvcml6b250YWxTY3JvbGxiYXIgfHwgaGF2ZU5vbk92ZXJs
YXlWZXJ0aWNhbFNjcm9sbGJhcikpOworCisgICAgSW50U2l6ZSBjb3JuZXJTaXplOworICAgIGlm
IChzY3JvbGxiYXJzQXZvaWRDb3JuZXIpIHsKKyAgICAgICAgLy8gSWYgb25seSBvbmUgc2Nyb2xs
YmFyIGlzIHByZXNlbnQsIHRoZSBjb3JuZXIgaXMgc3F1YXJlLgorICAgICAgICBjb3JuZXJTaXpl
ID0gSW50U2l6ZSB7CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoID8gdmVydGlj
YWxTY3JvbGxiYXJXaWR0aCA6IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQsCisgICAgICAgICAg
ICBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID8gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCA6
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBSZW5kZXJM
YXllcjo6T3ZlcmZsb3dDb250cm9sUmVjdHMgcmVzdWx0OworCisgICAgaWYgKG1faEJhcikgewor
ICAgICAgICBhdXRvIGJhclJlY3QgPSBvdmVyZmxvd0NvbnRyb2xzUG9zaXRpb25pbmdSZWN0Owor
ICAgICAgICBiYXJSZWN0LnNoaWZ0WUVkZ2VUbyhiYXJSZWN0Lm1heFkoKSAtIGhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQpOworICAgICAgICBpZiAoc2Nyb2xsYmFyc0F2b2lkQ29ybmVyKSB7Cisg
ICAgICAgICAgICBpZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkKKyAgICAgICAg
ICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0LngoKSArIGNvcm5lclNpemUud2lk
dGgoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyUmVjdC5jb250cmFj
dChjb3JuZXJTaXplLndpZHRoKCksIDApOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0Lmhv
cml6b250YWxTY3JvbGxiYXIgPSBiYXJSZWN0OworICAgIH0KKworICAgIGlmIChtX3ZCYXIpIHsK
KyAgICAgICAgYXV0byBiYXJSZWN0ID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdDsK
KyAgICAgICAgaWYgKHBsYWNlVmVydGljYWxTY3JvbGxiYXJPblRoZUxlZnQpCisgICAgICAgICAg
ICBiYXJSZWN0LnNldFdpZHRoKHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBiYXJSZWN0LnNoaWZ0WEVkZ2VUbyhiYXJSZWN0Lm1heFgoKSAtIHZlcnRp
Y2FsU2Nyb2xsYmFyV2lkdGgpOworCisgICAgICAgIGlmIChzY3JvbGxiYXJzQXZvaWRDb3JuZXIp
CisgICAgICAgICAgICBiYXJSZWN0LmNvbnRyYWN0KDAsIGNvcm5lclNpemUuaGVpZ2h0KCkpOwor
CisgICAgICAgIHJlc3VsdC52ZXJ0aWNhbFNjcm9sbGJhciA9IGJhclJlY3Q7CisgICAgfQorCisg
ICAgYXV0byBjb3JuZXJSZWN0ID0gWyZdKEludFNpemUgY29ybmVyU2l6ZSkgeworICAgICAgICBp
ZiAocGxhY2VWZXJ0aWNhbFNjcm9sbGJhck9uVGhlTGVmdCkgeworICAgICAgICAgICAgYXV0byBi
b3R0b21MZWZ0Q29ybmVyID0gb3ZlcmZsb3dDb250cm9sc1Bvc2l0aW9uaW5nUmVjdC5taW5YTWF4
WUNvcm5lcigpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QgeyB7IGJvdHRvbUxlZnRDb3Ju
ZXIueCgpLCBib3R0b21MZWZ0Q29ybmVyLnkoKSAtIGNvcm5lclNpemUuaGVpZ2h0KCksIH0sIGNv
cm5lclNpemUgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSW50UmVjdCB7IG92ZXJmbG93
Q29udHJvbHNQb3NpdGlvbmluZ1JlY3QubWF4WE1heFlDb3JuZXIoKSAtIGNvcm5lclNpemUsIGNv
cm5lclNpemUgfTsKKyAgICB9OworCisgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikKKyAg
ICAgICAgcmVzdWx0LnNjcm9sbENvcm5lciA9IGNvcm5lclJlY3QoY29ybmVyU2l6ZSk7CisKKyAg
ICBpZiAoaGF2ZVJlc2l6ZXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhcnNBdm9pZENvcm5lcikK
KyAgICAgICAgICAgIHJlc3VsdC5yZXNpemVyID0gcmVzdWx0LnNjcm9sbENvcm5lcjsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBhdXRvIHNjcm9sbGJhclRoaWNrbmVzcyA9IFNjcm9sbGJh
clRoZW1lOjp0aGVtZSgpLnNjcm9sbGJhclRoaWNrbmVzcygpOworICAgICAgICAgICAgcmVzdWx0
LnJlc2l6ZXIgPSBjb3JuZXJSZWN0KHsgc2Nyb2xsYmFyVGhpY2tuZXNzLCBzY3JvbGxiYXJUaGlj
a25lc3MgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJ
bnRTaXplIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbGJhck9mZnNldChjb25zdCBT
Y3JvbGxiYXImIHNjcm9sbGJhcikgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0gb3ZlcmZsb3dD
b250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisg
ICAgICAgIHJldHVybiB0b0ludFNpemUocmVjdHMudmVydGljYWxTY3JvbGxiYXIubG9jYXRpb24o
KSk7CisKKyAgICBpZiAoJnNjcm9sbGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVy
biB0b0ludFNpemUocmVjdHMuaG9yaXpvbnRhbFNjcm9sbGJhci5sb2NhdGlvbigpKTsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK3ZvaWQgUmVuZGVy
TGF5ZXJTY3JvbGxhYmxlQXJlYTo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFzaG93c092ZXJmbG93
Q29udHJvbHMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92
QmFyLmdldCgpKSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9y
VmVydGljYWxTY3JvbGxiYXIoKSkgeworICAgICAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxh
eUluUmVjdChyZWN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9ySG9yaXpvbnRh
bFNjcm9sbGJhcigpKSB7CisgICAgICAgICAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0
KHJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0
byBzY3JvbGxSZWN0ID0gcmVjdDsKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgQVNTRVJUKGJveCk7CisgICAgLy8gSWYgd2UgYXJlIG5vdCB5ZXQgaW5zZXJ0
ZWQgaW50byB0aGUgdHJlZSwgdGhlcmUgaXMgbm8gbmVlZCB0byByZXBhaW50LgorICAgIGlmICgh
Ym94LT5wYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0cyA9IG92ZXJm
bG93Q29udHJvbHNSZWN0cygpOworCisgICAgaWYgKCZzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgp
KQorICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShyZWN0cy52ZXJ0aWNhbFNjcm9sbGJhci5sb2Nh
dGlvbigpKTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbFJlY3QubW92ZUJ5KHJlY3RzLmhvcml6
b250YWxTY3JvbGxiYXIubG9jYXRpb24oKSk7CisKKyAgICBMYXlvdXRSZWN0IHJlcGFpbnRSZWN0
ID0gc2Nyb2xsUmVjdDsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShyZXBhaW50UmVjdCk7
CisgICAgYm94LT5yZXBhaW50UmVjdGFuZ2xlKHJlcGFpbnRSZWN0KTsKK30KKwordm9pZCBSZW5k
ZXJMYXllclNjcm9sbGFibGVBcmVhOjppbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIGlmICghc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyRm9yU2Ny
b2xsQ29ybmVyKCkpIHsKKyAgICAgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChyZWN0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAg
ICAgICAgbV9zY3JvbGxDb3JuZXItPnJlcGFpbnRSZWN0YW5nbGUocmVjdCk7CisgICAgaWYgKG1f
cmVzaXplcikKKyAgICAgICAgbV9yZXNpemVyLT5yZXBhaW50UmVjdGFuZ2xlKHJlY3QpOworfQor
CitzdGF0aWMgYm9vbCBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKFNjcm9sbGJhciogc2Nyb2xsYmFy
KQoreworICAgIHJldHVybiBzY3JvbGxiYXIgJiYgc2Nyb2xsYmFyLT5pc0hpZGRlbkJ5U3R5bGUo
KTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpob3Jpem9udGFsU2Nyb2xs
YmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbGJhckhpZGRlbkJ5
U3R5bGUoaG9yaXpvbnRhbFNjcm9sbGJhcigpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp2ZXJ0aWNhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdAoreworICAg
IHJldHVybiBzY3JvbGxiYXJIaWRkZW5CeVN0eWxlKHZlcnRpY2FsU2Nyb2xsYmFyKCkpOworfQor
CitzdGF0aWMgaW5saW5lIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yU2Nyb2xsYmFyKFJlbmRl
ckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50
ID0gcmVuZGVyZXIuZWxlbWVudCgpKSB7CisgICAgICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dS
b290ID0gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgaWYg
KHNoYWRvd1Jvb3QtPm1vZGUoKSA9PSBTaGFkb3dSb290TW9kZTo6VXNlckFnZW50KQorICAgICAg
ICAgICAgICAgIHJldHVybiBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlcmVyKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gJnJlbmRlcmVyOworfQorCitSZWY8U2Nyb2xsYmFyPiBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRl
cmVyKCk7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OworICAgIEFTU0VSVChyZW5kZXJl
ckZvclNjcm9sbGJhcihyZW5kZXJlcikpOworICAgIGF1dG8mIGFjdHVhbFJlbmRlcmVyID0gKnJl
bmRlcmVyRm9yU2Nyb2xsYmFyKHJlbmRlcmVyKTsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gaXM8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikgJiYgZG93bmNhc3Q8UmVuZGVy
Qm94PihhY3R1YWxSZW5kZXJlcikuc3R5bGUoKS5oYXNQc2V1ZG9TdHlsZShQc2V1ZG9JZDo6U2Ny
b2xsYmFyKTsKKyAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdl
dCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKCp0aGlzLCBvcmllbnRh
dGlvbiwgZG93bmNhc3Q8UmVuZGVyQm94PihhY3R1YWxSZW5kZXJlcikuZWxlbWVudCgpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoKnRoaXMsIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZTo6UmVndWxhcik7Cisg
ICAgICAgIGRpZEFkZFNjcm9sbGJhcih3aWRnZXQuZ2V0KCksIG9yaWVudGF0aW9uKTsKKyAgICAg
ICAgaWYgKG1fbGF5ZXIucGFnZSgpLmlzTW9uaXRvcmluZ1doZWVsRXZlbnRzKCkpCisgICAgICAg
ICAgICBzY3JvbGxBbmltYXRvcigpLnNldFdoZWVsRXZlbnRUZXN0TW9uaXRvcihtX2xheWVyLnBh
Z2UoKS53aGVlbEV2ZW50VGVzdE1vbml0b3IoKSk7CisgICAgfQorICAgIHJlbmRlcmVyLnZpZXco
KS5mcmFtZVZpZXcoKS5hZGRDaGlsZCgqd2lkZ2V0KTsKKyAgICByZXR1cm4gd2lkZ2V0LnJlbGVh
c2VOb25OdWxsKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6ZGVzdHJv
eVNjcm9sbGJhcihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBSZWZQ
dHI8U2Nyb2xsYmFyPiYgc2Nyb2xsYmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhciA/IG1faEJhciA6IG1fdkJhcjsKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFzY3JvbGxiYXItPmlzQ3VzdG9tU2Nyb2xsYmFyKCkpCisgICAgICAg
IHdpbGxSZW1vdmVTY3JvbGxiYXIoc2Nyb2xsYmFyLmdldCgpLCBvcmllbnRhdGlvbik7CisKKyAg
ICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICBzY3JvbGxiYXIgPSBudWxscHRy
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNldEhhc0hvcml6b250YWxT
Y3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhhc1Njcm9sbGJhciA9PSBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChoYXNT
Y3JvbGxiYXIpIHsKKyAgICAgICAgbV9oQmFyID0gY3JlYXRlU2Nyb2xsYmFyKEhvcml6b250YWxT
Y3JvbGxiYXIpOworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgYXV0byYgcmVu
ZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgZWxh
c3RpY2l0eSA9IHNjcm9sbHNPdmVyZmxvdygpICYmIHJlbmRlcmVyLnNldHRpbmdzKCkucnViYmVy
QmFuZGluZ0ZvclN1YlNjcm9sbGFibGVSZWdpb25zRW5hYmxlZCgpID8gU2Nyb2xsRWxhc3RpY2l0
eUF1dG9tYXRpYyA6IFNjcm9sbEVsYXN0aWNpdHlOb25lOworICAgICAgICBTY3JvbGxhYmxlQXJl
YTo6c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7CisjZW5kaWYKKyAg
ICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKEhvcml6b250YWxTY3JvbGxiYXIp
OworI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKKyAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNl
dEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKTsKKyNlbmRp
ZgorICAgIH0KKworICAgIC8vIERlc3Ryb3lpbmcgb3IgY3JlYXRpbmcgb25lIGJhciBjYW4gY2F1
c2Ugb3VyIHNjcm9sbGJhciBjb3JuZXIgdG8gY29tZSBhbmQgZ28uIFdlIG5lZWQgdG8gdXBkYXRl
IHRoZSBvcHBvc2l0ZSBzY3JvbGxiYXIncyBzdHlsZS4KKyAgICBpZiAobV9oQmFyKQorICAgICAg
ICBtX2hCYXItPnN0eWxlQ2hhbmdlZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJh
ci0+c3R5bGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpCit7CisgICAgaWYgKGhh
c1Njcm9sbGJhciA9PSBoYXNWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoaGFzU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fdkJhciA9IGNyZWF0ZVNjcm9sbGJh
cihWZXJ0aWNhbFNjcm9sbGJhcik7CisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorICAgICAg
ICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICAgICAgU2Nyb2xsRWxh
c3RpY2l0eSBlbGFzdGljaXR5ID0gc2Nyb2xsc092ZXJmbG93KCkgJiYgcmVuZGVyZXIuc2V0dGlu
Z3MoKS5ydWJiZXJCYW5kaW5nRm9yU3ViU2Nyb2xsYWJsZVJlZ2lvbnNFbmFibGVkKCkgPyBTY3Jv
bGxFbGFzdGljaXR5QXV0b21hdGljIDogU2Nyb2xsRWxhc3RpY2l0eU5vbmU7CisgICAgICAgIFNj
cm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoZWxhc3RpY2l0eSk7Cisj
ZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBkZXN0cm95U2Nyb2xsYmFyKFZlcnRpY2FsU2Ny
b2xsYmFyKTsKKyNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCisgICAgICAgIFNjcm9sbGFibGVB
cmVhOjpzZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoU2Nyb2xsRWxhc3RpY2l0eU5vbmUpOwor
I2VuZGlmCisgICAgfQorCisgICAgLy8gRGVzdHJveWluZyBvciBjcmVhdGluZyBvbmUgYmFyIGNh
biBjYXVzZSBvdXIgc2Nyb2xsYmFyIGNvcm5lciB0byBjb21lIGFuZCBnby4gV2UgbmVlZCB0byB1
cGRhdGUgdGhlIG9wcG9zaXRlIHNjcm9sbGJhcidzIHN0eWxlLgorICAgIGlmIChtX2hCYXIpCisg
ICAgICAgIG1faEJhci0+c3R5bGVDaGFuZ2VkKCk7CisgICAgaWYgKG1fdkJhcikKKyAgICAgICAg
bV92QmFyLT5zdHlsZUNoYW5nZWQoKTsKK30KKworU2Nyb2xsYWJsZUFyZWEqIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OmVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byogc2Nyb2xsYWJsZUxheWVyID0gbV9sYXllci5lbmNsb3NpbmdTY3JvbGxhYmxlTGF5
ZXIoSW5jbHVkZVNlbGZPck5vdDo6RXhjbHVkZVNlbGYsIENyb3NzRnJhbWVCb3VuZGFyaWVzOjpO
bykpCisgICAgICAgIHJldHVybiBzY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVBcmVhKCk7CisK
KyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gJnJl
bmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlKCkKK3sKKyAgICBhdXRvJiByZW5k
ZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICByZXR1cm4gcmVuZGVyZXIuaXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6Omhhc1Njcm9sbGFibGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKQoreworICAgIGZv
ciAoYXV0byogbmV4dExheWVyID0gbV9sYXllci5lbmNsb3NpbmdDb250YWluaW5nQmxvY2tMYXll
cihDcm9zc0ZyYW1lQm91bmRhcmllczo6WWVzKTsgbmV4dExheWVyOyBuZXh0TGF5ZXIgPSBuZXh0
TGF5ZXItPmVuY2xvc2luZ0NvbnRhaW5pbmdCbG9ja0xheWVyKENyb3NzRnJhbWVCb3VuZGFyaWVz
OjpZZXMpKSB7CisgICAgICAgIGlmIChuZXh0TGF5ZXItPnJlbmRlcmVyKCkuaXNTY3JvbGxhYmxl
T3JSdWJiZXJiYW5kYWJsZUJveCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6
dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSByZWxl
dmFuY3kpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZCYXIKKyAgICAgICAgfHwgIXNob3dzT3ZlcmZs
b3dDb250cm9scygpCisgICAgICAgIHx8IChtX3ZCYXItPmlzT3ZlcmxheVNjcm9sbGJhcigpICYm
IChyZWxldmFuY3kgPT0gSWdub3JlT3ZlcmxheVNjcm9sbGJhclNpemUgfHwgIW1fdkJhci0+c2hv
dWxkUGFydGljaXBhdGVJbkhpdFRlc3RpbmcoKSkpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX3ZCYXItPndpZHRoKCk7Cit9CisKK2ludCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZh
bmN5IHJlbGV2YW5jeSkgY29uc3QKK3sKKyAgICBpZiAoIW1faEJhcgorICAgICAgICB8fCAhc2hv
d3NPdmVyZmxvd0NvbnRyb2xzKCkKKyAgICAgICAgfHwgKG1faEJhci0+aXNPdmVybGF5U2Nyb2xs
YmFyKCkgJiYgKHJlbGV2YW5jeSA9PSBJZ25vcmVPdmVybGF5U2Nyb2xsYmFyU2l6ZSB8fCAhbV9o
QmFyLT5zaG91bGRQYXJ0aWNpcGF0ZUluSGl0VGVzdGluZygpKSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1faEJhci0+aGVpZ2h0KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJT
Y3JvbGxhYmxlQXJlYTo6aGFzT3ZlcmZsb3dDb250cm9scygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faEJhciB8fCBtX3ZCYXIgfHwgbV9zY3JvbGxDb3JuZXIgfHwgbV9sYXllci5yZW5kZXJlcigp
LnN0eWxlKCkucmVzaXplKCkgIT0gUmVzaXplOjpOb25lOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm9scyhjb25zdCBJbnRTaXplJiBv
ZmZzZXRGcm9tUm9vdCkKK3sKKyAgICBpZiAoIW1faEJhciAmJiAhbV92QmFyICYmICFtX2xheWVy
LmNhblJlc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbGF5ZXIucmVuZGVy
Qm94KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0NvbnRy
b2xzUmVjdHMoKTsKKworICAgIGlmIChtX3ZCYXIpIHsKKyAgICAgICAgcmVjdHMudmVydGljYWxT
Y3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7CisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVS
ZWN0KHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9oQmFyKSB7
CisgICAgICAgIHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIubW92ZShvZmZzZXRGcm9tUm9vdCk7
CisgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIp
OworICAgIH0KKworICAgIGlmIChtX3Njcm9sbENvcm5lcikKKyAgICAgICAgbV9zY3JvbGxDb3Ju
ZXItPnNldEZyYW1lUmVjdChyZWN0cy5zY3JvbGxDb3JuZXIpOworCisgICAgaWYgKG1fcmVzaXpl
cikKKyAgICAgICAgbV9yZXNpemVyLT5zZXRGcmFtZVJlY3QocmVjdHMucmVzaXplcik7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6b3ZlcmZsb3dUb3AoKSBjb25z
dAoreworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlv
dXRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gt
PmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1Jl
Y3QueSgpOworfQorCitMYXlvdXRVbml0IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJm
bG93Qm90dG9tKCkgY29uc3QKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVy
Qm94KCk7CisgICAgTGF5b3V0UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1Jl
Y3QoKSk7CisgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKKyAgICBy
ZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjpvdmVyZmxvd0xlZnQoKSBjb25zdAoreworICAgIFJlbmRlckJveCogYm94
ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92ZXJmbG93UmVjdChib3gt
PmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QueCgpOworfQorCitMYXlvdXRVbml0
IFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93UmlnaHQoKSBjb25zdAoreworICAg
IFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBMYXlvdXRSZWN0IG92
ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKKyAgICBib3gtPmZsaXBGb3JX
cml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmNvbXB1dGVTY3JvbGxEaW1l
bnNpb25zKCkKK3sKKyAgICBSZW5kZXJCb3gqIGJveCA9IG1fbGF5ZXIucmVuZGVyQm94KCk7Cisg
ICAgQVNTRVJUKGJveCk7CisKKyAgICBtX3Njcm9sbERpbWVuc2lvbnNEaXJ0eSA9IGZhbHNlOwor
CisgICAgbV9zY3JvbGxXaWR0aCA9IHJvdW5kVG9JbnQob3ZlcmZsb3dSaWdodCgpIC0gb3ZlcmZs
b3dMZWZ0KCkpOworICAgIG1fc2Nyb2xsSGVpZ2h0ID0gcm91bmRUb0ludChvdmVyZmxvd0JvdHRv
bSgpIC0gb3ZlcmZsb3dUb3AoKSk7CisKKyAgICBpbnQgc2Nyb2xsYWJsZUxlZnRPdmVyZmxvdyA9
IHJvdW5kVG9JbnQob3ZlcmZsb3dMZWZ0KCkgLSBib3gtPmJvcmRlckxlZnQoKSk7CisgICAgaWYg
KHNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKKyAgICAgICAgc2Ny
b2xsYWJsZUxlZnRPdmVyZmxvdyAtPSB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgaW50
IHNjcm9sbGFibGVUb3BPdmVyZmxvdyA9IHJvdW5kVG9JbnQob3ZlcmZsb3dUb3AoKSAtIGJveC0+
Ym9yZGVyVG9wKCkpOworICAgIHNldFNjcm9sbE9yaWdpbihJbnRQb2ludCgtc2Nyb2xsYWJsZUxl
ZnRPdmVyZmxvdywgLXNjcm9sbGFibGVUb3BPdmVyZmxvdykpOworCisgICAgY29tcHV0ZUhhc0Nv
bXBvc2l0ZWRTY3JvbGxhYmxlT3ZlcmZsb3coKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpjb21wdXRlSGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpCit7Cisg
ICAgbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93ID0gY2FuVXNlQ29tcG9zaXRlZFNj
cm9sbGluZygpICYmIChoYXNTY3JvbGxhYmxlSG9yaXpvbnRhbE92ZXJmbG93KCkgfHwgaGFzU2Ny
b2xsYWJsZVZlcnRpY2FsT3ZlcmZsb3coKSk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6aGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc0hvcml6b250YWxPdmVyZmxvdygpICYmIG1fbGF5ZXIucmVuZGVyQm94KCktPnNj
cm9sbHNPdmVyZmxvd1goKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpo
YXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1Zl
cnRpY2FsT3ZlcmZsb3coKSAmJiBtX2xheWVyLnJlbmRlckJveCgpLT5zY3JvbGxzT3ZlcmZsb3dZ
KCk7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6aGFzSG9yaXpvbnRhbE92
ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGltZW5zaW9uc0RpcnR5KTsK
KworICAgIHJldHVybiBzY3JvbGxXaWR0aCgpID4gcm91bmRUb0ludChtX2xheWVyLnJlbmRlckJv
eCgpLT5jbGllbnRXaWR0aCgpKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpoYXNWZXJ0aWNhbE92ZXJmbG93KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIW1fc2Nyb2xsRGlt
ZW5zaW9uc0RpcnR5KTsKKworICAgIHJldHVybiBzY3JvbGxIZWlnaHQoKSA+IHJvdW5kVG9JbnQo
bV9sYXllci5yZW5kZXJCb3goKS0+Y2xpZW50SGVpZ2h0KCkpOworfQorCitzdGF0aWMgYm9vbCBz
dHlsZVJlcXVpcmVzU2Nyb2xsYmFyKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2Nyb2xsYmFy
T3JpZW50YXRpb24gYXhpcykKK3sKKyAgICBPdmVyZmxvdyBvdmVyZmxvdyA9IGF4aXMgPT0gU2Ny
b2xsYmFyT3JpZW50YXRpb246Okhvcml6b250YWxTY3JvbGxiYXIgPyBzdHlsZS5vdmVyZmxvd1go
KSA6IHN0eWxlLm92ZXJmbG93WSgpOworICAgIGJvb2wgb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1
dG8gPSBvdmVyZmxvdyA9PSBPdmVyZmxvdzo6U2Nyb2xsICYmICFzdHlsZS5oYXNQc2V1ZG9TdHls
ZShQc2V1ZG9JZDo6U2Nyb2xsYmFyKSAmJiBTY3JvbGxiYXJUaGVtZTo6dGhlbWUoKS51c2VzT3Zl
cmxheVNjcm9sbGJhcnMoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9s
bCAmJiAhb3ZlcmZsb3dTY3JvbGxBY3RzTGlrZUF1dG87Cit9CisKK3N0YXRpYyBib29sIHN0eWxl
RGVmaW5lc0F1dG9tYXRpY1Njcm9sbGJhcihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFNjcm9s
bGJhck9yaWVudGF0aW9uIGF4aXMpCit7CisgICAgT3ZlcmZsb3cgb3ZlcmZsb3cgPSBheGlzID09
IFNjcm9sbGJhck9yaWVudGF0aW9uOjpIb3Jpem9udGFsU2Nyb2xsYmFyID8gc3R5bGUub3ZlcmZs
b3dYKCkgOiBzdHlsZS5vdmVyZmxvd1koKTsKKyAgICBib29sIG92ZXJmbG93U2Nyb2xsQWN0c0xp
a2VBdXRvID0gb3ZlcmZsb3cgPT0gT3ZlcmZsb3c6OlNjcm9sbCAmJiAhc3R5bGUuaGFzUHNldWRv
U3R5bGUoUHNldWRvSWQ6OlNjcm9sbGJhcikgJiYgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudXNl
c092ZXJsYXlTY3JvbGxiYXJzKCk7CisgICAgcmV0dXJuIG92ZXJmbG93ID09IE92ZXJmbG93OjpB
dXRvIHx8IG92ZXJmbG93U2Nyb2xsQWN0c0xpa2VBdXRvOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbGJhcnNBZnRlckxheW91dCgpCit7CisgICAgUmVu
ZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJveCgpOworICAgIEFTU0VSVChib3gpOworCisg
ICAgLy8gTGlzdCBib3ggcGFydHMgaGFuZGxlIHRoZSBzY3JvbGxiYXJzIGJ5IHRoZW1zZWx2ZXMg
c28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmIChib3gtPnN0eWxlKCkuYXBwZWFyYW5j
ZSgpID09IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGhhc0hvcml6
b250YWxPdmVyZmxvdyA9IHRoaXMtPmhhc0hvcml6b250YWxPdmVyZmxvdygpOworICAgIGJvb2wg
aGFzVmVydGljYWxPdmVyZmxvdyA9IHRoaXMtPmhhc1ZlcnRpY2FsT3ZlcmZsb3coKTsKKworICAg
IC8vIElmIG92ZXJmbG93IHJlcXVpcmVzIGEgc2Nyb2xsYmFyLCB0aGVuIHdlIGp1c3QgbmVlZCB0
byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVy
ZXIoKTsKKyAgICBpZiAobV9oQmFyICYmIHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIocmVuZGVyZXIu
c3R5bGUoKSwgSG9yaXpvbnRhbFNjcm9sbGJhcikpCisgICAgICAgIG1faEJhci0+c2V0RW5hYmxl
ZChoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOworICAgIGlmIChtX3ZCYXIgJiYgc3R5bGVSZXF1aXJl
c1Njcm9sbGJhcihyZW5kZXJlci5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJhcikpCisgICAgICAg
IG1fdkJhci0+c2V0RW5hYmxlZChoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIC8vIFNjcm9s
bGJhcnMgd2l0aCBhdXRvIGJlaGF2aW9yIG1heSBuZWVkIHRvIGxheSBvdXQgYWdhaW4gaWYgc2Ny
b2xsYmFycyBnb3QgYWRkZWQgb3IgcmVtb3ZlZC4KKyAgICBib29sIGF1dG9Ib3Jpem9udGFsU2Ny
b2xsQmFyQ2hhbmdlZCA9IGJveC0+aGFzSG9yaXpvbnRhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZp
b3IoKSAmJiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhcigpICE9IGhhc0hvcml6b250YWxPdmVyZmxv
dyk7CisgICAgYm9vbCBhdXRvVmVydGljYWxTY3JvbGxCYXJDaGFuZ2VkID0gYm94LT5oYXNWZXJ0
aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSAmJiAoaGFzVmVydGljYWxTY3JvbGxiYXIo
KSAhPSBoYXNWZXJ0aWNhbE92ZXJmbG93KTsKKworICAgIGlmIChhdXRvSG9yaXpvbnRhbFNjcm9s
bEJhckNoYW5nZWQgfHwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCkgeworICAgICAgICBp
ZiAoYm94LT5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyV2l0aEF1dG9CZWhhdmlvcigpKQorICAgICAg
ICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihoYXNIb3Jpem9udGFsT3ZlcmZsb3cpOwor
ICAgICAgICBpZiAoYm94LT5oYXNWZXJ0aWNhbFNjcm9sbGJhcldpdGhBdXRvQmVoYXZpb3IoKSkK
KyAgICAgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGhhc1ZlcnRpY2FsT3ZlcmZsb3cp
OworCisgICAgICAgIG1fbGF5ZXIudXBkYXRlU2VsZlBhaW50aW5nTGF5ZXIoKTsKKworICAgICAg
ICByZW5kZXJlci5yZXBhaW50KCk7CisKKyAgICAgICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkub3Zl
cmZsb3dYKCkgPT0gT3ZlcmZsb3c6OkF1dG8gfHwgcmVuZGVyZXIuc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6QXV0bykgeworICAgICAgICAgICAgaWYgKCFtX2luT3ZlcmZsb3dSZWxh
eW91dCkgeworICAgICAgICAgICAgICAgIG1faW5PdmVyZmxvd1JlbGF5b3V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICByZW5kZXJlci5zZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAg
ICAgICAgICAgICAgIGlmIChpczxSZW5kZXJCbG9jaz4ocmVuZGVyZXIpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJlbmRlckJsb2NrJiBibG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihyZW5k
ZXJlcik7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLnNjcm9sbGJhcnNDaGFuZ2VkKGF1dG9I
b3Jpem9udGFsU2Nyb2xsQmFyQ2hhbmdlZCwgYXV0b1ZlcnRpY2FsU2Nyb2xsQmFyQ2hhbmdlZCk7
CisgICAgICAgICAgICAgICAgICAgIGJsb2NrLmxheW91dEJsb2NrKHRydWUpOworICAgICAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZW5kZXJlci5sYXlvdXQoKTsKKyAg
ICAgICAgICAgICAgICBtX2luT3ZlcmZsb3dSZWxheW91dCA9IGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnQgPSByZW5kZXJlci5w
YXJlbnQoKTsKKyAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzRmxleGlibGVCb3goKSAm
JiByZW5kZXJlci5pc0JveCgpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyRmxleGlibGVC
b3g+KHBhcmVudCktPmNsZWFyQ2FjaGVkTWFpblNpemVGb3JDaGlsZCgqbV9sYXllci5yZW5kZXJC
b3goKSk7CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5kIHBhZ2Ugc3RlcC9s
aW5lIHN0ZXApLgorICAgIGlmIChtX2hCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudFdpZHRoID0g
cm91bmRUb0ludChib3gtPmNsaWVudFdpZHRoKCkpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSBT
Y3JvbGxiYXI6OnBhZ2VTdGVwKGNsaWVudFdpZHRoKTsKKyAgICAgICAgbV9oQmFyLT5zZXRTdGVw
cyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9o
QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKKyAgICB9Cisg
ICAgaWYgKG1fdkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gcm91bmRUb0ludChi
b3gtPmNsaWVudEhlaWdodCgpKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gU2Nyb2xsYmFyOjpw
YWdlU3RlcChjbGllbnRIZWlnaHQpOworICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOworICAgICAgICBtX3ZCYXItPnNldFBy
b3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Njcm9sbEhlaWdodCk7CisgICAgfQorCisgICAgdXBk
YXRlU2Nyb2xsYWJsZUFyZWFTZXQoaGFzU2Nyb2xsYWJsZUhvcml6b250YWxPdmVyZmxvdygpIHx8
IGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkpOworfQorCisvLyBUaGlzIGlzIGNhbGxl
ZCBmcm9tIGxheW91dCBjb2RlIChiZWZvcmUgdXBkYXRlTGF5ZXJQb3NpdGlvbnMpLgordm9pZCBS
ZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQor
eworICAgIFJlbmRlckJveCogYm94ID0gbV9sYXllci5yZW5kZXJCb3goKTsKKyAgICBpZiAoIWJv
eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxEaW1lbnNpb25zRGlydHkgPSB0cnVl
OworICAgIFNjcm9sbE9mZnNldCBvcmlnaW5hbFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCgp
OworCisgICAgY29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoKTsKKyAgICBtX2xheWVyLnVwZGF0ZVNl
bGZQYWludGluZ0xheWVyKCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIC8v
IEZJWE1FOiBFbnN1cmUgdGhhdCBvZmZzZXRzIGFyZSBhbHNvIHVwZGF0ZWQgaW4gY2FzZSBvZiBw
cm9ncmFtbWF0aWMgc3R5bGUgY2hhbmdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1OTY0CisgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKKyNlbmRp
ZgorCisgICAgaWYgKCFib3gtPmlzSFRNTE1hcnF1ZWUoKSAmJiAhaXNSdWJiZXJCYW5kSW5Qcm9n
cmVzcygpICYmICFpc1VzZXJTY3JvbGxJblByb2dyZXNzKCkpIHsKKyAgICAgICAgLy8gTGF5b3V0
IG1heSBjYXVzZSB1cyB0byBiZSBhdCBhbiBpbnZhbGlkIHNjcm9sbCBwb3NpdGlvbi4gSW4gdGhp
cyBjYXNlIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gcHVsbCBvdXIgc2Nyb2xsIG9mZnNldHMgYmFj
ayB0byB0aGUgbWF4IChvciBwdXNoIHRoZW0gdXAgdG8gdGhlIG1pbikuCisgICAgICAgIFNjcm9s
bE9mZnNldCBjbGFtcGVkU2Nyb2xsT2Zmc2V0ID0gY2xhbXBTY3JvbGxPZmZzZXQoc2Nyb2xsT2Zm
c2V0KCkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGxvb2tzIHdyb25nLiBUaGUgY2FyZXQgYWRqdXN0IG1vZGUgc2hvdWxkIG9ubHkgYmUgZW5hYmxl
ZCBvbiBlZGl0aW5nIHJlbGF0ZWQgZW50cnkgcG9pbnRzLgorICAgICAgICAvLyBUaGlzIGNvZGUg
d2FzIGFkZGVkIHRvIGZpeCBhbiBpc3N1ZSB3aGVyZSB0aGUgdGV4dCBpbnNlcnRpb24gcG9pbnQg
d291bGQgYWx3YXlzIGJlIGRyYXduIG9uIHRoZSByaWdodCBlZGdlCisgICAgICAgIC8vIG9mIGEg
dGV4dCBmaWVsZCB3aG9zZSBjb250ZW50IG92ZXJmbG93ZWQgaXRzIGJvdW5kcy4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS8xNTU3OTc5Nz4gZm9yIG1vcmUgZGV0YWlscy4KKyAgICAgICAgc2V0QWRqdXN0
Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nKHRydWUpOworI2VuZGlmCisgICAgICAgIGlmIChjbGFt
cGVkU2Nyb2xsT2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQorICAgICAgICAgICAgc2Nyb2xsVG9P
ZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgICAgICBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoZmFsc2UpOworI2VuZGlm
CisgICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICBpZiAo
b3JpZ2luYWxTY3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCisgICAgICAgIHNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludChzY3JvbGxPZmZzZXQoKSkpOworCisgICAg
aWYgKG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkpIHsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0Nv
bXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKKyAgICAgICAgbV9sYXllci5zZXROZWVkc0NvbXBv
c2l0aW5nQ29uZmlndXJhdGlvblVwZGF0ZSgpOworICAgIH0KKworICAgIGlmIChjYW5Vc2VDb21w
b3NpdGVkU2Nyb2xsaW5nKCkpCisgICAgICAgIG1fbGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKKworICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOworfQorCiti
b29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Om92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RS
ZWN0KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJlY3RzID0g
b3ZlcmZsb3dDb250cm9sc1JlY3RzKCk7CisKKyAgICBpZiAocmVjdHMuaG9yaXpvbnRhbFNjcm9s
bGJhci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKHJlY3RzLnZlcnRpY2FsU2Nyb2xsYmFyLmludGVyc2VjdHMobG9jYWxSZWN0KSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMuc2Nyb2xsQ29ybmVyLmludGVyc2VjdHMo
bG9jYWxSZWN0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVjdHMucmVzaXpl
ci5pbnRlcnNlY3RzKGxvY2FsUmVjdCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNob3dzT3Zl
cmZsb3dDb250cm9scygpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAv
LyBPbiBpT1MsIHRoZSBzY3JvbGxiYXJzIGFyZSBtYWRlIGluIHRoZSBVSSBwcm9jZXNzLgorICAg
IHJldHVybiAhY2FuVXNlQ29tcG9zaXRlZFNjcm9sbGluZygpOworI2VuZGlmCisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjpwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcGFp
bnRPZmZzZXQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIGJvb2wgcGFpbnRpbmdPdmVybGF5
Q29udHJvbHMpCit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgaGF2ZSBubyBvdmVy
Zmxvdy4KKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAgICBpZiAo
IXJlbmRlcmVyLmhhc092ZXJmbG93Q2xpcCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXNob3dzT3ZlcmZsb3dDb250cm9scygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdmVy
bGF5IHNjcm9sbGJhcnMgcGFpbnQgaW4gYSBzZWNvbmQgcGFzcyB0aHJvdWdoIHRoZSBsYXllciB0
cmVlIHNvIHRoYXQgdGhleSB3aWxsIHBhaW50CisgICAgLy8gb24gdG9wIG9mIGV2ZXJ5dGhpbmcg
ZWxzZS4gSWYgdGhpcyBpcyB0aGUgbm9ybWFsIHBhaW50aW5nIHBhc3MsIHBhaW50aW5nT3Zlcmxh
eUNvbnRyb2xzCisgICAgLy8gd2lsbCBiZSBmYWxzZSwgYW5kIHdlIHNob3VsZCBqdXN0IHRlbGwg
dGhlIHJvb3QgbGF5ZXIgdGhhdCB0aGVyZSBhcmUgb3ZlcmxheSBzY3JvbGxiYXJzCisgICAgLy8g
dGhhdCBuZWVkIHRvIGJlIHBhaW50ZWQuIFRoYXQgd2lsbCBjYXVzZSB0aGUgc2Vjb25kIHBhc3Mg
dGhyb3VnaCB0aGUgbGF5ZXIgdHJlZSB0byBydW4sCisgICAgLy8gYW5kIHdlJ2xsIHBhaW50IHRo
ZSBzY3JvbGxiYXJzIHRoZW4uIEluIHRoZSBtZWFudGltZSwgY2FjaGUgdHggYW5kIHR5IHNvIHRo
YXQgdGhlCisgICAgLy8gc2Vjb25kIHBhc3MgZG9lc24ndCBuZWVkIHRvIHJlLWVudGVyIHRoZSBS
ZW5kZXJUcmVlIHRvIGdldCBpdCByaWdodC4KKyAgICBpZiAoaGFzT3ZlcmxheVNjcm9sbGJhcnMo
KSAmJiAhcGFpbnRpbmdPdmVybGF5Q29udHJvbHMpIHsKKyAgICAgICAgbV9jYWNoZWRPdmVybGF5
U2Nyb2xsYmFyT2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisKKyAgICAgICAgLy8gSXQncyBub3QgbmVj
ZXNzYXJ5IHRvIGRvIHRoZSBzZWNvbmQgcGFzcyBpZiB0aGUgc2Nyb2xsYmFycyBwYWludCBpbnRv
IGxheWVycy4KKyAgICAgICAgaWYgKChtX2hCYXIgJiYgbGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xs
YmFyKCkpIHx8IChtX3ZCYXIgJiYgbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgSW50UmVjdCBsb2NhbERhbWdlUmVjdCA9IGRhbWFnZVJl
Y3Q7CisgICAgICAgIGxvY2FsRGFtZ2VSZWN0Lm1vdmVCeSgtcGFpbnRPZmZzZXQpOworICAgICAg
ICBpZiAoIW92ZXJmbG93Q29udHJvbHNJbnRlcnNlY3RSZWN0KGxvY2FsRGFtZ2VSZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZW5kZXJMYXllciogcGFpbnRpbmdSb290ID0g
bV9sYXllci5lbmNsb3NpbmdDb21wb3NpdGluZ0xheWVyKCk7CisgICAgICAgIGlmICghcGFpbnRp
bmdSb290KQorICAgICAgICAgICAgcGFpbnRpbmdSb290ID0gcmVuZGVyZXIudmlldygpLmxheWVy
KCk7CisKKyAgICAgICAgaWYgKGF1dG8qIHNjcm9sbGFibGVMYXllciA9IHBhaW50aW5nUm9vdC0+
c2Nyb2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHNjcm9sbGFibGVMYXllci0+c2V0Q29udGFp
bnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gVGhpcyBjaGVjayBpcyByZXF1aXJlZCB0byBhdm9pZCBwYWludGluZyBjdXN0b20g
Q1NTIHNjcm9sbGJhcnMgdHdpY2UuCisgICAgaWYgKHBhaW50aW5nT3ZlcmxheUNvbnRyb2xzICYm
ICFoYXNPdmVybGF5U2Nyb2xsYmFycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CisgICAgaWYgKHBhaW50aW5nT3Zl
cmxheUNvbnRyb2xzKQorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0ID0gbV9jYWNoZWRPdmVy
bGF5U2Nyb2xsYmFyT2Zmc2V0OworCisgICAgLy8gTW92ZSB0aGUgc2Nyb2xsYmFyIHdpZGdldHMg
aWYgbmVjZXNzYXJ5LiBXZSBub3JtYWxseSBtb3ZlIGFuZCByZXNpemUgd2lkZ2V0cyBkdXJpbmcg
bGF5b3V0LCBidXQgc29tZXRpbWVzCisgICAgLy8gd2lkZ2V0cyBjYW4gbW92ZSB3aXRob3V0IGxh
eW91dCBvY2N1cnJpbmcgKG1vc3Qgbm90YWJseSB3aGVuIHlvdSBzY3JvbGwgYSBkb2N1bWVudCB0
aGF0CisgICAgLy8gY29udGFpbnMgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cykuCisgICAgcG9z
aXRpb25PdmVyZmxvd0NvbnRyb2xzKHRvSW50U2l6ZShhZGp1c3RlZFBhaW50T2Zmc2V0KSk7CisK
KyAgICAvLyBOb3cgdGhhdCB3ZSdyZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBpbiB0aGUgcmln
aHQgcGxhY2UsIHBhaW50IHRoZW0uCisgICAgaWYgKG1faEJhciAmJiAhbGF5ZXJGb3JIb3Jpem9u
dGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIG1faEJhci0+cGFpbnQoY29udGV4dCwgZGFtYWdlUmVj
dCk7CisgICAgaWYgKG1fdkJhciAmJiAhbGF5ZXJGb3JWZXJ0aWNhbFNjcm9sbGJhcigpKQorICAg
ICAgICBtX3ZCYXItPnBhaW50KGNvbnRleHQsIGRhbWFnZVJlY3QpOworCisgICAgaWYgKGxheWVy
Rm9yU2Nyb2xsQ29ybmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGZpbGwgb3Vy
IHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZSBpZiB3ZSBoYXZlIGEgc2Nyb2xsYmFyIHRoYXQgZG9l
c24ndCBydW4gYWxsIHRoZSB3YXkgdXAgdG8gdGhlCisgICAgLy8gZWRnZSBvZiB0aGUgYm94Lgor
ICAgIHBhaW50U2Nyb2xsQ29ybmVyKGNvbnRleHQsIGFkanVzdGVkUGFpbnRPZmZzZXQsIGRhbWFn
ZVJlY3QpOworCisgICAgLy8gUGFpbnQgb3VyIHJlc2l6ZXIgbGFzdCwgc2luY2UgaXQgc2l0cyBv
biB0b3Agb2YgdGhlIHNjcm9sbCBjb3JuZXIuCisgICAgcGFpbnRSZXNpemVyKGNvbnRleHQsIGFk
anVzdGVkUGFpbnRPZmZzZXQsIGRhbWFnZVJlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQor
eworICAgIEludFJlY3QgYWJzUmVjdCA9IHNjcm9sbENvcm5lclJlY3QoKTsKKyAgICBhYnNSZWN0
Lm1vdmVCeShwYWludE9mZnNldCk7CisgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMoZGFtYWdl
UmVjdCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpKSB7CisgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lclN0eWxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9zY3JvbGxDb3JuZXIpIHsKKyAgICAgICAg
bV9zY3JvbGxDb3JuZXItPnBhaW50SW50b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIGFic1Jl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
YWludCBhIGNvcm5lciBpZiB3ZSBoYXZlIG92ZXJsYXkgc2Nyb2xsYmFycywgc2luY2Ugd2UgbmVl
ZAorICAgIC8vIHRvIHNlZSB3aGF0IGlzIGJlaGluZCBpdC4KKyAgICBpZiAoIWhhc092ZXJsYXlT
Y3JvbGxiYXJzKCkpCisgICAgICAgIFNjcm9sbGJhclRoZW1lOjp0aGVtZSgpLnBhaW50U2Nyb2xs
Q29ybmVyKGNvbnRleHQsIGFic1JlY3QpOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJs
ZUFyZWE6OmRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IExheW91dFJlY3QmIHJlc2l6ZXJDb3JuZXJSZWN0KQoreworICAgIGF1dG8mIHJlbmRl
cmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIFJlZlB0cjxJbWFnZT4gcmVzaXplQ29ybmVy
SW1hZ2U7CisgICAgRmxvYXRTaXplIGNvcm5lclJlc2l6ZXJTaXplOworICAgIGlmIChyZW5kZXJl
ci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkgPj0gMikgeworICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SW1hZ2UqPiByZXNpemVDb3JuZXJJbWFnZUhpUmVzKCZJbWFnZTo6bG9h
ZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyQDJ4IikubGVha1JlZigpKTsK
KyAgICAgICAgcmVzaXplQ29ybmVySW1hZ2UgPSByZXNpemVDb3JuZXJJbWFnZUhpUmVzOworICAg
ICAgICBjb3JuZXJSZXNpemVyU2l6ZSA9IHJlc2l6ZUNvcm5lckltYWdlLT5zaXplKCk7CisgICAg
ICAgIGNvcm5lclJlc2l6ZXJTaXplLnNjYWxlKDAuNWYpOworICAgIH0gZWxzZSB7CisgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxJbWFnZSo+IHJlc2l6ZUNvcm5lckltYWdlTG9SZXMoJklt
YWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKS5sZWFrUmVm
KCkpOworICAgICAgICByZXNpemVDb3JuZXJJbWFnZSA9IHJlc2l6ZUNvcm5lckltYWdlTG9SZXM7
CisgICAgICAgIGNvcm5lclJlc2l6ZXJTaXplID0gcmVzaXplQ29ybmVySW1hZ2UtPnNpemUoKTsK
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVm
dCgpKSB7CisgICAgICAgIGNvbnRleHQuc2F2ZSgpOworICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZShyZXNpemVyQ29ybmVyUmVjdC54KCkgKyBjb3JuZXJSZXNpemVyU2l6ZS53aWR0aCgpLCByZXNp
emVyQ29ybmVyUmVjdC55KCkgKyByZXNpemVyQ29ybmVyUmVjdC5oZWlnaHQoKSAtIGNvcm5lclJl
c2l6ZXJTaXplLmhlaWdodCgpKTsKKyAgICAgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoLTEu
MCwgMS4wKSk7CisgICAgICAgIGlmIChyZXNpemVDb3JuZXJJbWFnZSkKKyAgICAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKCpyZXNpemVDb3JuZXJJbWFnZSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgY29ybmVyUmVzaXplclNpemUpKTsKKyAgICAgICAgY29udGV4dC5yZXN0b3JlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXJlc2l6ZUNvcm5lckltYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgRmxvYXRSZWN0IGltYWdlUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoTGF5b3V0UmVjdChyZXNpemVyQ29ybmVyUmVjdC5tYXhYTWF4WUNvcm5lcigpIC0gY29ybmVy
UmVzaXplclNpemUsIGNvcm5lclJlc2l6ZXJTaXplKSwgcmVuZGVyZXIuZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZSgqcmVzaXplQ29ybmVySW1h
Z2UsIGltYWdlUmVjdCk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cGFp
bnRSZXNpemVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0LCBjb25zdCBMYXlvdXRSZWN0JiBkYW1hZ2VSZWN0KQoreworICAgIGF1dG8mIHJl
bmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIGlmIChyZW5kZXJlci5zdHlsZSgpLnJl
c2l6ZSgpID09IFJlc2l6ZTo6Tm9uZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZWN0
cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgTGF5b3V0UmVjdCByZXNpemVyQWJz
UmVjdCA9IHJlY3RzLnJlc2l6ZXI7CisgICAgcmVzaXplckFic1JlY3QubW92ZUJ5KHBhaW50T2Zm
c2V0KTsKKyAgICBpZiAoIXJlc2l6ZXJBYnNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChjb250ZXh0LmludmFsaWRhdGluZ0NvbnRyb2xUaW50
cygpKSB7CisgICAgICAgIHVwZGF0ZVJlc2l6ZXJTdHlsZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fcmVzaXplcikgeworICAgICAgICBtX3Jlc2l6ZXItPnBhaW50SW50
b1JlY3QoY29udGV4dCwgcGFpbnRPZmZzZXQsIHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGRyYXdQbGF0Zm9ybVJlc2l6ZXJJbWFnZShjb250ZXh0LCByZXNp
emVyQWJzUmVjdCk7CisKKyAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRoZSByZXNpemVyICgx
cHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJlc2VudC4KKyAgICAv
LyBDbGlwcGluZyB3aWxsIGV4Y2x1ZGUgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgb2YgdGhp
cyBmcmFtZS4KKyAgICBpZiAoIWhhc092ZXJsYXlTY3JvbGxiYXJzKCkgJiYgKG1fdkJhciB8fCBt
X2hCYXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKKyAgICAgICAgY29udGV4dC5jbGlwKHJlc2l6ZXJBYnNSZWN0KTsKKyAgICAgICAg
TGF5b3V0UmVjdCBsYXJnZXJDb3JuZXIgPSByZXNpemVyQWJzUmVjdDsKKyAgICAgICAgbGFyZ2Vy
Q29ybmVyLnNldFNpemUoTGF5b3V0U2l6ZShsYXJnZXJDb3JuZXIud2lkdGgoKSArIDFfbHUsIGxh
cmdlckNvcm5lci5oZWlnaHQoKSArIDFfbHUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihTUkdCQTx1aW50OF90PiB7IDIxNywgMjE3LCAyMTcgfSk7CisgICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihD
b2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRleHQuZHJhd1JlY3Qoc25hcHBl
ZEludFJlY3QobGFyZ2VyQ29ybmVyKSk7CisgICAgfQorfQorCitib29sIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgaWYgKCFtX2hCYXIgJiYgIW1f
dkJhciAmJiAhbV9sYXllci5jYW5SZXNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byByZWN0cyA9IG92ZXJmbG93Q29udHJvbHNSZWN0cygpOworCisgICAgSW50UmVjdCBy
ZXNpemVDb250cm9sUmVjdDsKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIo
KTsKKyAgICBpZiAocmVuZGVyZXIuc3R5bGUoKS5yZXNpemUoKSAhPSBSZXNpemU6Ok5vbmUpIHsK
KyAgICAgICAgaWYgKHJlY3RzLnJlc2l6ZXIuY29udGFpbnMobG9jYWxQb2ludCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhpdCB0
ZXN0IHRoZSBtX3Njcm9sbENvcm5lciBhbmQgcGFzcyBpdCBiYWNrIHRocm91Z2ggdGhlIHJlc3Vs
dC4KKyAgICBpZiAobV92QmFyICYmIG1fdkJhci0+c2hvdWxkUGFydGljaXBhdGVJbkhpdFRlc3Rp
bmcoKSkgeworICAgICAgICBpZiAocmVjdHMudmVydGljYWxTY3JvbGxiYXIuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KG1faEJhciAmJiBtX2hCYXItPnNob3VsZFBhcnRpY2lwYXRlSW5IaXRUZXN0aW5nKCkpIHsKKyAg
ICAgICAgaWYgKHJlY3RzLmhvcml6b250YWxTY3JvbGxiYXIuY29udGFpbnMobG9jYWxQb2ludCkp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV9oQmFyLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVs
dGlwbGllcikKK3sKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucGFnZSgpLmZv
Y3VzQ29udHJvbGxlcigpLmlzQWN0aXZlKCk7Cit9CisKK0ludFBvaW50IFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6Omxhc3RLbm93bk1vdXNlUG9zaXRpb25JblZpZXcoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLmxhc3RLbm93bk1v
dXNlUG9zaXRpb25JblZpZXcoKTsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
Ojppc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIucmVu
ZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmlzSGFuZGxpbmdXaGVlbEV2ZW50KCk7Cit9
CisKK2Jvb2wgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXNlRGFya0FwcGVhcmFuY2UoKSBj
b25zdAoreworICAgIHJldHVybiBtX2xheWVyLnJlbmRlcmVyKCkudXNlRGFya0FwcGVhcmFuY2Uo
KTsKK30KKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxheWVyU2Ny
b2xsYWJsZUFyZWE6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5k
IHN1cHBvcnQgYmV5b25kIEhUTUxFbGVtZW50cy4KKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Piht
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKSkgfHwgIW1fbGF5ZXIuZW5jbG9zaW5nRWxlbWVudCgp
LT5yZW5kZXJCb3goKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQm94KiBib3ggPSBt
X2xheWVyLmVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CisgICAgdXBkYXRlU25hcE9m
ZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmJveCwgYm94LT5zdHlsZSgpLCBib3gtPnBh
ZGRpbmdCb3hSZWN0KCkpOworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6Omlz
U2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmICghc2Nyb2xsc092ZXJmbG93
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChhdXRvKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IG1fbGF5ZXIucGFnZSgpLnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpIHsKKyAgICAg
ICAgaWYgKHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKHNjcm9s
bGluZ05vZGVJRCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChhdXRvKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT5pc1Njcm9sbFNuYXBJblByb2dyZXNzKCk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpwYWludE92ZXJsYXlTY3JvbGxiYXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+IHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCogc3VidHJlZVBhaW50Um9vdCkKK3sKKyAgICBpZiAoIW1f
Y29udGFpbnNEaXJ0eU92ZXJsYXlTY3JvbGxiYXJzKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJMYXllcjo6TGF5ZXJQYWludGluZ0luZm8gcGFpbnRpbmdJbmZvKCZtX2xheWVyLCBlbmNs
b3NpbmdJbnRSZWN0KGRhbWFnZVJlY3QpLCBwYWludEJlaGF2aW9yLCBMYXlvdXRTaXplKCksIHN1
YnRyZWVQYWludFJvb3QpOworICAgIG1fbGF5ZXIucGFpbnRMYXllcihjb250ZXh0LCBwYWludGlu
Z0luZm8sIFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZzo6UGFpbnRpbmdPdmVybGF5U2Nyb2xs
YmFycyk7CisKKyAgICBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwor
fQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OmhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbiwgTGF5b3V0UG9pbnQmIHBvaW50SW5GcmFnbWVudCkg
Y29uc3QKK3sKKyAgICBpZiAobGF5ZXJGcmFnbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiByZW5kZXJlciA9IG1fbGF5ZXIucmVuZGVyZXIoKTsKKyAg
ICBhdXRvIGJvcmRlckJveFJlY3QgPSBzbmFwcGVkSW50UmVjdChkb3duY2FzdDxSZW5kZXJCb3g+
KHJlbmRlcmVyKS5ib3JkZXJCb3hSZWN0KCkpOworICAgIGF1dG8gcmVjdHMgPSBvdmVyZmxvd0Nv
bnRyb2xzUmVjdHMoKTsKKworICAgIGF1dG8gY29ybmVyUmVjdEluRnJhZ21lbnQgPSBbJl0oY29u
c3QgSW50UmVjdCYgZnJhZ21lbnRCb3VuZHMsIGNvbnN0IEludFJlY3QmIHJlc2l6ZXJSZWN0KSB7
CisgICAgICAgIGlmIChzaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkp
IHsKKyAgICAgICAgICAgIEludFNpemUgb2Zmc2V0RnJvbUJvdHRvbUxlZnQgPSBib3JkZXJCb3hS
ZWN0Lm1pblhNYXhZQ29ybmVyKCkgLSByZXNpemVyUmVjdC5taW5YTWF4WUNvcm5lcigpOworICAg
ICAgICAgICAgcmV0dXJuIEludFJlY3QgeyBmcmFnbWVudEJvdW5kcy5taW5YTWF4WUNvcm5lcigp
IC0gb2Zmc2V0RnJvbUJvdHRvbUxlZnQgLSBJbnRTaXplIHsgMCwgcmVzaXplclJlY3QuaGVpZ2h0
KCkgfSwgcmVzaXplclJlY3Quc2l6ZSgpIH07CisgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSBv
ZmZzZXRGcm9tQm90dG9tUmlnaHQgPSBib3JkZXJCb3hSZWN0Lm1heFhNYXhZQ29ybmVyKCkgLSBy
ZXNpemVyUmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAgICAgICByZXR1cm4gSW50UmVjdCB7IGZy
YWdtZW50Qm91bmRzLm1heFhNYXhZQ29ybmVyKCkgLSBvZmZzZXRGcm9tQm90dG9tUmlnaHQgLSBy
ZXNpemVyUmVjdC5zaXplKCksIHJlc2l6ZXJSZWN0LnNpemUoKSB9OworICAgIH07CisKKyAgICBm
b3IgKGludCBpID0gbGF5ZXJGcmFnbWVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAg
ICAgICAgY29uc3QgTGF5ZXJGcmFnbWVudCYgZnJhZ21lbnQgPSBsYXllckZyYWdtZW50cy5hdChp
KTsKKyAgICAgICAgYXV0byByZXNpemVyUmVjdEluRnJhZ21lbnQgPSBjb3JuZXJSZWN0SW5GcmFn
bWVudChzbmFwcGVkSW50UmVjdChmcmFnbWVudC5sYXllckJvdW5kcyksIHJlY3RzLnJlc2l6ZXIp
OworICAgICAgICBpZiAoZnJhZ21lbnQuYmFja2dyb3VuZFJlY3QuaW50ZXJzZWN0cyhoaXRUZXN0
TG9jYXRpb24pICYmIHJlc2l6ZXJSZWN0SW5GcmFnbWVudC5jb250YWlucyhoaXRUZXN0TG9jYXRp
b24ucm91bmRlZFBvaW50KCkpKSB7CisgICAgICAgICAgICBwb2ludEluRnJhZ21lbnQgPSB0b0xh
eW91dFBvaW50KGhpdFRlc3RMb2NhdGlvbi5wb2ludCgpIC0gZnJhZ21lbnQubGF5ZXJCb3VuZHMu
bG9jYXRpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NMYXllciogUmVuZGVyTGF5ZXJTY3Jv
bGxhYmxlQXJlYTo6bGF5ZXJGb3JIb3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJGb3JIb3Jp
em9udGFsU2Nyb2xsYmFyKCkgOiBudWxscHRyOworfQorCitHcmFwaGljc0xheWVyKiBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjpsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllci5iYWNraW5nKCkgPyBtX2xheWVyLmJhY2tpbmcoKS0+bGF5ZXJG
b3JWZXJ0aWNhbFNjcm9sbGJhcigpIDogbnVsbHB0cjsKK30KKworR3JhcGhpY3NMYXllciogUmVu
ZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6bGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2xheWVyLmJhY2tpbmcoKSA/IG1fbGF5ZXIuYmFja2luZygpLT5sYXllckZv
clNjcm9sbENvcm5lcigpIDogbnVsbHB0cjsKK30KKworYm9vbCBSZW5kZXJMYXllclNjcm9sbGFi
bGVBcmVhOjpzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc2Nyb2xsc092ZXJmbG93KCkgfHwgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJTdHls
ZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgLy8gT3ZlcmZsb3cg
YXJlIGEgYm94IGNvbmNlcHQuCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRlckJv
eCgpOworICAgIGlmICghYm94KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBMaXN0IGJveCBw
YXJ0cyBoYW5kbGUgdGhlIHNjcm9sbGJhcnMgYnkgdGhlbXNlbHZlcyBzbyB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCisgICAgaWYgKGJveC0+c3R5bGUoKS5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBh
cnQpCisgICAgICAgIHJldHVybjsKKworICAgIE92ZXJmbG93IG92ZXJmbG93WCA9IGJveC0+c3R5
bGUoKS5vdmVyZmxvd1goKTsKKyAgICBPdmVyZmxvdyBvdmVyZmxvd1kgPSBib3gtPnN0eWxlKCku
b3ZlcmZsb3dZKCk7CisKKyAgICAvLyBUbyBhdm9pZCBkb2luZyBhIHJlbGF5b3V0IGluIHVwZGF0
ZVNjcm9sbGJhcnNBZnRlckxheW91dCwgd2UgdHJ5IHRvIGtlZXAgYW55IGF1dG9tYXRpYyBzY3Jv
bGxiYXIgdGhhdCB3YXMgYWxyZWFkeSBwcmVzZW50LgorICAgIGJvb2wgbmVlZHNIb3Jpem9udGFs
U2Nyb2xsYmFyID0gYm94LT5oYXNPdmVyZmxvd0NsaXAoKSAmJiAoKGhvcml6b250YWxTY3JvbGxi
YXIoKSAmJiBzdHlsZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBIb3Jp
em9udGFsU2Nyb2xsYmFyKSkgfHwgc3R5bGVSZXF1aXJlc1Njcm9sbGJhcihib3gtPnN0eWxlKCks
IEhvcml6b250YWxTY3JvbGxiYXIpKTsKKyAgICBib29sIG5lZWRzVmVydGljYWxTY3JvbGxiYXIg
PSBib3gtPmhhc092ZXJmbG93Q2xpcCgpICYmICgodmVydGljYWxTY3JvbGxiYXIoKSAmJiBzdHls
ZURlZmluZXNBdXRvbWF0aWNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9sbGJh
cikpIHx8IHN0eWxlUmVxdWlyZXNTY3JvbGxiYXIoYm94LT5zdHlsZSgpLCBWZXJ0aWNhbFNjcm9s
bGJhcikpOworICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIobmVlZHNIb3Jpem9udGFsU2Ny
b2xsYmFyKTsKKyAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihuZWVkc1ZlcnRpY2FsU2Nyb2xs
YmFyKTsKKworICAgIC8vIFdpdGggbm9uLW92ZXJsYXkgb3ZlcmZsb3c6c2Nyb2xsLCBzY3JvbGxi
YXJzIGFyZSBhbHdheXMgdmlzaWJsZSBidXQgbWF5IGJlIGRpc2FibGVkLgorICAgIC8vIFdoZW4g
c3dpdGNoaW5nIHRvIGFub3RoZXIgdmFsdWUsIHdlIG5lZWQgdG8gcmUtZW5hYmxlIHRoZW0gKHNl
ZSBidWcgMTE5ODUpLgorICAgIGlmIChtX2hCYXIgJiYgbmVlZHNIb3Jpem9udGFsU2Nyb2xsYmFy
ICYmIG9sZFN0eWxlICYmIG9sZFN0eWxlLT5vdmVyZmxvd1goKSA9PSBPdmVyZmxvdzo6U2Nyb2xs
ICYmIG92ZXJmbG93WCAhPSBPdmVyZmxvdzo6U2Nyb2xsKQorICAgICAgICBtX2hCYXItPnNldEVu
YWJsZWQodHJ1ZSk7CisKKyAgICBpZiAobV92QmFyICYmIG5lZWRzVmVydGljYWxTY3JvbGxiYXIg
JiYgb2xkU3R5bGUgJiYgb2xkU3R5bGUtPm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpTY3JvbGwg
JiYgb3ZlcmZsb3dZICE9IE92ZXJmbG93OjpTY3JvbGwpCisgICAgICAgIG1fdkJhci0+c2V0RW5h
YmxlZCh0cnVlKTsKKworICAgIGlmICghbV9zY3JvbGxEaW1lbnNpb25zRGlydHkpCisgICAgICAg
IHVwZGF0ZVNjcm9sbGFibGVBcmVhU2V0KGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3ZlcmZsb3co
KSB8fCBoYXNTY3JvbGxhYmxlVmVydGljYWxPdmVyZmxvdygpKTsKK30KKwordm9pZCBSZW5kZXJM
YXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxhYmxlQXJlYVNldChib29sIGhhc092ZXJm
bG93KQoreworICAgIGF1dG8mIHJlbmRlcmVyID0gbV9sYXllci5yZW5kZXJlcigpOworICAgIEZy
YW1lVmlldyYgZnJhbWVWaWV3ID0gcmVuZGVyZXIudmlldygpLmZyYW1lVmlldygpOworCisgICAg
Ym9vbCBpc1Zpc2libGVUb0hpdFRlc3QgPSByZW5kZXJlci52aXNpYmxlVG9IaXRUZXN0aW5nKCk7
CisgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBmcmFtZVZpZXcuZnJhbWUo
KS5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgaXNWaXNpYmxlVG9IaXRUZXN0ICY9IG93bmVyLT5y
ZW5kZXJlcigpICYmIG93bmVyLT5yZW5kZXJlcigpLT52aXNpYmxlVG9IaXRUZXN0aW5nKCk7CisK
KyAgICBib29sIGlzU2Nyb2xsYWJsZSA9IGhhc092ZXJmbG93ICYmIGlzVmlzaWJsZVRvSGl0VGVz
dDsKKyAgICBib29sIGFkZGVkT3JSZW1vdmVkID0gZmFsc2U7CisKKyAgICBBU1NFUlQobV9yZWdp
c3RlcmVkU2Nyb2xsYWJsZUFyZWEgPT0gZnJhbWVWaWV3LmNvbnRhaW5zU2Nyb2xsYWJsZUFyZWEo
dGhpcykpOworCisgICAgaWYgKGlzU2Nyb2xsYWJsZSkgeworICAgICAgICBpZiAoIW1fcmVnaXN0
ZXJlZFNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgICAgICBhZGRlZE9yUmVtb3ZlZCA9IGZyYW1l
Vmlldy5hZGRTY3JvbGxhYmxlQXJlYSh0aGlzKTsKKyAgICAgICAgICAgIG1fcmVnaXN0ZXJlZFNj
cm9sbGFibGVBcmVhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9yZWdpc3Rl
cmVkU2Nyb2xsYWJsZUFyZWEpIHsKKyAgICAgICAgYWRkZWRPclJlbW92ZWQgPSBmcmFtZVZpZXcu
cmVtb3ZlU2Nyb2xsYWJsZUFyZWEodGhpcyk7CisgICAgICAgIG1fcmVnaXN0ZXJlZFNjcm9sbGFi
bGVBcmVhID0gZmFsc2U7CisgICAgfQorCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisg
ICAgaWYgKGFkZGVkT3JSZW1vdmVkKSB7CisgICAgICAgIGlmIChpc1Njcm9sbGFibGUgJiYgIWNh
blVzZUNvbXBvc2l0ZWRTY3JvbGxpbmcoKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBvbmx5IG5lZWQgdGhlIHRvdWNoIGxpc3RlbmVyIGZvciB1bmFjY2VsZXJhdGVkIG92ZXJm
bG93IHNjcm9sbGluZywgc28gaWYgd2UgYmVjYW1lCisgICAgICAgICAgICAvLyBhY2NlbGVyYXRl
ZCwgcmVtb3ZlIG91cnNlbHZlcyBhcyBhIHRvdWNoIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICAg
ICAgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisgICAgICAg
IH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9WQVJJQUJMRShhZGRlZE9yUmVtb3ZlZCk7Cisj
ZW5kaWYKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxD
b3JuZXJTdHlsZSgpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyRWxlbWVudCogYWN0dWFsUmVuZGVyZXIgPSByZW5kZXJlckZvclNjcm9sbGJh
cihyZW5kZXJlcik7CisgICAgYXV0byBjb3JuZXIgPSByZW5kZXJlci5oYXNPdmVyZmxvd0NsaXAo
KSA/IGFjdHVhbFJlbmRlcmVyLT5nZXRVbmNhY2hlZFBzZXVkb1N0eWxlKHsgUHNldWRvSWQ6OlNj
cm9sbGJhckNvcm5lciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDogbnVsbHB0cjsKKwor
ICAgIGlmICghY29ybmVyKSB7CisgICAgICAgIGNsZWFyU2Nyb2xsQ29ybmVyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fc2Nyb2xsQ29ybmVyKSB7CisgICAgICAgIG1f
c2Nyb2xsQ29ybmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2Nyb2xsYmFyUGFydD4ocmVuZGVy
ZXIuZG9jdW1lbnQoKSwgV1RGTW92ZSgqY29ybmVyKSk7CisgICAgICAgIC8vIEZJWE1FOiBBIHJl
bmRlcmVyIHNob3VsZCBiZSBhIGNoaWxkIG9mIGl0cyBwYXJlbnQhCisgICAgICAgIG1fc2Nyb2xs
Q29ybmVyLT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9zY3JvbGxDb3JuZXItPmlu
aXRpYWxpemVTdHlsZSgpOworICAgIH0gZWxzZQorICAgICAgICBtX3Njcm9sbENvcm5lci0+c2V0
U3R5bGUoV1RGTW92ZSgqY29ybmVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxl
QXJlYTo6Y2xlYXJTY3JvbGxDb3JuZXIoKQoreworICAgIGlmICghbV9zY3JvbGxDb3JuZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3Njcm9sbENvcm5lci0+c2V0UGFyZW50KG51bGxwdHIpOwor
ICAgIG1fc2Nyb2xsQ29ybmVyID0gbnVsbHB0cjsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjp1cGRhdGVSZXNpemVyU3R5bGUoKQoreworICAgIGF1dG8mIHJlbmRlcmVyID0g
bV9sYXllci5yZW5kZXJlcigpOworICAgIFJlbmRlckVsZW1lbnQqIGFjdHVhbFJlbmRlcmVyID0g
cmVuZGVyZXJGb3JTY3JvbGxiYXIocmVuZGVyZXIpOworICAgIGF1dG8gcmVzaXplciA9IHJlbmRl
cmVyLmhhc092ZXJmbG93Q2xpcCgpID8gYWN0dWFsUmVuZGVyZXItPmdldFVuY2FjaGVkUHNldWRv
U3R5bGUoeyBQc2V1ZG9JZDo6UmVzaXplciB9LCAmYWN0dWFsUmVuZGVyZXItPnN0eWxlKCkpIDog
bnVsbHB0cjsKKworICAgIGlmICghcmVzaXplcikgeworICAgICAgICBjbGVhclJlc2l6ZXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXNpemVyKSB7CisgICAgICAg
IG1fcmVzaXplciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclNjcm9sbGJhclBhcnQ+KHJlbmRlcmVy
LmRvY3VtZW50KCksIFdURk1vdmUoKnJlc2l6ZXIpKTsKKyAgICAgICAgLy8gRklYTUU6IEEgcmVu
ZGVyZXIgc2hvdWxkIGJlIGEgY2hpbGQgb2YgaXRzIHBhcmVudCEKKyAgICAgICAgbV9yZXNpemVy
LT5zZXRQYXJlbnQoJnJlbmRlcmVyKTsKKyAgICAgICAgbV9yZXNpemVyLT5pbml0aWFsaXplU3R5
bGUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9yZXNpemVyLT5zZXRTdHlsZShXVEZNb3ZlKCpy
ZXNpemVyKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6Y2xlYXJSZXNp
emVyKCkKK3sKKyAgICBpZiAoIW1fcmVzaXplcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcmVz
aXplci0+c2V0UGFyZW50KG51bGxwdHIpOworICAgIG1fcmVzaXplciA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6dXBkYXRlQWxsU2Nyb2xsYmFyUmVsYXRl
ZFN0eWxlKCkKK3sKKyAgICBpZiAobV9oQmFyKQorICAgICAgICBtX2hCYXItPnN0eWxlQ2hhbmdl
ZCgpOworICAgIGlmIChtX3ZCYXIpCisgICAgICAgIG1fdkJhci0+c3R5bGVDaGFuZ2VkKCk7Cisg
ICAgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB1cGRhdGVSZXNpemVyU3R5bGUoKTsK
K30KKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorYm9vbCBSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgdG91
Y2hFdmVudCkKK3sKKyAgICAvLyBJZiB3ZSBoYXZlIGFjY2VsZXJhdGVkIHNjcm9sbGluZywgbGV0
IHRoZSBzY3JvbGxpbmcgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIFdlYktpdC4KKyAgICBpZiAoaGFz
Q29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7
Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYTo6cmVnaXN0ZXJBc1RvdWNoRXZl
bnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVy
LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkgfHwgbV9yZWdpc3RlcmVk
QXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHJlbmRlcmVyLmRvY3VtZW50KCkuYWRkVG91Y2hFdmVudEhhbmRsZXIoKnJlbmRlcmVyLmVsZW1l
bnQoKSk7CisgICAgbV9yZWdpc3RlcmVkQXNUb3VjaEV2ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcg
PSB0cnVlOworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVucmVnaXN0ZXJB
c1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpCit7CisgICAgYXV0byYgcmVuZGVyZXIg
PSBtX2xheWVyLnJlbmRlcmVyOworICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpIHx8ICFtX3Jl
Z2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgcmVuZGVyZXIuZG9jdW1lbnQoKS5yZW1vdmVUb3VjaEV2ZW50SGFuZGxlcigqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKKyAgICBtX3JlZ2lzdGVyZWRBc1RvdWNoRXZlbnRMaXN0ZW5lckZv
clNjcm9sbGluZyA9IGZhbHNlOworfQorI2VuZGlmIC8vIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRT
KQorCisvLyBGSVhNRTogdGhpcyBpcyBvbmx5IHZhbGlkIGFmdGVyIHdlJ3ZlIG1hZGUgbGF5ZXJz
LgorYm9vbCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1c2VzQ29tcG9zaXRlZFNjcm9sbGlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXIuaXNDb21wb3NpdGVkKCkgJiYgbV9sYXll
ci5iYWNraW5nKCktPmhhc1Njcm9sbGluZ0xheWVyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50
IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKQoreworICAgIC8vIFRoaXMg
aW1wbGVtZW50aW9uIG1hdGNoZXMgRmlyZWZveCdzLgorICAgIC8vIGh0dHA6Ly9teHIubW96aWxs
YS5vcmcvZmlyZWZveC9zb3VyY2UvdG9vbGtpdC9jb250ZW50L3dpZGdldHMvYnJvd3Nlci54bWwj
ODU2LgorICAgIGNvbnN0IGludCBzcGVlZFJlZHVjZXIgPSAxMjsKKworICAgIGludCBhZGp1c3Rl
ZERlbHRhID0gYmVnaW5uaW5nRGVsdGEgLyBzcGVlZFJlZHVjZXI7CisgICAgaWYgKGFkanVzdGVk
RGVsdGEgPiAxKQorICAgICAgICBhZGp1c3RlZERlbHRhID0gc3RhdGljX2Nhc3Q8aW50PihhZGp1
c3RlZERlbHRhICogc3FydChzdGF0aWNfY2FzdDxkb3VibGU+KGFkanVzdGVkRGVsdGEpKSkgLSAx
OworICAgIGVsc2UgaWYgKGFkanVzdGVkRGVsdGEgPCAtMSkKKyAgICAgICAgYWRqdXN0ZWREZWx0
YSA9IHN0YXRpY19jYXN0PGludD4oYWRqdXN0ZWREZWx0YSAqIHNxcnQoc3RhdGljX2Nhc3Q8ZG91
YmxlPigtYWRqdXN0ZWREZWx0YSkpKSArIDE7CisKKyAgICByZXR1cm4gYWRqdXN0ZWREZWx0YTsK
K30KKworc3RhdGljIGlubGluZSBJbnRTaXplIGFkanVzdGVkU2Nyb2xsRGVsdGEoY29uc3QgSW50
U2l6ZSYgZGVsdGEpCit7CisgICAgcmV0dXJuIEludFNpemUoYWRqdXN0ZWRTY3JvbGxEZWx0YShk
ZWx0YS53aWR0aCgpKSwgYWRqdXN0ZWRTY3JvbGxEZWx0YShkZWx0YS5oZWlnaHQoKSkpOworfQor
Cit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnBhblNjcm9sbEZyb21Qb2ludChjb25z
dCBJbnRQb2ludCYgc291cmNlUG9pbnQpCit7CisgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VQ
b3NpdGlvbiA9IG1fbGF5ZXIucmVuZGVyZXIoKS5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLmxhc3RL
bm93bk1vdXNlUG9zaXRpb24oKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGxh
c3Qga25vd24gbW91c2UgcG9zaXRpb24gaXMgb3V0IG9mIHRoZSB3aW5kb3cuIFdoZW4gdGhlIG1v
dXNlIGlzIG91dCBvZiB0aGUgd2luZG93LCB0aGUgcG9zaXRpb24gaXMgaW5jb2hlcmVudAorICAg
IHN0YXRpYyBJbnRQb2ludCBwcmV2aW91c01vdXNlUG9zaXRpb247CisgICAgaWYgKGxhc3RLbm93
bk1vdXNlUG9zaXRpb24ueCgpIDwgMCB8fCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uLnkoKSA8IDAp
CisgICAgICAgIGxhc3RLbm93bk1vdXNlUG9zaXRpb24gPSBwcmV2aW91c01vdXNlUG9zaXRpb247
CisgICAgZWxzZQorICAgICAgICBwcmV2aW91c01vdXNlUG9zaXRpb24gPSBsYXN0S25vd25Nb3Vz
ZVBvc2l0aW9uOworCisgICAgSW50U2l6ZSBkZWx0YSA9IGxhc3RLbm93bk1vdXNlUG9zaXRpb24g
LSBzb3VyY2VQb2ludDsKKworICAgIGlmIChhYnMoZGVsdGEud2lkdGgoKSkgPD0gU2Nyb2xsVmll
dzo6bm9QYW5TY3JvbGxSYWRpdXMpIC8vIGF0IHRoZSBjZW50ZXIgd2UgbGV0IHRoZSBzcGFjZSBm
b3IgdGhlIGljb24KKyAgICAgICAgZGVsdGEuc2V0V2lkdGgoMCk7CisgICAgaWYgKGFicyhkZWx0
YS5oZWlnaHQoKSkgPD0gU2Nyb2xsVmlldzo6bm9QYW5TY3JvbGxSYWRpdXMpCisgICAgICAgIGRl
bHRhLnNldEhlaWdodCgwKTsKKworICAgIHNjcm9sbEJ5UmVjdXJzaXZlbHkoYWRqdXN0ZWRTY3Jv
bGxEZWx0YShkZWx0YSkpOworfQorCitPcHRpb25hbDxMYXlvdXRSZWN0PiBSZW5kZXJMYXllclNj
cm9sbGFibGVBcmVhOjp1cGRhdGVTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlvbkNo
YW5nZU9wdGlvbnMmIG9wdGlvbnMsIGNvbnN0IExheW91dFJlY3QmIHJldmVhbFJlY3QsIGNvbnN0
IExheW91dFJlY3QmIGxvY2FsRXhwb3NlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9sYXllci5hbGxv
d3NDdXJyZW50U2Nyb2xsKCkpOworCisgICAgUmVuZGVyQm94KiBib3ggPSBtX2xheWVyLnJlbmRl
ckJveCgpOworICAgIEFTU0VSVChib3gpOworCisgICAgU2Nyb2xsT2Zmc2V0IGNsYW1wZWRTY3Jv
bGxPZmZzZXQgPSBjbGFtcFNjcm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKSArIHRvSW50U2l6ZShy
b3VuZGVkSW50UmVjdChyZXZlYWxSZWN0KS5sb2NhdGlvbigpKSk7CisgICAgaWYgKGNsYW1wZWRT
Y3JvbGxPZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkgfHwgY3VycmVudFNjcm9sbEJlaGF2aW9yU3Rh
dHVzKCkgIT0gU2Nyb2xsQmVoYXZpb3JTdGF0dXM6Ok5vdEluQW5pbWF0aW9uKSB7CisgICAgICAg
IFNjcm9sbE9mZnNldCBvbGRTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAg
c2Nyb2xsVG9PZmZzZXQoY2xhbXBlZFNjcm9sbE9mZnNldCwgb3B0aW9ucyk7CisgICAgICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0RGlmZmVyZW5jZSA9IGNsYW1wZWRTY3JvbGxPZmZzZXQgLSBvbGRT
Y3JvbGxPZmZzZXQ7CisgICAgICAgIGF1dG8gbG9jYWxFeHBvc2VSZWN0U2Nyb2xsZWQgPSBsb2Nh
bEV4cG9zZVJlY3Q7CisgICAgICAgIGxvY2FsRXhwb3NlUmVjdFNjcm9sbGVkLm1vdmUoLXNjcm9s
bE9mZnNldERpZmZlcmVuY2UpOworICAgICAgICByZXR1cm4gTGF5b3V0UmVjdChib3gtPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRRdWFkKEZsb2F0UmVjdChsb2NhbEV4cG9zZVJlY3RTY3JvbGxl
ZCkpLCBVc2VUcmFuc2Zvcm1zKS5ib3VuZGluZ0JveCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCit2b2lkIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkoY29uc3QgSW50U2l6ZSYgZGVsdGEsIFNjcm9sbGFibGVBcmVhKiogc2Ny
b2xsZWRBcmVhKQoreworICAgIGlmIChkZWx0YS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYXV0byYgcmVuZGVyZXIgPSBtX2xheWVyLnJlbmRlcmVyKCk7CisgICAgYm9vbCByZXN0
cmljdGVkQnlMaW5lQ2xhbXAgPSBmYWxzZTsKKyAgICBpZiAocmVuZGVyZXIucGFyZW50KCkpCisg
ICAgICAgIHJlc3RyaWN0ZWRCeUxpbmVDbGFtcCA9ICFyZW5kZXJlci5wYXJlbnQoKS0+c3R5bGUo
KS5saW5lQ2xhbXAoKS5pc05vbmUoKTsKKworICAgIGlmIChyZW5kZXJlci5oYXNPdmVyZmxvd0Ns
aXAoKSAmJiAhcmVzdHJpY3RlZEJ5TGluZUNsYW1wKSB7CisgICAgICAgIFNjcm9sbE9mZnNldCBu
ZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQoKSArIGRlbHRhOworICAgICAgICBzY3JvbGxU
b09mZnNldChuZXdTY3JvbGxPZmZzZXQpOworICAgICAgICBpZiAoc2Nyb2xsZWRBcmVhKQorICAg
ICAgICAgICAgKnNjcm9sbGVkQXJlYSA9IHRoaXM7CisKKyAgICAgICAgLy8gSWYgdGhpcyBsYXll
ciBjYW4ndCBkbyB0aGUgc2Nyb2xsIHdlIGFzayB0aGUgbmV4dCBsYXllciB1cCB0aGF0IGNhbiBz
Y3JvbGwgdG8gdHJ5CisgICAgICAgIEludFNpemUgcmVtYWluaW5nU2Nyb2xsT2Zmc2V0ID0gbmV3
U2Nyb2xsT2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgICAgIGlmICghcmVtYWluaW5nU2Ny
b2xsT2Zmc2V0LmlzWmVybygpICYmIHJlbmRlcmVyLnBhcmVudCgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogVGhpcyBza2lwcyBzY3JvbGxhYmxlIGZyYW1lcy4KKyAgICAgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxhYmxlTGF5ZXIgPSBtX2xheWVyLmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJ
bmNsdWRlU2VsZk9yTm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Olllcykp
CisgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUxheWVyLT5zY3JvbGxCeVJlY3Vyc2l2ZWx5KHJl
bWFpbmluZ1Njcm9sbE9mZnNldCwgc2Nyb2xsZWRBcmVhKTsKKworICAgICAgICAgICAgcmVuZGVy
ZXIuZnJhbWUoKS5ldmVudEhhbmRsZXIoKS51cGRhdGVBdXRvc2Nyb2xsUmVuZGVyZXIoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBoZXJlLCB3ZSB3ZXJl
IGNhbGxlZCBvbiBhIHJlbmRlcmVyIHRoYXQgY2FuIGJlIHByb2dyYW1tYXRpY2FsbHkgc2Nyb2xs
ZWQsIGJ1dCBkb2Vzbid0CisgICAgICAgIC8vIGhhdmUgYW4gb3ZlcmZsb3cgY2xpcC4gV2hpY2gg
bWVhbnMgdGhhdCBpdCBpcyBhIGRvY3VtZW50IG5vZGUgdGhhdCBjYW4gYmUgc2Nyb2xsZWQuCisg
ICAgICAgIHJlbmRlcmVyLnZpZXcoKS5mcmFtZVZpZXcoKS5zY3JvbGxCeShkZWx0YSk7CisgICAg
ICAgIGlmIChzY3JvbGxlZEFyZWEpCisgICAgICAgICAgICAqc2Nyb2xsZWRBcmVhID0gJnJlbmRl
cmVyLnZpZXcoKS5mcmFtZVZpZXcoKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgd2UgZGlkbid0
IHNjcm9sbCB0aGUgd2hvbGUgd2F5LCBkbyB3ZSB3YW50IHRvIHRyeSBsb29raW5nIGF0IHRoZSBm
cmFtZXMgb3duZXJFbGVtZW50PworICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjgyMzcKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYTo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Nyb2xsKCkKK3sKKyAg
ICBBU1NFUlQoJm1fbGF5ZXIgPT0gbV9sYXllci5yZW5kZXJlcigpLnZpZXcoKS5sYXllcigpKTsK
KworICAgIExPRyhTY3JvbGxpbmcsICJSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhOjp1cGRhdGVM
YXllclBvc2l0aW9uc0FmdGVyRG9jdW1lbnRTY3JvbGwiKTsKKworICAgIFJlbmRlckdlb21ldHJ5
TWFwIGdlb21ldHJ5TWFwKFVzZVRyYW5zZm9ybXMpOworICAgIG1fbGF5ZXIudXBkYXRlTGF5ZXJQ
b3NpdGlvbnNBZnRlclNjcm9sbCgmZ2VvbWV0cnlNYXApOworfQorCit2b2lkIFJlbmRlckxheWVy
U2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxvd1Njcm9sbCgp
Cit7CisgICAgUmVuZGVyR2VvbWV0cnlNYXAgZ2VvbWV0cnlNYXAoVXNlVHJhbnNmb3Jtcyk7Cisg
ICAgaWYgKCZtX2xheWVyICE9IG1fbGF5ZXIucmVuZGVyZXIoKS52aWV3KCkubGF5ZXIoKSkKKyAg
ICAgICAgZ2VvbWV0cnlNYXAucHVzaE1hcHBpbmdzVG9BbmNlc3RvcihtX2xheWVyLnBhcmVudCgp
LCBudWxscHRyKTsKKworICAgIC8vIEZJWE1FOiB3aHkgaXMgaXQgT0sgdG8gbm90IGNoZWNrIHRo
ZSBhbmNlc3RvcnMgb2YgdGhpcyBsYXllciBpbiBvcmRlciB0bworICAgIC8vIGluaXRpYWxpemUg
dGhlIEhhc1NlZW5WaWV3cG9ydENvbnN0cmFpbmVkQW5jZXN0b3IgYW5kIEhhc1NlZW5BbmNlc3Rv
cldpdGhPdmVyZmxvd0NsaXAgZmxhZ3M/CisgICAgbV9sYXllci51cGRhdGVMYXllclBvc2l0aW9u
c0FmdGVyU2Nyb2xsKCZnZW9tZXRyeU1hcCwgUmVuZGVyTGF5ZXI6OklzT3ZlcmZsb3dTY3JvbGwp
OworfQorCitib29sIFJlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWE6OnVzZXNNb2NrU2Nyb2xsQW5p
bWF0b3IoKSBjb25zdAoreworICAgIHJldHVybiBEZXByZWNhdGVkR2xvYmFsU2V0dGluZ3M6OnVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKK30KKwordm9pZCBSZW5kZXJMYXllclNjcm9sbGFibGVB
cmVhOjpsb2dNb2NrU2Nyb2xsQW5pbWF0b3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
Y29uc3QKK3sKKyAgICBtX2xheWVyLnJlbmRlcmVyKCkuZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVz
c2FnZShNZXNzYWdlU291cmNlOjpPdGhlciwgTWVzc2FnZUxldmVsOjpEZWJ1ZywgIlJlbmRlckxh
eWVyOiAiICsgbWVzc2FnZSk7Cit9CisKK1N0cmluZyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVh
OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllci5kZWJ1Z0Rl
c2NyaXB0aW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oCmluZGV4IDZk
OWNkZWMyMjU1NzZjMDkxMWUyZTIwMTE4MDc3MmFmMDBlOTA1NDkuLjMwYWE0MWYxY2IyNWQyYjNk
OGY1MzNhMjdlNDgzYzgzN2NkNTk2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllclNjcm9sbGFibGVBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyU2Nyb2xsYWJsZUFyZWEuaApAQCAtNDksMTcgKzQ5LDI1MiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBNYXJrIGFzICdmaW5hbCcgb25jZSB0
aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGxhbmRzLgotY2xhc3MgUmVuZGVyTGF5ZXJTY3JvbGxh
YmxlQXJlYSA6IHB1YmxpYyBTY3JvbGxhYmxlQXJlYSB7CitjbGFzcyBSZW5kZXJNYXJxdWVlOwor
CitjbGFzcyBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhIGZpbmFsIDogcHVibGljIFNjcm9sbGFi
bGVBcmVhIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBSZW5kZXJMYXllclNjcm9sbGFibGVBcmVhKFJlbmRlckxheWVyJik7CiAgICAgdmlydHVh
bCB+UmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYSgpOwogCisgICAgUmVuZGVyTGF5ZXImIGxheWVy
KCkgeyByZXR1cm4gbV9sYXllcjsgfQorCisgICAgUmVuZGVyTWFycXVlZSogbWFycXVlZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWFycXVlZS5nZXQoKTsgfQorICAgIHZvaWQgdXBkYXRlTWFycXVlZVBv
c2l0aW9uKCk7CisgICAgdm9pZCBjcmVhdGVPckRlc3Ryb3lNYXJxdWVlKCk7CisKKyAgICB2b2lk
IHN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKKworI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQor
ICAgIHZvaWQgcmVnaXN0ZXJBc1RvdWNoRXZlbnRMaXN0ZW5lckZvclNjcm9sbGluZygpOworICAg
IHZvaWQgdW5yZWdpc3RlckFzVG91Y2hFdmVudExpc3RlbmVyRm9yU2Nyb2xsaW5nKCk7CisjZW5k
aWYKKworICAgIHZvaWQgc2V0UG9zdExheW91dFNjcm9sbFBvc2l0aW9uKE9wdGlvbmFsPFNjcm9s
bFBvc2l0aW9uPik7CisgICAgdm9pZCBhcHBseVBvc3RMYXlvdXRTY3JvbGxQb3NpdGlvbklmTmVl
ZGVkKCk7CisKKyAgICBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgc2Nyb2xsSGVp
Z2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIHBhblNjcm9sbEZyb21Qb2ludChjb25zdCBJbnRQb2lu
dCYpOworCisgICAgLy8gU2Nyb2xsaW5nIG1ldGhvZHMgZm9yIGxheWVycyB0aGF0IGNhbiBzY3Jv
bGwgdGhlaXIgb3ZlcmZsb3cuCisgICAgdm9pZCBzY3JvbGxCeVJlY3Vyc2l2ZWx5KGNvbnN0IElu
dFNpemUmIGRlbHRhLCBTY3JvbGxhYmxlQXJlYSoqIHNjcm9sbGVkQXJlYSA9IG51bGxwdHIpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxUb09mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmLCBjb25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmID0gU2Nyb2xsUG9zaXRpb25D
aGFuZ2VPcHRpb25zOjpjcmVhdGVQcm9ncmFtbWF0aWMoKSk7CisgICAgdm9pZCBzY3JvbGxUb1hQ
b3NpdGlvbihpbnQgeCwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VPcHRpb25zJik7CisgICAg
dm9pZCBzY3JvbGxUb1lQb3NpdGlvbihpbnQgeSwgY29uc3QgU2Nyb2xsUG9zaXRpb25DaGFuZ2VP
cHRpb25zJik7CisgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBTY3JvbGxQb3NpdGlv
biYsIGNvbnN0IFNjcm9sbFBvc2l0aW9uQ2hhbmdlT3B0aW9ucyYpOworCisgICAgLy8gVGhlc2Ug
YXJlIG9ubHkgdXNlZCBieSBtYXJxdWVlLgorICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4
KSB7IHNjcm9sbFRvT2Zmc2V0KFNjcm9sbE9mZnNldCh4LCBzY3JvbGxPZmZzZXQoKS55KCkpLCBT
Y3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgp
KTsgfQorICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KFNj
cm9sbE9mZnNldChzY3JvbGxPZmZzZXQoKS54KCksIHkpLCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9w
dGlvbnM6OmNyZWF0ZVByb2dyYW1tYXRpY1VuY2xhbXBlZCgpKTsgfQorCisgICAgYm9vbCBzY3Jv
bGxzT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVIb3Jpem9udGFsT3Zl
cmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1Njcm9sbGFibGVWZXJ0aWNhbE92ZXJmbG93KCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRh
bFNjcm9sbGJhcigpIHx8IHZlcnRpY2FsU2Nyb2xsYmFyKCk7IH0KKyAgICBib29sIGhhc0hvcml6
b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCk7IH0K
KyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gdmVydGljYWxT
Y3JvbGxiYXIoKTsgfQorICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sKTsK
KyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOworCisgICAgUmVmPFNjcm9s
bGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhck9yaWVudGF0aW9uKTsKKyAgICB2b2lkIGRl
c3Ryb3lTY3JvbGxiYXIoU2Nyb2xsYmFyT3JpZW50YXRpb24pOworCisgICAgYm9vbCByZXF1aXJl
c1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVz
U2Nyb2xsUG9zaXRpb25SZWNvbmNpbGlhdGlvbjsgfQorICAgIHZvaWQgc2V0UmVxdWlyZXNTY3Jv
bGxQb3NpdGlvblJlY29uY2lsaWF0aW9uKGJvb2wgcmVxdWlyZXNSZWNvbmNpbGlhdGlvbiA9IHRy
dWUpIHsgbV9yZXF1aXJlc1Njcm9sbFBvc2l0aW9uUmVjb25jaWxpYXRpb24gPSByZXF1aXJlc1Jl
Y29uY2lsaWF0aW9uOyB9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGF5ZXIgY291
bGQgZG8gdG91Y2ggc2Nyb2xsaW5nLCBidXQgZG9lc24ndCBsb29rIGF0IHdoZXRoZXIgdGhlcmUg
aXMgYWN0dWFsbHkgc2Nyb2xsYWJsZSBvdmVyZmxvdy4KKyAgICBib29sIGNhblVzZUNvbXBvc2l0
ZWRTY3JvbGxpbmcoKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGVyZSBpcyBh
Y3R1YWxseSBzY3JvbGxhYmxlIG92ZXJmbG93IChyZXF1aXJlcyBsYXlvdXQgdG8gYmUgdXAtdG8t
ZGF0ZSkuCisgICAgYm9vbCBoYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNDb21wb3NpdGVkU2Nyb2xsYWJsZU92ZXJmbG93OyB9CisKKyAgICBpbnQg
dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IEln
bm9yZU92ZXJsYXlTY3JvbGxiYXJTaXplKSBjb25zdDsKKyAgICBpbnQgaG9yaXpvbnRhbFNjcm9s
bGJhckhlaWdodChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSA9IElnbm9yZU92ZXJsYXlT
Y3JvbGxiYXJTaXplKSBjb25zdDsKKworICAgIGJvb2wgaGFzT3ZlcmZsb3dDb250cm9scygpIGNv
bnN0OworICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNv
bnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKKyAgICBib29sIGhpdFRlc3RSZXNpemVySW5GcmFn
bWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLCBMYXlv
dXRQb2ludCYgcG9pbnRJbkZyYWdtZW50KSBjb25zdDsKKworICAgIHZvaWQgcGFpbnRPdmVyZmxv
d0NvbnRyb2xzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVj
dCYgZGFtYWdlUmVjdCwgYm9vbCBwYWludGluZ092ZXJsYXlDb250cm9scyA9IGZhbHNlKTsKKyAg
ICB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFBvaW50
JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CisgICAgdm9pZCBwYWludFJlc2l6ZXIoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBMYXlvdXRSZWN0JiBkYW1h
Z2VSZWN0KTsKKyAgICB2b2lkIHBhaW50T3ZlcmxheVNjcm9sbGJhcnMoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwgT3B0aW9uU2V0PFBhaW50QmVoYXZpb3I+
LCBSZW5kZXJPYmplY3QqIHN1YnRyZWVQYWludFJvb3QgPSBudWxscHRyKTsKKworICAgIHZvaWQg
dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCk7CisKKyAgICBib29sIHNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisKK3B1
YmxpYzoKKyAgICAvLyBBbGwgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gb3ZlcnJpZGUgU2Nyb2xs
YWJsZWFBcmVhIG1ldGhvZHMgKGZpbmFsKS4KKyAgICB2b2lkIGF2YWlsYWJsZUNvbnRlbnRTaXpl
Q2hhbmdlZChBdmFpbGFibGVTaXplQ2hhbmdlUmVhc29uKSBmaW5hbDsKKworICAgIGJvb2wgaG9y
aXpvbnRhbFNjcm9sbGJhckhpZGRlbkJ5U3R5bGUoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIHZl
cnRpY2FsU2Nyb2xsYmFySGlkZGVuQnlTdHlsZSgpIGNvbnN0IGZpbmFsOworCisgICAgU2Nyb2xs
UG9zaXRpb24gc2Nyb2xsUG9zaXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Njcm9sbFBv
c2l0aW9uOyB9CisKKyAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2hCYXIuZ2V0KCk7IH0KKyAgICBTY3JvbGxiYXIqIHZlcnRpY2FsU2Ny
b2xsYmFyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisgICAgU2Nyb2xs
YWJsZUFyZWEqIGVuY2xvc2luZ1Njcm9sbGFibGVBcmVhKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIGhhbmRsZVdoZWVsRXZlbnRGb3JTY3JvbGxpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiwgT3B0aW9uYWw8V2hlZWxTY3JvbGxHZXN0dXJlU3RhdGU+KSBmaW5hbDsKKyAgICBib29sIGlz
U2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSBmaW5hbDsKKyAgICBib29sIGhhc1Njcm9sbGFi
bGVPclJ1YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBmaW5hbDsKKyAgICBib29sIHVzZURhcmtBcHBl
YXJhbmNlKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgZmluYWw7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCisgICAgYm9vbCBoYW5kbGVU
b3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIGRpZFN0YXJ0U2Nyb2xsKCkgZmluYWw7CisgICAgdm9pZCBkaWRFbmRTY3JvbGwoKSBm
aW5hbDsKKyAgICB2b2lkIGRpZFVwZGF0ZVNjcm9sbCgpIGZpbmFsOworI2VuZGlmCisKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllckZvckhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCBmaW5hbDsK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllckZvclZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgZmlu
YWw7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJGb3JTY3JvbGxDb3JuZXIoKSBjb25zdCBmaW5h
bDsKKworICAgIGJvb2wgdXNlc0NvbXBvc2l0ZWRTY3JvbGxpbmcoKSBjb25zdCBmaW5hbDsKKyAg
ICBib29sIHVzZXNBc3luY1Njcm9sbGluZygpIGNvbnN0IGZpbmFsOworCiAgICAgYm9vbCBzaG91
bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkgY29uc3QgZmluYWw7CiAKKyAg
ICBib29sIGlzUmVuZGVyTGF5ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXImLCBjb25zdCBJbnRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsQ29ybmVyUmVjdChjb25zdCBJbnRSZWN0
JikgZmluYWw7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNT
Y3JvbGxDb3JuZXJWaXNpYmxlKCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBzY3JvbGxDb3Ju
ZXJSZWN0KCkgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZp
bmFsOworICAgIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2lu
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyJiwg
Y29uc3QgSW50UG9pbnQmKSBjb25zdCBmaW5hbDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyJiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBTY3JvbGxPZmZz
ZXQmKSBmaW5hbDsKKyAgICBTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlEKCkgY29uc3Qg
ZmluYWw7CisKKyAgICBJbnRSZWN0IHZpc2libGVDb250ZW50UmVjdEludGVybmFsKFZpc2libGVD
b250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFycywgVmlzaWJsZUNvbnRlbnRSZWN0QmVoYXZpb3Ip
IGNvbnN0IGZpbmFsOworICAgIEludFNpemUgb3ZlcmhhbmdBbW91bnQoKSBjb25zdCBmaW5hbDsK
KyAgICBJbnRQb2ludCBsYXN0S25vd25Nb3VzZVBvc2l0aW9uSW5WaWV3KCkgY29uc3QgZmluYWw7
CisgICAgYm9vbCBpc0hhbmRsaW5nV2hlZWxFdmVudCgpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
c2hvdWxkU3VzcGVuZFNjcm9sbEFuaW1hdGlvbnMoKSBjb25zdCBmaW5hbDsKKyAgICBJbnRSZWN0
IHNjcm9sbGFibGVBcmVhQm91bmRpbmdCb3goYm9vbCogaXNJbnNpZGVGaXhlZCA9IG51bGxwdHIp
IGNvbnN0IGZpbmFsOworICAgIGJvb2wgaXNVc2VyU2Nyb2xsSW5Qcm9ncmVzcygpIGNvbnN0IGZp
bmFsOworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZm9yY2VVcGRhdGVTY3JvbGxiYXJzT25NYWluVGhyZWFkRm9yUGVyZm9ybWFuY2VUZXN0
aW5nKCkgY29uc3QgZmluYWw7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBib29s
IGlzU2Nyb2xsU25hcEluUHJvZ3Jlc3MoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorICAgIGJvb2wg
dXNlc01vY2tTY3JvbGxBbmltYXRvcigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgbG9nTW9ja1Nj
cm9sbEFuaW1hdG9yTWVzc2FnZShjb25zdCBTdHJpbmcmKSBjb25zdCBmaW5hbDsKKworICAgIFN0
cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAgICBJbnRTaXplIHZpc2li
bGVTaXplKCkgY29uc3QgZmluYWw7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemUoKSBjb25zdCBm
aW5hbDsKKyAgICBJbnRTaXplIHJlYWNoYWJsZVRvdGFsQ29udGVudHNTaXplKCkgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIHJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShjb25zdCBTY3JvbGxQ
b3NpdGlvbiYsIFNjcm9sbFR5cGUgPSBTY3JvbGxUeXBlOjpVc2VyLCBTY3JvbGxDbGFtcGluZyA9
IFNjcm9sbENsYW1waW5nOjpDbGFtcGVkKSBmaW5hbDsKKworICAgIGJvb2wgY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb250YWluc0RpcnR5T3Zlcmxh
eVNjcm9sbGJhcnM7IH0KKyAgICB2b2lkIHNldENvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyhib29sIGRpcnR5U2Nyb2xsYmFycykgeyBtX2NvbnRhaW5zRGlydHlPdmVybGF5U2Nyb2xsYmFy
cyA9IGRpcnR5U2Nyb2xsYmFyczsgfQorCisgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzQWZ0ZXJT
dHlsZUNoYW5nZShjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZvaWQgdXBkYXRl
U2Nyb2xsYmFyc0FmdGVyTGF5b3V0KCk7CisKKyAgICB2b2lkIHBvc2l0aW9uT3ZlcmZsb3dDb250
cm9scyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBjbGVhclNjcm9sbENvcm5lcigpOworICAg
IHZvaWQgY2xlYXJSZXNpemVyKCk7CisKKyAgICB2b2lkIHVwZGF0ZUFsbFNjcm9sbGJhclJlbGF0
ZWRTdHlsZSgpOworCisgICAgdm9pZCBkcmF3UGxhdGZvcm1SZXNpemVySW1hZ2UoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5b3V0UmVjdCYgcmVzaXplckNvcm5lclJlY3QpOworCisgICAgTGF5
b3V0VW5pdCBvdmVyZmxvd1RvcCgpIGNvbnN0OworICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0
b20oKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCgpIGNvbnN0OworICAgIExh
eW91dFVuaXQgb3ZlcmZsb3dSaWdodCgpIGNvbnN0OworCisgICAgUmVuZGVyTGF5ZXI6Ok92ZXJm
bG93Q29udHJvbFJlY3RzIG92ZXJmbG93Q29udHJvbHNSZWN0cygpIGNvbnN0OworCisgICAgYm9v
bCBvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3Qp
IGNvbnN0OworCisgICAgYm9vbCBzY3JvbGxpbmdNYXlSZXZlYWxCYWNrZ3JvdW5kKCkgY29uc3Q7
CisKKyAgICB2b2lkIGNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKCk7CisgICAgdm9pZCBjb21wdXRl
SGFzQ29tcG9zaXRlZFNjcm9sbGFibGVPdmVyZmxvdygpOworCisgICAgYm9vbCBoYXNIb3Jpem9u
dGFsT3ZlcmZsb3coKSBjb25zdDsKKyAgICBib29sIGhhc1ZlcnRpY2FsT3ZlcmZsb3coKSBjb25z
dDsKKworICAgIGJvb2wgc2hvd3NPdmVyZmxvd0NvbnRyb2xzKCkgY29uc3Q7CisKKyAgICAvLyBO
T1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGRlbiBzZXRTY3Jv
bGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KKyAgICB2b2lkIHNjcm9sbFRvKGNvbnN0IFNj
cm9sbFBvc2l0aW9uJik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdGluZ0xheWVyc0FmdGVyU2Ny
b2xsKCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXImKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlU2Nyb2xsYWJsZUFyZWFTZXQoYm9vbCBoYXNPdmVyZmxv
dyk7CisKKyAgICBTY3JvbGxPZmZzZXQgY2xhbXBTY3JvbGxPZmZzZXQoY29uc3QgU2Nyb2xsT2Zm
c2V0JikgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUxheWVyUG9zaXRpb25zQWZ0ZXJPdmVyZmxv
d1Njcm9sbCgpOworICAgIHZvaWQgdXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckRvY3VtZW50U2Ny
b2xsKCk7CisKKyAgICBPcHRpb25hbDxMYXlvdXRSZWN0PiB1cGRhdGVTY3JvbGxQb3NpdGlvbihj
b25zdCBTY3JvbGxQb3NpdGlvbkNoYW5nZU9wdGlvbnMmLCBjb25zdCBMYXlvdXRSZWN0JiByZXZl
YWxSZWN0LCBjb25zdCBMYXlvdXRSZWN0JiBsb2NhbEV4cG9zZVJlY3QpOworCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFkanVzdEZvcklPU0NhcmV0V2hlblNjcm9sbGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fYWRqdXN0Rm9ySU9TQ2FyZXRXaGVuU2Nyb2xsaW5nOyB9CisgICAg
dm9pZCBzZXRBZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcoYm9vbCBhZGp1c3RGb3JJT1ND
YXJldFdoZW5TY3JvbGxpbmcpIHsgbV9hZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmcgPSBh
ZGp1c3RGb3JJT1NDYXJldFdoZW5TY3JvbGxpbmc7IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHZvaWQgdXBkYXRlU2Nyb2xsQ29ybmVyU3R5bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVJlc2l6ZXJT
dHlsZSgpOworCiBwcml2YXRlOgorICAgIC8vIE1pbmltdW0gcGFkZGluZyBvbiB4ODZfNjQgKDQg
Ynl0ZXMpLCBhZnRlciBtX3Njcm9sbEhlaWdodCkKKyAgICBib29sIG1fc2Nyb2xsRGltZW5zaW9u
c0RpcnR5IDogMTsKKyAgICBib29sIG1faW5PdmVyZmxvd1JlbGF5b3V0IDogMTsKKyAgICBib29s
IG1fcmVnaXN0ZXJlZFNjcm9sbGFibGVBcmVhIDogMTsKKyAgICBib29sIG1faGFzQ29tcG9zaXRl
ZFNjcm9sbGFibGVPdmVyZmxvdyA6IDE7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lm
IEVOQUJMRShJT1NfVE9VQ0hfRVZFTlRTKQorICAgIGJvb2wgbV9yZWdpc3RlcmVkQXNUb3VjaEV2
ZW50TGlzdGVuZXJGb3JTY3JvbGxpbmcgOiAxOworI2VuZGlmCisgICAgYm9vbCBtX2FkanVzdEZv
cklPU0NhcmV0V2hlblNjcm9sbGluZyA6IDE7CisjZW5kaWYKKyAgICBib29sIG1fcmVxdWlyZXNT
Y3JvbGxQb3NpdGlvblJlY29uY2lsaWF0aW9uIDogMTsKKyAgICBib29sIG1fY29udGFpbnNEaXJ0
eU92ZXJsYXlTY3JvbGxiYXJzIDogMTsKKyAgICBib29sIG1fdXBkYXRpbmdNYXJxdWVlUG9zaXRp
b24gOiAxOworCisgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiBvdXIgc2Nyb2xsZWQgYXJlYS4K
KyAgICBpbnQgbV9zY3JvbGxXaWR0aDsKKyAgICBpbnQgbV9zY3JvbGxIZWlnaHQ7CisKICAgICBS
ZW5kZXJMYXllciYgbV9sYXllcjsKKyAgICBTY3JvbGxQb3NpdGlvbiBtX3Njcm9sbFBvc2l0aW9u
OworICAgIE9wdGlvbmFsPFNjcm9sbFBvc2l0aW9uPiBtX3Bvc3RMYXlvdXRTY3JvbGxQb3NpdGlv
bjsKKworICAgIC8vIEZvciBsYXllcnMgd2l0aCBvdmVyZmxvdywgd2UgaGF2ZSBhIHBhaXIgb2Yg
c2Nyb2xsYmFycy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2hCYXI7CisgICAgUmVmUHRyPFNj
cm9sbGJhcj4gbV92QmFyOworCisgICAgSW50UG9pbnQgbV9jYWNoZWRPdmVybGF5U2Nyb2xsYmFy
T2Zmc2V0OworCisgICAgLy8gUmVuZGVyZXJzIHRvIGhvbGQgb3VyIGN1c3RvbSBzY3JvbGwgY29y
bmVyIGFuZCByZXNpemVyLgorICAgIFJlbmRlclB0cjxSZW5kZXJTY3JvbGxiYXJQYXJ0PiBtX3Nj
cm9sbENvcm5lcjsKKyAgICBSZW5kZXJQdHI8UmVuZGVyU2Nyb2xsYmFyUGFydD4gbV9yZXNpemVy
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlck1hcnF1ZWU+IG1fbWFycXVlZTsgLy8gVXNl
ZCBmb3IgPG1hcnF1ZWU+LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmluZGV4IDJkMDgyNjQ4N2NjMGQwNzhi
Y2NhOGU4ZGM1ZmI5MjFlYWVmNGY0NGYuLjJjNmEwNGIwZmMyODgyOTFkYTYzNTlhMjZhMDA5ZGQ3
MGZkZDE2ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZv
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllclNjcm9s
bGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5b3V0U3RhdGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC04ODIsNyArODgz
LDExIEBAIFNjcm9sbGFibGVBcmVhKiBSZW5kZXJMaXN0Qm94OjplbmNsb3NpbmdTY3JvbGxhYmxl
QXJlYSgpIGNvbnN0CiAgICAgaWYgKCFsYXllcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gbGF5ZXItPmVuY2xvc2luZ1Njcm9sbGFibGVMYXllcihJbmNsdWRlU2VsZk9y
Tm90OjpFeGNsdWRlU2VsZiwgQ3Jvc3NGcmFtZUJvdW5kYXJpZXM6Ok5vKTsKKyAgICBhdXRvKiBl
bmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXIgPSBsYXllci0+ZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVy
KEluY2x1ZGVTZWxmT3JOb3Q6OkV4Y2x1ZGVTZWxmLCBDcm9zc0ZyYW1lQm91bmRhcmllczo6Tm8p
OworICAgIGlmICghZW5jbG9zaW5nU2Nyb2xsYWJsZUxheWVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBlbmNsb3NpbmdTY3JvbGxhYmxlTGF5ZXItPnNjcm9sbGFibGVB
cmVhKCk7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5k
YWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDE1
NDcxNzRlNzQyMWI4YmNmYTlmODczM2RjYjM4YTdlZjVlOTc1ZTEuLmMxZTY0NDNjMzgyZTJhMzAx
YWVjNzE5ZGQ3ZGE2Mjc0ZmYzNWUyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBPcHRpb25hbDxGbG9hdFJlY3Q+IFJl
bmRlck9iamVjdDo6Y29tcHV0ZUZsb2F0VmlzaWJsZVJlY3RJbkNvbnRhaW5lcihjb25zdCBGbG9h
dAogc3RhdGljIHZvaWQgb3V0cHV0UmVuZGVyVHJlZUxlZ2VuZChUZXh0U3RyZWFtJiBzdHJlYW0p
CiB7CiAgICAgc3RyZWFtLm5leHRMaW5lKCk7Ci0gICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5s
aW5lL0koTilsaW5lLWJsb2NrLCAoQSlic29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEsp
eSwgKEYpbG9hdGluZywgKE8pdmVyZmxvdyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQs
IGhhcyhMKWF5ZXIsIChDKW9tcG9zaXRlZCwgKCspRGlydHkgc3R5bGUsICgrKURpcnR5IGxheW91
dCI7CisgICAgc3RyZWFtIDw8ICIoQilsb2NrLyhJKW5saW5lL0koTilsaW5lLWJsb2NrLCAoQSli
c29sdXRlL0ZpKFgpZWQvKFIpZWxhdGl2ZS9TdGljKEspeSwgKEYpbG9hdGluZywgKE8pdmVyZmxv
dyBjbGlwLCBBbm9uKFkpbW91cywgKEcpZW5lcmF0ZWQsIGhhcyhMKWF5ZXIsIGhhc0xheWVyKFMp
Y3JvbGxhYmxlQXJlYSwgKEMpb21wb3NpdGVkLCAoKylEaXJ0eSBzdHlsZSwgKCspRGlydHkgbGF5
b3V0IjsKICAgICBzdHJlYW0ubmV4dExpbmUoKTsKIH0KIApAQCAtMTExNiwxMCArMTExNiwxNCBA
QCB2b2lkIFJlbmRlck9iamVjdDo6b3V0cHV0UmVuZGVyT2JqZWN0KFRleHRTdHJlYW0mIHN0cmVh
bSwgYm9vbCBtYXJrLCBpbnQgZGVwdGgpCiAgICAgZWxzZQogICAgICAgICBzdHJlYW0gPDwgIi0i
OwogCi0gICAgaWYgKGhhc0xheWVyKCkpCisgICAgaWYgKGhhc0xheWVyKCkpIHsKICAgICAgICAg
c3RyZWFtIDw8ICJMIjsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgICAg
IGlmIChkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqdGhpcykubGF5ZXIoKS0+c2Ny
b2xsYWJsZUFyZWEoKSkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiUyI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN0cmVhbSA8PCAiLSI7CisgICAgfSBlbHNlCisgICAgICAgIHN0cmVhbSA8
PCAiLS0iOwogCiAgICAgaWYgKGlzQ29tcG9zaXRlZCgpKQogICAgICAgICBzdHJlYW0gPDwgIkMi
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IGQzYTY2NzFjNjdh
YzFkOTM0YWY2YjJlZjRkN2ZlZDBjZmZmOTMwN2QuLjk4MWFiYzBlNDYzMjk3NDBhZGY0YTAwNzBm
MDg5ZjVhNTI2MzZlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
QEAgLTEwMCw2ICsxMDAsNyBAQCBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkSW1h
Z2VDbGllbnQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZW5kZXJPYmplYwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlckxheWVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJMYXll
clNjcm9sbGFibGVBcmVhOwogcHVibGljOgogICAgIC8vIEFub255bW91cyBvYmplY3RzIHNob3Vs
ZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBub2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0
b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBhcyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVj
dG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGY4YmQxMTNhOTg2YjAz
Nzg4N2I2MDFlZGZlZWNmNWE0MmQyYWNlNzIuLjRmMzFiZDgzODBmMDA2NDVhMGQ1ODNkODEwMGE2
YmM2YmI2OTc1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE1OCw2
ICsxNTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRl
clRoZW1lLmgiCkBAIC0xODM4LDcgKzE4MzksOCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnNjcm9sbEJ5U2ltdWxhdGluZ1doZWVsRXZlbnQoRWxlbWVudCYgZWxlbWVudCwgZG91Ygog
ICAgICAgICBpZiAoIWJveC5jYW5CZVNjcm9sbGVkQW5kSGFzU2Nyb2xsYWJsZUFyZWEoKSkKICAg
ICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAg
ICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpOworICAgICAgICBBU1NFUlQoYm94Lmxh
eWVyKCkpOworICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IGJveC5sYXllcigpLT5zY3JvbGxhYmxl
QXJlYSgpOwogICAgIH0KICAgICAKICAgICBpZiAoIXNjcm9sbGFibGVBcmVhKQpAQCAtMjg2NCw4
ICsyODY2LDEwIEBAIEV4Y2VwdGlvbk9yPFNjcm9sbGFibGVBcmVhKj4gSW50ZXJuYWxzOjpzY3Jv
bGxhYmxlQXJlYUZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKIAogICAgICAgICBpZiAoaXM8UmVu
ZGVyTGlzdEJveD4ocmVuZGVyQm94KSkKICAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gJmRv
d25jYXN0PFJlbmRlckxpc3RCb3g+KHJlbmRlckJveCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJveC5sYXllcigpKTsKKyAgICAgICAgICAgIHNjcm9s
bGFibGVBcmVhID0gcmVuZGVyQm94LmxheWVyKCktPnNjcm9sbGFibGVBcmVhKCk7CisgICAgICAg
IH0KICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWROb2RlVHlw
ZUVycm9yIH07CiAK
</data>
<flag name="review"
          id="435423"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>